Tải bản đầy đủ (.pdf) (15 trang)

Chương 2: Phân tích từ vựng potx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (378.16 KB, 15 trang )

IT4073:NGÔN NGỮ và
PHƯƠNG PHÁP DỊCH
Phạm Đăng Hải

29/18/2012
Chương 2: Phân tích từ vựng
1. Nhiệmvụ củabộ phân tích từ vựng
2. Biểuthức chính quy
3. Ô tô mát hữuhạn
4. Phân tích từ vựng của ngôn ngữ PL/0
39/18/2012
Mục đích & Nhiệmvụ
•Mục đích:
– Tìm chuỗi dài nhất cáckýtựđầuvào, bắt đầutừ ký tự
hiệntạitương ứng vớimộttừ tố và trả về từ tố này
•Nhiệmvụ
–Duyệttừng ký tự củavănbảnnguồn
•Loạibỏ cáckýtự không cầnthiếtnhư dấu cách, chú thích,
–Xâydựng từ vựng từ những ký tựđọc được
–Nhậndạng từ tố và gửitới pha tiếp
Nhậnbiếttừ tố gồm
–Nhậnbiếtcáctừ khóa, tên do ngườidùngđịnh nghĩa
–Nhậnbiết các con số, hằng chuỗi, hằng ký tự
–Nhậnbiếtcáckýtựđặcbiệt (+,*, ), ký hiệu kép (:=,!=, )
1. Nhiệmvụ củabộ phân tích
49/18/2012
Từ vựng và Từ tố
• Từ vựng (Lexeme)
–Làđơnvị nhỏ nhất trong ngôn ngữ lậptrình
• Được coi là ký hiệucủamộtbảng chữ của ngôn ngữ
– Đượcxâydựng từ cáckýtự ASCII


• Từ tố (Token)
–Làthuậtngữ dùng chỉ các từ vựng có cùng ý
nghĩa cú pháp
•Cóthể coi từ vựng là những từ cụ thể trong từđiển:
“hôm nay”, “trời”, “đẹp”; còn từ tố là loạitừ: “trạng từ”,
“danh từ”, “tính từ”,
1. Nhiệmvụ củabộ phân tích
59/18/2012
Từ tố→Ví dụ
•“pos”, “start”, “size”, “+”, “10”, “*”,”:=“, “;”làtừ vựng
•“pos”, “start”, “size”, → các từ vựng thuộclớptừ tố
tên (ident)
•”:=“→ từ vựng củatừ tố gán (assign)
•“10” → từ vựng củatừ tố số nguyên (number)
•“+” → từ vựng củatừ tố cộng (plus)
•“*
” → từ vựng củatừ tố nhân (times)
•“;” → từ vựng củatừ tố chấmphẩy(semicolon)
1. Nhiệmvụ củabộ phân tích
pos := start + 10 * size;
69/18/2012
Từ tố→Chú ý
1. Nhiệmvụ củabộ phân tích
•Cáctừ tố Ident, number, plus, assign, do người
viếttrìnhdịch tựđịnh nghĩa để dễ dàng cho việcmã
hóa chương trình. Đây là việcsố hóa ký hiệu
•Mộttừ tố có thểứng vớitậpcáctừ vựng khác nhau
nên cầnthêmmộtsố thông tin khác để biết được
cụ thểđólàtừ vựng nào
–Cácchuỗi“19”, “365” đềulàchuỗisố, có từ tố “number”,

nhưngkhisinhmãcầnphảibiếtrõgiátrị là 19 hay 365
•Bộ phân tích từ vựng không chỉ nhậndạng được
các từ tố mà còn phảibiếtthuộc tính tương ứng
–Từ tố tác động đếnbộ phân tích cú pháp
–Thuộctínhsử dụng trong bộ sinh mã
79/18/2012
Thựchiện
•Thựchiệnlặpdựavàoyêucầutừ bộ ptcp
–Bộ ptcp khi cầnmộttừ tố sẽ gọi getToken()
–Nhận đượcy/cầu, bộ pttv sẽđọccáckýtự cho tớikhixây
dựng xong từ vựng và nhậnratừ tố hoặcgặplỗi
•Thường bộ pttv được chia thành 2 phầnchính
– Đọckýtự
–Xâydựng từ vựng và nhậndạng từ tố
1. Nhiệmvụ củabộ phân tích
Phân tích
từ vựng
Phân tích
cú pháp
Bảng ký hiệu
Chương
trình nguồn
Token
getToken()
89/18/2012
Mẫu (Pattern)
•Làluật để mô tả mộttừ tố nào đó
–Cơ sở phân biệt& nhậndạng các từ tố khác nhau
•Chuỗikýtự cùng thỏamãnmộtluật⇒có cùng mộttừ tố
•Từ tố là tên riêng củamộtluậtmôtả, từ vựng là một

