Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 15 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
15
Dung lượng
378,16 KB
Nội dung
IT4073:NGÔN NGỮ và
PHƯƠNG PHÁP DỊCH
Phạm Đăng Hải
haipd@soict.hut.edu.vn
29/18/2012
Chương 2:Phântíchtừ vựng
1. Nhiệmvụ củabộ phântíchtừ vựng
2. Biểuthức chính quy
3. Ô tô mát hữuhạn
4. Phântíchtừ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ựngtừ 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ântíchtừ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ântí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ântíchtừ vựng
1. Nhiệmvụ củabộ phântíchtừ vựng
2. Biểuthức chính quy
3. Ô tô mát hữuhạn
4. Phântíchtừ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ântíchtừ vựng
1. Nhiệmvụ củabộ phântíchtừ vựng
2. Biểuthức chính quy
3. Ô tô mát hữuhạn
4. Phântíchtừ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
[...]... nhan (%d)\n",str,i+1); }//main 9/18/2012 49 3 Phântíchtừvựng của ngôn ngữ PL/0 mở rộng 1 Nhiệm vụ của bộ phântíchtừvựng 2 Biểu thức chính quy 3 Ô tô mát hữu hạn 4 Phân tíchtừvựng của ngôn ngữ PL/0 9/18/2012 50 3 Phân tíchtừvựng của ngôn ngữ PL/0 mở rộng Các từvựng của PL/0 mở rộng Ô-tô-mát hữu hạn của bộ phân tíchtừvựng • Số nguyên • Định danh • Từ khóa: begin, end, if, then, while, do, call,... phải là từ khóa không + (PLUS) - (MINUS) * (TIMES) / (SLASH) = (EQU) (NEQ) < (LSS) (GRT) >= (GEQ) ( (LPARENT) [ (LBRACK) (PERIOD) ; (SEMICOLON) • Các từ tố – Số nguyên: NUMBER – Định danh: IDENT • Nếu từvựng trùng từ khóa, từvựng sẽ mang ý nghĩa từ tố trùng với tên từ khóa • Ví dụ: Từvựng Begin có từ tố BEGIN Từvựng Procedure có từ tố PROCEDURE 9/18/2012 53 3 Phân tíchtừvựng của... +-*/ = • Dấu phân cách: • Dấu phép gán: < ( ) ,; > = [ ] := Sau mỗi từ tố được nhận biết, bộ từvựng lại quay lại trạng thái 0 9/18/2012 51 9/18/2012 52 3 Phân tíchtừvựng của ngôn ngữ PL/0 mở rộng 3 Phântíchtừvựng của ngôn ngữ PL/0 mở rộng Các từ tố của PL/0 mở rộng Các từ tố của PL/0 mở rộng • Mỗi từ tố là tên một trạng thái • Toán tử – Từ tố là ident, cần kiểm tra xem từvựng tương ứng... từ tố NONE 3 Phântíchtừvựng của ngôn ngữ PL/0 mở rộng Các khai báo int ) (RPARENT) ] (RBRACK) , (COMMA) := (ASSIGN) 55 9/18/2012 • Tại lần gọi getToken() đầu tiên để xác định từ tố thứ nhất, bộ ptcp phải cũng cấp sẵn một ký tự → là ký tự trắng 56 3 Phântíchtừvựng của ngôn ngữ PL/0 mở rộng 3 Phântíchtừvựng của ngôn ngữ PL/0 mở rộng Xây dựng từvựng Nhận dạng từ tố //ch chứa ký tự đọc được từ. .. được là từvựng mang ý nghĩa của từ tố đang phântích và là trạng thái hiện tại của Ô-tô-mát } TokenType; TokenType Token; //Token nhận dạng được – Đọc thừa ra một ký tự / /Từ vựng khi Token là NUMBER • Là ký tự trắng hoặc ký tự đầu của từ tố tiếp → Khi getToken() được gọi, sẽ làm việc ngay với một ký tự có sẵn char Id[MAX_IDENT_LEN + 1]; / /Từ vựng khi Token là IDENT 9/18/2012 54 Xây dựng từvựng typedef... pháp phântích bảng • Phương pháp phântích bảng 1 0 – Dựa trên giải thuật tổng quát để đoán nhận DFA – Ưu điểm: A 1 • Chương trình độc lập với DFA • Dễ biến đổi, không cần sửa lại chương trình C • Khó khăn trong lập bảng • Kích thước bảng lớn • Phương pháp diễn giải – Thực hiện như diễn giải sơ đồ – Dễ viết, nhưng c\trình gắn với đồ thị dich chuyển – Được sử dụng để xây dựng bộ phântíchtừvựng 9/18/2012... Ô-tô-mát – Nếu Ô-tô-mát kết thúc ở trạng thái IDENT, cần kiểm tra đây có phải là từ khóa • Dùng kỹ thuật bảng chuyển đổi Chú ý: Với từ tố ident và number, cần phải ghi nhận giá trị từvựng tương ứng 57 3 Phântíchtừvựng của ngôn ngữ PL/0 mở rộng Bài tập 1 Xây dựng bộ phântích cho PL/0 2 Tìm hiểu về Lex/JLex 9/18/2012 59 9/18/2012 BEGIN CALL → → … BEGIN CALL VAR → VAR WHILE → WHILE 58 ... #include #include void main(){ char c, str[100]; int i, L; printf("Nhap xau :"); fflush(stdin); gets(str); i= 0; L = strlen(str); 47 9/18/2012 48 3 Ô tô mát hữu hạn Chương2:Phântíchtừvựng Phương pháp phântích bảng if(isdigit(str[i])){ //Nếu ký hiệu đọc được là một chữ số i=i+1; //Đọc ký hiệu tiếp trên xâu vào while(isdigit(str[i])) i = i + 1; //Vẫn là chữ số, đọc tiếp if(i==L) printf("%s... Ident; //Cũng có thể là từ khóa →Phải kiểm tra case DIGIT: while (Ch==DIGIT) getCh(); return NUMBER; case ‘+’: getCh(); return plus; case ‘>‘ : getCh(); if(Ch == ‘=‘) { getCh(); return GEQ;} else return GTR; … } 9/18/2012 Xây dựng xong từ vựng, cần nhận dạng từ tố – Là tên trạng thái cuối cùng của Ô-tô-mát – Nếu Ô-tô-mát kết thúc ở trạng thái IDENT, cần kiểm tra đây có phải là từ khóa • Dùng kỹ thuật... enum state {A,B,C,D}; int Delta[4][2]={A,B,C,B,A,D,C,B}; //Hàm dịch chuyển dạng bảng char c, str[100]; int i, L; enum state q = A; //Automat ở trạng thái đầu 9/18/2012 46 3 Ô tô mát hữu hạn Phương pháp phântí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ệu 0,1 q = Delta[q][c]; . 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ở. 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. 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