1. Trang chủ
  2. » Giáo Dục - Đào Tạo

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

15 563 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

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â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ựngTừ 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 [...]... nhan (%d)\n",str,i+1); }//main 9/18/2012 49 3 Phân tích từ vựng của ngôn ngữ PL/0 mở rộng 1 Nhiệm vụ của bộ phân tích từ vựng 2 Biểu thức chính quy 3 Ô tô mát hữu hạn 4 Phân tích từ vựng của ngôn ngữ PL/0 9/18/2012 50 3 Phân tích từ 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ích từ 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ích từ 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ích từ vựng của ngôn ngữ PL/0 mở rộng 3 Phân tích từ 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ân tích từ 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ân tích từ vựng của ngôn ngữ PL/0 mở rộng 3 Phân tích từ 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ân tí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ân tích bảng • Phương pháp phân tí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ân tích từ 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ân tích từ vựng của ngôn ngữ PL/0 mở rộng Bài tập 1 Xây dựng bộ phân tí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ương 2: Phân tích từ vựng Phương pháp phân tí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â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ệ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

Ngày đăng: 01/04/2014, 23:20

TỪ KHÓA LIÊN QUAN

w