trường hợpthỏamãnluật
•Vídụ
–Luậtmôtả củatừ tố Ident
•Bắt đầulàmộtchữ cái
•Tiếp theo là tổ hợpchữ cái, chữ số
–Luậtmôtả củatừ tố assign
•Bắt đầubởikýtự “:”, ngay sau đólàkýtự “=“
•Luật đượcmôtả bởi biểuthức chính quy
1. Nhiệmvụ củabộ phân tích
99/18/2012
Chương 2: Phân tích từ vựng
1. Nhiệmvụ củabộ phân tích từ vựng
2. Biểuthức chính quy
3. Ô tô mát hữuhạn
4. Phân tích từ vựng của ngôn ngữ PL/0
109/18/2012
Giớithiệu
2. Biểuthức chính quy
• Ngôn ngữ: Tậphợpcủacáccâu/ xâu(string)
• Câu: Dãy hữuhạncủacáctừ/ký hiệu(symbol)
• Từ: Đượctạo nên từ mộtbộ chữ hữuhạn
Ví dụ:
–Ngônngữ C là tậpcáccâulệnh tạo nên các chương
trình C hợplệ
–Bộ chữ cho ngôn ngữ C là tậpcácchữ cái ASCII
•Một ngôn ngữ có thể là vô hạn, hoặchữuhạn
•Một ngôn ngữ (có thể vô hạn) có thểđượcmôtả
hữuhạnnhờ sử dụng biểuthức chính quy :
–Mỗibiểuthức đặctrưng cho mộttập câu/xâu
–Chỉ xét xâu có thuộc ngôn ngữ không, chưa xét ý nghĩa

củaxâu
119/18/2012
Biểuthức chính quy (regular expression)
Cho Σ là mộtbảng chữ củamột ngôn ngữ.
– ∅ là biểuthức chính quy biểudiễn ngôn ngữ ∅
– ε là biểuthức chính quy biểudiễn ngôn ngữ {ε}
– ∀a ∈
Σ, a là biểuthức chính quy biểudiễntập{a}
–Nếu r và s là các biểuthức chính quy biểudiễn
các tậpxâuR và S tương ứng thì (r + s), (r.s), (r*)
là các biểuthức chính quy biểudiễncáctậpxâu
R

S, RS và R* tương ứng.
Ngôn ngữđược xác định bởibiểuthức chính
quy e, ký hiệulàL(e) là ngôn ngữ chính quy
2. Biểuthức chính quy
129/18/2012
Biểuthức chính quy→Ghi chú
•Biểuthức (r + s) có thểđượcviết (r |s);
•Biểuthức (r.s) thành (rs)
•Cóthể bỏ qua ký hiệu ε
–( a | ) ⇔ (a | ε) // cũng có thể viếta?
•Cóthể bỏ ngoặc đơnbởi định nghĩathứ tự
ưutiên
– Phép đóng Kleene (*) ưutiênhơn phép ghép(.)
– Phép ghép(.) ưutiênhơn phép hoặc (+)
•Quyước
– [abcd] ⇔ (a|b|c|d)
– [a-f] ⇔ [abcdef]

–[a-fA-F] ⇔ [abcdefABCDEF]
2. Biểuthức chính quy
139/18/2012
Biểuthức chính quy→Ví dụ
Cho Σ ={a,b} mộtbảng chữ.
–e
1
= a*+b* ⇒ L(e
1
) = {ε,a,aa,aaa,…,b,bb, }
–e
2
= a*b* ⇒ L(e
2
) = {ε,a,b,aa,ab,bb,aaa, }
–e
3
= a(a+b)*
⇒L(e
3
)={a,aa,ab,aaa,aab,aba,abb, }
• Xâu có dạng: bắt đầulàkýhiệu a, tiếptheolàtổ
hợpbấtkỳ của các ký hiệua, b
•Nếua làmộtchữ cái, b là chữ số
⇒L(e
3
) là ngôn ngữ chứacáctên
⇒e
3
biểuthức chính quy sinh mô tả mộttên

2. Biểuthức chính quy
149/18/2012
Tính chất đạisố củabtcq
•2 biểuthức chính quy là tương đương nếu
cùng xác định một ngôn ngữ
•Nếu r, s, t là các biểuthức chính quy
– r + s = s + r r + r = r
– ( r + s) + t = r + s + t = r + (s + t)
– (r.s).t = r. s. t = r. (s. t)
–r.ε = ε.r = r
–r + ∅ = ∅ + r = r
– r(s+t) = rs + ts (r+s)t = rt + st
– r + r* = r* ; (r + ε)* = r* ; (r*)* = r*
– rr* = r*r = r+
– (r+s)* =(r*s*)*
2. Biểuthức chính quy
159/18/2012
Vănphạm chính quy và Ngôn ngữ chính quy
• Vănphạm chính quy
–Vănphạmmàmọisảnxuấtcódạng
A→a|aB hoặcA→a|Ba
– Dùng diễntả từ vựng của NNLT
<Tên>→<Chữ cái>|<Tên> <Chữ cái>|<Tên><Chữ số>
<Tên>→ “a” |”b” |”c” |….|”z”|”A”|”B”|…|”Z”
<Chữ số> →”0” | ”1” | ”2” | ”3” |”4” | ”5” |”6” | ”7” |”8” |”9”
–Vănphạm chính quy sinh ra ngôn ngữ chính quy
• Ngôn ngữ chính quy
– Đượcbiểudiễn(mô tả) bởibiểuthức chính quy
– Đoán nhậnbởi các Otomat hữuhạn
2. Biểuthức chính quy

169/18/2012
Ngôn ngữ chính quy →Vănphạm chính quy
r là biểuthức chính qui cầnchuyển
1. Thêm ký hiệukhởi đầu S và tạosan xuất S → r
2. Loạibỏ khỏivănphạm các siêu ký hiệucủar
• ∀ SX dạng A →r
1
.r
2
: Thêm ký hiệu không
kết thúc B và thay thành 2 SX:
A →r
1
B & B →r
2
• ∀ SX dạng A →r
1
+r
2
: Thay bởi A →r
1
|r
2
• ∀ SX dạng A →r
1
* r
2
: Thêm ký hiệu không
kết thúc B và thay thành 4 sảnxuất
A →r

1
B & A → r
2
& B →r
1
B & B → r
2
2. Biểuthức chính quy
179/18/2012
Ví dụ
Chuyển đổibiểuthức e = a(a+b)*
1. Thêm S và sảnxuấtS→ a(a+b)*
2. Loạibỏ cáckýhiệu không thuộcbộ chữ
– Xét r = a(a+b)* //r
1
=a; r
2
= (a+b)*
Thêm A và các SX
S→aA & A →(a+b)*
– Xét A →(a+b)* // r
1
= a+b ; r
2
= ε
Thêm B và các SX
A→(a+b)B & A →ε &B→(a+b) & B →ε
–Ápdụng luật phân phốiphải
A→aB+bB & A →ε & B→aB+bB & B →ε
A → aB|bB| ε và B → aB|bB| ε

2. Biểuthức chính quy
189/18/2012
Ví dụ
Chuyển đổibiểuthức e = a(a+b)* (tiếp)
–Loạibỏ ký hiệu ε bởitạoraxâumới
B → aB|bB| ε thành B → aB|bB| a | b
A → aB|bB| ε thành A → aB|bB| a | b
Vai trò củaA vàB làtương đương. Thay ký
hiệuB bằng A và loạibỏ B
Kếtquả: Vănphạmcuối
S → a |aA
A → aA | bA | a | b
2. Biểuthức chính quy
199/18/2012
Chương 2: Phân tích từ vựng
1. Nhiệmvụ củabộ phân tích từ vựng
2. Biểuthức chính quy
3. Ô tô mát hữuhạn
4. Phân tích từ vựng của ngôn ngữ PL/0
209/18/2012
Mô tả
•Gồmmộttậpcáctrạng thái Q
–Cómộttrạng thái đầu q
0
∈ Q
–Cómộttậptrạng thái kếtthúc F ⊆Q
•Mộtbộ chữ vào Σ
•Mộttập các hàm dịch chuyển δ:(Q x Σ) → Q
Hoạt động
–Ô-tô-mátxuấtpháttừ trạng thái đầu, đọctừng ký hiệu

của xâu vào, chuyểntrạng thái dựatrên trạng thái hiện
thờivàkýhiệu đọc được.
–Saukhiđọchếtxâuvàomàô-tô-mátở trạng thái kết
thúc, xâu đượcgọilàđược đoán nhậnbởiô-tô-mát
3. Ô tô mát hữuhạn
219/18/2012
Ví dụ
• Σ = {a,b,c}
•Q = {q
0
, q
1
}
•q
0 =
q
0
•F = {q
1
}
3. Ô tô mát hữuhạn
q
1
q
1
q
0
q
1
q

0
q
0
q
1
q
0
cba
δ
Endcbbaacba
q
0
q
1
Xâu abcaabbc được đoán nhận
229/18/2012
Biểudiễnô tômáthữuhạn
3. Ô tô mát hữuhạn
Trạng thái
Trạng thái đầuTrạng thái kếtthúc
pp
a
δ(p,a) = q
q
1
q
0
a
a
b

b
c
c
Xâu trên bộ chữ {a,b,c} có lẻ ký hiệua
239/18/2012
Ô tô mát hữuhạn đơn định (OHĐ)
OHĐ(DFA: Deterministic Finite Automata) là
mộthệ thống gồm
M = (Σ, Q, δ,q
0
, F)
– Σ: Bộ chữ vào
–Q: Tậphữuhạncáctrạng thái củabộđiềukhiển
•Q ∩Σ= ∅
– δ : Q x Σ→Q: Hàm dịch chuyển
• Hàm dich chuyển đơn định:
–q
0
∈ Q: Trạng thái ban đầu
–F ⊆ Q Tậpcáctrạng thái cuối
3. Ô tô mát hữuhạn
249/18/2012
Ví dụ
M = (Σ, Q, δ,q
0
, F)
Σ = {a,b}
•Q = {q
0
, q

1
, q
2
, q
3
}
•q
0 =
q
0
•F = {q
2
}
3. Ô tô mát hữuhạn
q
3
q
3
q
3
q
3
q
1
q
2
q
2
q
3

q
1
q
3
q
1
q
0
ba
δ
q
2
q
0
a
a,b
b
a
q
3
q
1
bb
a
L(M) = {ab}{ab}
n≥0
= {ab}
n(n>0)
= {ab,abab, ababab, }
259/18/2012

Hình trạng củaFA
•Hìnhtrạng củamộtFA làmộtxâudạng qx
– q ∈Q : Trạng thái hiệntạicủaFA
– x ∈∑* : Phân chưaxétcủaxâuvào
•Kýhiệu được đọcbởi đầu đọclàkýhiệu đầucủax
• Chuyển đổihìnhtrạng
–Nếu x = ay và ∃δ(q,x) = p thì qx = qay ⇒ py
qx ⇒ py : Là mộtbướcbiến đổihìnhtrạng
–Vídụ: q
0
abaab ⇒q
1
baab ⇒q
2
aab ⇒q
1
ab ⇒q
3
b ⇒q
3
•Hìnhtrạng đầu: q
0
ω (ω: xâu cần đoán nhận)
–Nếu q
0
ω ⇒
*
q
n+1
∈F: Xâu ω được đoán nhận

• Ngôn ngữđược đoán nhậnmở DFA M là L(M)
–L(M) = {ω | ω ∈∑* và q
0
ω ⇒
*
p ∈F}
3. Ô tô mát hữuhạn
269/18/2012
Ô tô mát hữuhạn đơn định→Ví dụ
3. Ô tô mát hữuhạn
1
0 0
0
q
1
101
0
0
0
1
(0+1)*101 ⇔ Xâu nhị phân có hậutố là 101
Đoán nhậnsố nguyên hoặcsố thựcdấuphẩytĩnh
ab
{a
n
b
m
, n,m ≥0}
q
1

q
2
q
0
a,b
ba
q
1
q
2
Chữ số
q
0
Chữ số
Chữ số
279/18/2012
Ô tô mát hữuhạn không đơn định (OHK)
•OHK (NFA: Nondeterministic Finite Automata)
là mộthệ thống gồm
M = (Σ, Q, δ,q
0
, F)
– Σ, Q, q
0
, F: Định nghĩanhư DFA
– δ : Q x (Σ∪ε)→2
Q
•2
Q
: Tậpcáctậpcon củaQ, kể cả tậprỗng

• Hàm dich chuyển không đơn định: Tạimỗibướccó
thể tồntại nhiềulựachọn
• Đoán nhận xâu: Quá trình chuyển đổihìnhtrạng.
– Quá trình đoán nhậnkhông đơn định
• Ngôn ngữ: L(M) = {ω | ω ∈∑* và ∃ q
0
ω ⇒
*
p ∈F}
3. Ô tô mát hữuhạn
289/18/2012
Ví dụ
M = ({a,b},{
q
0
, q
1
, q
2
, q
3
,q
4
} δ,q
0
, {q
2
, q
4
})

3. Ô tô mát hữuhạn
{q
4
}{q
4
}q
4

{q
4
}q
3
{q
2
}{q
2
}q
2
{q
2
}

q
1
{q
0
,q
1
}{q
0

,q
3
}q
0
ba
δ
Đoán nhận xâu có 2 ký tự a, hoặc 2 ký tự b liên tiếp
a,b
q
4
q
0
a,b
b
a
q
3
q
1
q
2
b
a
a,b
q
0
abaab ⇒
q
0
baab ⇒

q
0
aab ⇒
q
3
ab ⇒
q
4
b ⇒
q
4
299/18/2012
DFA và NFA
• DFA và NFA tương đương nhau
– DFA và NFA cùng đoán nhậnmộtlớp ngôn ngữ
•Ngônngữ chính quy
•Vớimỗi NFA, tồntạiDFA tương đương
3. Ô tô mát hữuhạn
a,b
q
4
q
0
a,b
b
a
q
3
q
1

q
2
b
a
a,b
a,b
A
b
a
C
B
D
b
b
a
a
309/18/2012
Lân cậnrỗng: ε-Closure
•ChoM = (Σ, Q, δ,q
0
, F) là NFA
•Chop ∈ Q. ε-Closure(p) ={q ∈ Q| p ⇒
*
q}
– Lân cậnrỗng của p là các trạng thái q có thể đi
đếntừ p với đường dẫn ε
3. Ô tô mát hữuhạn
q
0
q

3
q
1
ε
q
2
ε
a
ε-Closure(q
0
) = {q
0
,q
1
,q
3
}
319/18/2012
Thuật toán tính lân cậnrỗng
•ChoM = (Σ, Q, δ,q
0
, F) là NFA
•Thuật toán
1. ε-Clos
0
{p} = {p}
2. Repeat
ε-Clos
i+1
{p} =

ε-Clos
i
{p} ∪ {q∈Q|∃s∈Clos
i
(p), δ(s, ε)=q}
3. Unil ε-Clos
i+1
{p} = ε-Clos
i
{p}
4. ε-Closure{p} = ε-Clos
i+1
{p}
Nhận xét:
Do ε-Clos
i
{p} ⊆ε-Clos
i+1
{p} ⊆ Q
Dãy đơn điệutăng nên dãy hộitụ
3. Ô tô mát hữuhạn
329/18/2012
Lân cậnrỗng củatập
NếuS ⊆ Q
– ε-Closure{S} = ∪ε-Closure{p} , ∀p ∈ S
–Nếu không tồntại bước chuyểnrỗng
• ε-Closure{S} = { S } ∀ S ⊆Q
3. Ô tô mát hữuhạn
q
0

q
4
q
1
ε
q
2
ε
a
q
3
b
ε-Closure{q
0
}={q
0
,q
1
,q
3
}
ε-Closure{q
1
,q
3
}={q
1
,q
3
}

339/18/2012
Chuyển đổiNFA→DFA
While Stack.NotEmpty() Do
1. S = Stack.Pop()
2. For ∀ a ∈∑ do
1. T = ∪δ(q,a) ;∀ q ∈ S
2. q’ = ε-Closure(T)
3. If q’ ∉ Q’ Then
1.Q’ = Q’ ∪{ q’ }
2.Stack.Push(q’)
4. δ’(S,a) = q’
For ∀ q’ ∈ Q
1. If q’ ∩F≠∅ Then
1. F’ = F’ ∪ {q’}
3. Ô tô mát hữuhạn
Cho NFA
M =(Σ, Q, δ,q
0
,F)
Xây dựng DFA
M’=
(Σ, Q’, δ’,q’
0
,F’)
Thuậttoán
•q’
0
= ε-Closure({q
0
})

•Q’={q’
0
}
•F’= { }
• Stack.PUSH(q’
0
)
349/18/2012
Ví dụ -1
3. Ô tô mát hữuhạn

{q
0
,q
1
}q
1
{q
1
}{q
0
,q
1
}q
0
ba
δ


{q

1
}
{q
1
}
b
D
C
B
A

{q
1
}
{q
0
,q
1
}
{q
0
}
Q’
∅∅
{q
0
,q
1
}{q
1

}
{q
0
,q
1
}{q
0
,q
1
}
{q
0
,q
1
}{q
0
}
a
δ’
a
q
0
q
1
a
a,b
a
D
b
C

B
A
a
b
a
b
a
a,b
359/18/2012
Ví dụ -2
3. Ô tô mát hữuhạn
a
q
0
q
1
q
3
q
2
b
c
b
q
8
b
q
0
q
1

q
3
q
4
q
5
q
7
q
6
c
ε
ε
ε
q
2
a
ε
ε
ε
ε
ε
369/18/2012
Tối ưu hóa trạng thái OHĐ
•Nhiều DFA cùng đoán nhậnmột ngôn ngữ
–Cần tìm DFA có ít trạng thái nhất
•Dễ dàng biểudiễn trong máy tính
•Trạng thái phân biệt
–Haitrạng thái p và q là không phân biệtnếu
∀ xâu w∈∑*, (pw,qw)⇒*(p’,q’)∈FxF∪(Q-F)x(Q-F)

pw,qw cùng dẫntớitrạng thái cuốihoặc không
–Vídụ: ε làxâuphânbiệtgiữacáctrạng thái kết thúc và
không kết thúc
• Nguyên tắc:
–Phânhoạch Q thành các nhóm t/thái không phân biệt
– Thay thế nhóm bằng trạng thái duy nhất
3. Ô tô mát hữuhạn
379/18/2012
Tối ưu hóa trạng thái OHĐ
1.Chia Q thành 2 nhóm F và Q - F
2.Giả thiết đãtồntại các nhóm A
1
, A
2
,…A
n
• Xét nhóm A
m
= {q
m
1
, q
m
k
}
• Xét a∈∑; p
m
i
= δ(q
m

i
, a) ; p
m
j
= δ(q
m
j
, a)
•Nếu ∃ a ∈∑ để p
m
i
và p
m
j
phân biệt(bởixâu
ω
):
q
m
i
và q
m
j
phân biệt(bởixâua
ω
)
•Nếu ∀ a ∈∑ p
m
i
và p

m
j
không phân biệt(

xâu
ω
)
q
m
i
và q
m
j
không phân biệt (

xâu a
ω
)
3.Thuật toán dừng khi không tạo thêm nhóm
3. Ô tô mát hữuhạn
389/18/2012
Ví dụ -1
3. Ô tô mát hữuhạn
a
q
0
q
3
a
q

2
q
1
a
q
5
a
q
4
a
a
b
b
q
2
q
0
q
1
q
3
b
b
a
a
a
a
399/18/2012
Ví dụ -2
3. Ô tô mát hữuhạn

a,b
q
0
q
3
a,b
q
2
a
q
1
a
a, b
q
4
q
0
q
1
b
a
a
a,b
q
3
q
2
b
a
a

b
b
409/18/2012
Xây dựng OHK từ biểuthức chính quy
•Sử dụng biểuthứcchínhquymôtả NNCQ
– Trong chương trình dịch, mô tả từ vựng
–Vídụ:
Tên : a(a+b)* //a chữ cái, b: chữ số
Số thựctĩnh: .b
+
| b
+
. b
+
//b: Chữ số
• Ngôn ngữ chính quy được đoán nhậnbởiFA
–Cầnxâydựng FA đoán nhận ngôn ngữ được
mô tả bởicácbiểuthức chính quy
3. Ô tô mát hữuhạn
419/18/2012
Thuật toán
ε : Là btcq ứng vớiFA
3. Ô tô mát hữuhạn
∅ : Là btcq ứng vớiFA
a∈∑: Là btcq ứng vớiFA
q
0
q
0
q

0
q
a
429/18/2012
Thuật toán
3. Ô tô mát hữuhạn
r Là btcq ứng với FA M
r
q
0
F
M
r
q
0
F
M
s
s Là btcq ứng với FA M
s
r.s
q
0
F
M
r
q
0
F
M

s
ε
ε
r*
q
0
F
M
r
f
ε
q’
0
ε
ε
r + s
q
0
F
M
r
q
0
M
s
q’
0
ε
ε
F

F
ε
ε
439/18/2012
Ví dụ -1
Xây dựng DFA đoán nhận NNCQ đượcbiểu
diễnbởi btcq (0+1)*011
3. Ô tô mát hữuhạn
q
0
q
4
q
1
q
2
0
1
0
1
1
q
3
1
0
1
0
0
449/18/2012
Ví dụ -2

Xây dựng DFA đoán nhận NNCQ đượcbiểu
diễnbởi btcq (01+010)*
3. Ô tô mát hữuhạn
q
3
q
1
0
0
0
1
1
q
2
q
0
459/18/2012
Thuật toán đoán nhận xâu củaOHĐ
•Phương pháp phân tích bảng
–Dựatrêngiảithuậttổng quát để đoán nhậnDFA
– Ưu điểm:
•Chương trình độclậpvớiDFA
•Dễ biến đổi, không cầnsửalạichương trình
–Nhược điểm:
•Khó khăn trong lậpbảng
• Kích thướcbảng lớn
•Phương pháp diễngiải
–Thựchiệnnhư diễngiải sơ đồ
–Dễ viết, nhưng c\trình gắnvới đồ thị dich chuyển
– Đượcsử dụng để xây dựng bộ phân tích từ vựng

3. Ô tô mát hữuhạn
469/18/2012
Phương pháp phân tích bảng
#include <stdio.h>
#include <string.h>
enum state {A,B,C,D};
int Delta[4][2]={A,B,C,B,A,D,C,B}; //Hàm dịch chuyểndạng bảng
char c, str[100];
int i, L;
enum state q = A; //Automat ở trạng thái đầu
3. Ô tô mát hữuhạn
1
A B
C
D
101
0
0
0
1
479/18/2012
Phương pháp phân tích bảng
void main(){
printf("Nhap xau :"); fflush(stdin); gets(str);
i = 0; L = strlen(str); c = str[i]-48;
while (i < L){
if(c == 0 || c == 1){ //Xâu vào chỉ gồm các ký hiệu0,1
q = Delta[q][c]; //Chuyểntrạng thái mới
i++; //Dịch chuyển đầu đọc
c = str[i]-48; //Ký hiệu đọc được

} else { printf("Loi xau vao \n"); break; }
}
if(i==L) //Nếu đọchếttoànbộ xâu vào
if (q == D) printf("\n Xau %s duoc doan nhan !\n\n",str);
else printf("\n Xau %s khong duoc doan nhan !\n\n",str);
}
3. Ô tô mát hữuhạn
489/18/2012
Phương pháp diễngiải
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void main(){
char c, str[100];
int i, L;
printf("Nhap xau :"); fflush(stdin); gets(str);
i= 0; L = strlen(str);
3. Ô tô mát hữuhạn
q
1
q
2
Chữ số
q
0
Chữ số
Chữ số
499/18/2012
Phương pháp phân tích bảng
if(isdigit(str[i])){ //Nếukýhiệu đọc đượclàmộtchữ số

i=i+1; //Đọckýhiệutiếptrênxâuvào
while(isdigit(str[i])) i = i + 1; //Vẫnlàchữ số, đọctiếp
if(i==L) printf("%s la so nguyen \n",str); //Đọchếtxâuvào
else if(str[i]!='.') printf("%s khong duoc doan nhan (%d)\n",str,i+1);
else { //Đã đọc được dãy số và dấu‘.’
i = i + 1;
while(isdigit(str[i])) i = i + 1;
if(i==L) printf("%s la so thuc dau phay tinh \n",str);
else printf("%s khong duoc doan nhan(%d)\n",str,i+1);
}
} else printf("%s khong duoc doan nhan (%d)\n",str,i+1);
}//main
3. Ô tô mát hữuhạn
509/18/2012
Chương 2: Phân tích từ vựng
1. Nhiệmvụ củabộ phân tích từ vựng
2. Biểuthức chính quy
3. Ô tô mát hữuhạn
4. Phân tích từ vựng của ngôn ngữ PL/0
519/18/2012
Các từ vựng của PL/0 mở rộng
•Số nguyên
• Định danh
•Từ khóa:
begin, end, if, then, while, do, call, odd, to
const, var, procedure, program, else, for
•Dấu phép toán:
–Số học:
+ - * /
– So sánh: = <> < > <= >=

•Dấu phân cách:
( ) . , ; [ ]
•Dấu phép gán: :=
3. Phân tích từ vựng của ngôn ngữ PL/0 mở rộng
529/18/2012
Ô-tô-mát hữuhạncủabộ phân tích từ vựng
Sau mỗitừ tốđượcnhậnbiết, bộ từ vựng lại quay lạitrạng thái 0
3. Phân tích từ vựng của ngôn ngữ PL/0 mở rộng
539/18/2012
Các từ tố của PL/0 mở rộng
•Mỗitừ tố là tên mộttrạng thái
–Từ tố là ident, cầnkiểmtraxemtừ vựng tương
ứng có phảilàtừ khóa không
•Cáctừ tố
–Số nguyên: NUMBER
– Định danh: IDENT
•Nếutừ vựng trùng từ khóa, từ vựng sẽ mang ý nghĩa
từ tố trùng vớitêntừ khóa
•Vídụ: Từ vựng Begin có từ tố BEGIN
Từ vựng Procedure có từ tố PROCEDURE
3. Phân tích từ vựng của ngôn ngữ PL/0 mở rộng
549/18/2012
Các từ tố của PL/0 mở rộng
• Toán tử
+ (PLUS) - (MINUS)
* (TIMES) / (SLASH)
= (EQU) <> (NEQ)
< (LSS)<= (LEQ)
> (GRT) >= (GEQ)
( (LPARENT) ) (RPARENT)

[ (LBRACK) ] (RBRACK)
. (PERIOD) , (COMMA)
; (SEMICOLON) := (ASSIGN)
•Cáctrường hợp khác: từ tố NONE
3. Phân tích từ vựng của ngôn ngữ PL/0 mở rộng
559/18/2012
Các khai báo
typedef enum {//Các loại Token đượcsử dụng trong PL/0
NONE=0, IDENT, NUMBER,
BEGIN, CALL, CONST, DO, ELSE, END, FOR, IF, ODD,
PROCEDURE, PROGRAM, THEN, TO, VAR, WHILE,
PLUS, MINUS, TIMES, SLASH, EQU, NEQ, LSS, LEQ,
GTR, GEQ, LPARENT, RPARENT, LBRACK, RBRACK,
PERIOD, COMMA, SEMICOLON, ASSIGN
} TokenType;
TokenType Token; //Token nhậndạng được
int Num; //Từ vựng khi Token là NUMBER
char Id[MAX_IDENT_LEN + 1]; //Từ vựng khi Token là IDENT
3. Phân tích từ vựng của ngôn ngữ PL/0 mở rộng
569/18/2012
Xây dựng từ vựng
• Khi bộ pttv - thủ tục getToken() bắt đầuhoạt động,
ô-tô-mát ở trạng thái khởitạo(Trạng thái 0)
•Bộ pttv gọi liên tiếp getCh() để đọc các ký hiệutrên
vănbản nguồnchotớikhigặpmộtkýtự không
thuộcluậtmôtả hiệntại →Ô-to-mát không chuyển
trạng thái được
–Xâuđọc đượclàtừ vựng mang ý nghĩacủatừ tốđang
phân tích và là trạng thái hiệntạicủaÔ-tô-mát
– Đọcthừaramộtkýtự

•Làkýtự trắng hoặckýtựđầucủatừ tố tiếp → Khi getToken()
đượcgọi, sẽ làm việc ngay vớimộtkýtự có sẵn.
•Tạilầngọi getToken() đầutiênđể xác định từ tố thứ nhất, bộ
ptcp phảicũng cấpsẵnmộtkýtự → là ký tự trắng
3. Phân tích từ vựng của ngôn ngữ PL/0 mở rộng
579/18/2012
Xây dựng từ vựng
//ch chứakýtựđọc đượctừ vănbản nguồnbởi hàm getCh()
switch(Ch) {
case SPACE : while (Ch==SPACE) gettCh();
case LETTER: getCh();
while (Ch==LETTER || Ch==DIGIT) getCh();
return Ident; //Cũng có thể là từ khóa →Phảikiểmtra
case DIGIT: while (Ch==DIGIT) getCh(); return NUMBER;
case ‘+’: getCh(); return plus;
case ‘>‘ : getCh();
if(Ch == ‘=‘) { getCh(); return GEQ;}
else return GTR;

}
3. Phân tích từ vựng của ngôn ngữ PL/0 mở rộng
589/18/2012
Nhậndạng từ tố
Xây dựng xong từ vựng, cầnnhậndạng từ tố
–Làtêntrạng thái cuối cùng của Ô-tô-mát
–Nếu Ô-tô-mát kếtthúcở trạng thái IDENT, cần
kiểmtrađây có phảilàtừ khóa
•Dùngkỹ thuậtbảng chuyển đổi
3. Phân tích từ vựng của ngôn ngữ PL/0 mở rộng
WHILE

VAR
CALL
BEGIN

WHILE

VAR


CALL

BEGIN
Chú ý: Vớitừ tố
ident và number,
cầnphảighi
nhậngiátrị từ
vựng tương ứng
599/18/2012
Bài tập
1. Xây dựng bộ phân tích cho PL/0
2. Tìm hiểuvề Lex/JLex
3. Phân tích từ vựng của ngôn ngữ PL/0 mở rộng

×