Leksiline nluus
Leksiline nluus Leksiline nluus kontrolli progrmmi s~onde (literlsumolite) vstvust leksilistele reeglitele ning teisend progrmmi sumolite (tokens) jdks: { eemld tuhisumolid j kommentrid; { identitseeri v~otmes~ond, identiktorid j konstndid; { konstrueeri sumolite teli; { lei sumolite re- j veerunumrid; { tevit vjdusel leksilistest vigdest. Leksilist nluusi kutsutkse skneerimiseks (scnning) ning vstvt nlustorit nimettkse sknneriks (scnner). nlüüs süntees lähtetekst leksiline nlüüs lekseemide jd süntksnlüüs süntksipuu semntiline nlüüs tri. süntksipuu vhekoodi gen. vhekood optimeerimine vhekood koodi genereerimine lõppkood 2 / 26
Ksitsi kodeeritud sknner Nide: v~otmes~on if rtundmine: c = redchr(); if (c!= i ) error(); else { c = redchr(); if (c!= f ) error(); else return IF_TOKEN; } 3 / 26
Ksitsi kodeeritud sknner Nide: if on v~otmes~on, kuid if0 identiktor: c = redchr(); if (c!= i ) { /* teised lekseemid : : : */ } else { c = redchr(); if (c!= f ) { /* teised lekseemid : : : */ } else { c = redchr(); if (c not lph-numeric) { putck(c); return IF_TOKEN; } while (c lph-numeric) { /* ehitd identifiktor */ } } } 4 / 26
Proleemid: Ksitsi kodeeritud sknner Vj komineerid erinvt liiki lekseemide sknnereid { Fikseeritud s~ond j mrgijdd (v~otmes~ond, opertorid) { Reeglite il deneeritud lekseemid (identiktorid, rvud) Lekseemid v~oivd kttud { if vs. if0 { = vs. == 5 / 26
Leksiline nluus lhtetekst Sknner lekseemide jd telid v~oi kood spetsiktsioon Sknnerite genertor Kun ksitsi kodeerimine on tuliks j vigde ldis, siis tvliselt genereeritkse utomtselt sknnerite genertori il. Progrmmi s~onde leksilised reeglid esittkse tvliselt regulrvldiste il. 6 / 26
Regulrvldised Regulrvldised ule (l~opliku) thestiku E ::= j j (E E) j (E j E) j E? kus 2. Regulrvldis E deneeri keele L(E)? L() = fg L() = fg L(E 1 E 2 ) = fvw j v 2 L(E 1 ); w 2 L(E 2 )g L(E 1 j E 2 ) = L(E 1 ) [ L(E 2 ) L(E? ) = fg [ fvw j v 2 L(E); w 2 L(E? )g 7 / 26
Regulrvldised Niteid: Regulrvldis Deneeritv keel j f; g fg? f; ; ; ; : : :g ()? f; ; ; ; : : :g ( j )? f; ; ; ; ; ; : : :g 8 / 26
Regulrvldised Regulrvldistes esinevte sulgude vhendmiseks on opertoritele mrtud prioriteedid: { sulundiopertor ( )? seo k~oige tugevmlt; { vlikuopertor ( j ) seo k~oige n~orgemlt. Luhendvid thistusi regulrvldiste esitmiseks: { mittetuhi sulund: E + = EE? ; { optsioon: E? = j E; { mrgihulgd: [c] = j j c; { mrgivhemikud: [ z] = j : : : j z. 9 / 26
Regulrvldised Regulrne kirjeldus thestikus on reeglite hulk d 1! E 1 d 2! E 2 : : : d n! E n kus d i on (uniklne) nimi j E i on regulrvldis thestikus [ fd 1 ; : : : ; d i 1 g. 10 / 26
Regulrvldised Niteid regulrsetest kirjeldustest: Identiktorid: Arvkonstndid: Letter! [ z A Z] Digit! [0 9] Identier! Letter (Letter j Digit)? Sign! (+ j -)? Integer! 0 j Sign [1 9] Digit? Deciml! Integer. Digit + Rel! (Integer j Deciml) E Integer 11 / 26
L~oplikud utomdid L~oplik utomt on viisik A = hq; ; ; q 0 ; F i, kus { Q on l~oplik olekute hulk; { on l~oplik thestik; { Q ( [ ) Q on uleminekureltsioon; { q 0 2 Q on lgolek; { F Q on l~oppolekute hulk. L~oplik utomt on determineeritud (DFA), kui uleminekureltsioon on funktsioon : Q! Q. Vstsel korrl on l~oplik utomt mittedetermineeritud (NFA). 12 / 26
L~oplikud utomdid L~oplike utomte esittkse tihti uleminekudigrmmiden: q0 q1 q2 L~oplik utomt A = hq; ; ; q 0 ; F i ktsepteeri keele L(A) = fw 2? j (q 0 ; w; q f ) 2? ; q f 2 F g kus? Q? Q on uleminekureltsiooni reeksiivne trnsitiivne sulund. Teoreem: L~oplike utomtide poolt ktsepteeritvte keelte klss lnge kokku regulrsete keelteg. 13 / 26
L~oplikud utomdid Determineeritud l~opliku utomdi simuleerimine: Chr := next chrcter ; Stte := q 0 ; while Chr 6= EOF do Stte := (Stte; Chr); Chr := next chrcter ; end if (Stte 2 F ) then return(success); else return(filure); 14 / 26
L~oplikud utomdid Determineeritud l~opliku utomdi simuleerimine: Chr := next chrcter ; Stte := q 0 ; while Chr 6= EOF do Stte := (Stte; Chr); Chr := next chrcter ; end if (Stte 2 F ) then return(success); else return(filure); q0 q1 q2 x q 0 q 1 Error Error q 1 q 2 q 1 Error q 2 Error Error Error 14 / 26
Regulrvldise teisendmine utomdiks Thompsoni konstruktsioon regulrvldise teisendmiseks (mittedetermineeritud) l~oplikuks utomdiks: regulrvldisele E seme vstvusse utomdi: q0 teisendme utomti jrgmiste reeglite il, kuni k~oik uleminekud on ks v~oi uksikud thed: E q f q E1 E2 p E1 E2 q q1 p E1 q E1 j E2 p q p E2 E q E? p q q1 q2 p 15 / 26
Regulrvldise teisendmine utomdiks Nide: ( j )? q0 q ( j )? f q0 q1 q f j q0 q1 q2 q3 q f q0 q1 q2 q3 q f 16 / 26
Regulrvldise teisendmine utomdiks Nide: ( j )? q0 q ( j )? f q0 q1 q f j q0 q1 q2 q3 q f q0 q1 q2 q3 q f 16 / 26
Regulrvldise teisendmine utomdiks Nide: ( j )? q0 q ( j )? f q0 q1 q f j q0 q1 q2 q3 q f q0 q1 q2 q3 q f 16 / 26
Regulrvldise teisendmine utomdiks Nide: ( j )? q0 q ( j )? f q0 q1 q f j q0 q1 q2 q3 q f q0 q1 q2 q3 q f 16 / 26
Determineeritud l~opliku utomdi koostmine Mittedetermineeritud l~opliku utomdig A = hq; ; ; q 0 ; F i ekvivlentse determineeritud l~opliku utomdi A 0 = hq 0 ; ; 0 ; q 0 0 ; F 0 i konstrueerimine oshulkde moodustmise il. Aifuntsioonid: { tuhikigusulundi funktsioon -closure : 2 Q! 2 Q -closure(s) = fp j q 2 S; (q; ; p) 2? g { uhe smmu funktsioon move : 2 Q! 2 Q move(s; ) = fp j q 2 S; (q; ; p) 2 g 17 / 26
Determineeritud l~opliku utomdi koostmine Algoritm: Q 0 := ;; F 0 := ;; 0 := ;; q 0 0 := -closure(fq 0g); U := fq 0 0 g; while 9S 2 U do U := U n S; Q 0 := Q 0 [ fsg; forech 2 do T := -closure(move(s; )); if T 62 U [ Q 0 then U := U [ ft g; 0 := 0 [ f(s; ) 7! T g; end end F 0 := fs 2 Q 0 j S \ F 6= ;g; 18 / 26
Determineeritud l~opliku utomdi koostmine Nide: q0 q1 q2 q3 q f 19 / 26
Determineeritud l~opliku utomdi koostmine Nide: q0 q1 q2 q3 q f q 0 0 19 / 26
Determineeritud l~opliku utomdi koostmine Nide: q0 q1 q2 q3 q f q0 0 q1 0 19 / 26
Determineeritud l~opliku utomdi koostmine Nide: q0 q1 q2 q3 q f q0 0 q1 0 q2 0 19 / 26
Determineeritud l~opliku utomdi koostmine Nide: q0 q1 q2 q3 q f q0 0 q1 0 q2 0 19 / 26
Determineeritud l~opliku utomdi koostmine Nide: q0 q1 q2 q3 q f q0 0 q1 0 q2 0 19 / 26
Determineeritud l~opliku utomdi minimiseerimine Regulrvldisest ( j )? konstrueeritud determineeritud l~oplik utomt: q0 q1 q2 Temg ekvivlentne, vhem olekute rvug, utomt: q0 q1 20 / 26
Determineeritud l~opliku utomdi minimiseerimine Determineeritud l~oplik utomt on minimlne, kui ei leidu temg ekvivlentset, vhemte olekute rvug, determineeritud l~oplikku utomti. Ig determineeritud l~opliku utomdi A = hq; ; ; q 0 ; F i korrl leidu (uniklne) temg ekvivlentne minimlne determineeritud l~oplik utomt A 0 = hq 0 ; ; 0 ; q 0 0 ; F 0 i. Idee: tukeldme olekute hulg ekvivlentsiklssideks. { Olekud p; q 2 Q on ekvivlentsed ehk eristmtud, kui ig s~on w 2? korrl utomt, lustdes neist olekutest, m~oleml juhul ks ~onnestu v~oi e~onnestu. { Ig theg uleminek vii ekvivlentsed olekud ekvivlentseteks olekuteks. 21 / 26
Determineeritud l~opliku utomdi minimiseerimine Minimiseerimise lgoritm: Eemdme k~oik lgolekust q 0 kttesmtud olekud. Jrelejnud olekute hulgl leime suurim tukelduse ekvivlentsiklssideks. Konstrueerime uue utomdi A 0 = hq 0 ; ; 0 ; q 0 0 ; F 0 i, kus { olekutehulk Q 0 = ; { lgolek q 0 0 = P 0, kus P 0 2 j q 0 2 P 0 ; { l~oppolekute hulk F 0 = fp 2 j P \ F 6= ;g; { uleminekufunktsioon 0 = f(p i ; ) 7! P j j P j 2 move(p i ; )g. 22 / 26
Determineeritud l~opliku utomdi minimiseerimine Niivne lgoritm tukelduse leidmiseks: P := ff; Q n F g; do := P ; P := ;; forech S 2 do forech 2 do U := ft 2 j T \ move(s; ) 6= ;g; V := fs \ move 1 (T ) j T 2 Ug; P := P [ V ; end end until = P ; 23 / 26
Determineeritud l~opliku utomdi minimiseerimine Toodud lgoritm proovi igs itertsioonis peenendd k~oiki tukke. { Hlviml juhul ruutkeerukuseg. { Piis, kui vdeld inult neid tukke, millest on v~oimlik liikud m~ond l~ohenenud tukki. Hopcroft'i lgoritm tukelduse leidmiseks: { ksut toolisti veel li vtmt peenenenud tukkide hoidmiseks; { kui m~oni vljspool toolisti olev tukk l~ohene, siis piguttkse inult uks (viksem) lmtukk toolisti. 24 / 26
Determineeritud l~opliku utomdi minimiseerimine Hopcroft'i lgoritm: := ff; Q n F g; W := ; while 9S 2 W do W := W n S; forech 2 do P := move 1 (S); forech R 2 ft 2 j T \ P 6= ;; T 6 P g do R 1 := R \ P ; R 2 := R n R 1 ; := ( n R) [ fr 1 ; R 2 g; if R 2 W then W := (W n R) [ fr 1 ; R 2 g; else if jr 1 j jr 2 j then W := W [ fr 1 g; else W := W [ fr 2 g; end end end 25 / 26
Determineeritud l~opliku utomdi minimiseerimine Nide { regulrvldisele ( j )? vstv DFA minimiseerimine: q0 q1 q3 q4 q2 26 / 26
Determineeritud l~opliku utomdi minimiseerimine Nide { regulrvldisele ( j )? vstv DFA minimiseerimine: q0 q1 q3 q4 q2 26 / 26
Determineeritud l~opliku utomdi minimiseerimine Nide { regulrvldisele ( j )? vstv DFA minimiseerimine: q0 q1 q3 q4 q2 26 / 26
Determineeritud l~opliku utomdi minimiseerimine Nide { regulrvldisele ( j )? vstv DFA minimiseerimine: q0 q1 q3 q4 q2 26 / 26
Determineeritud l~opliku utomdi minimiseerimine Nide { regulrvldisele ( j )? vstv DFA minimiseerimine: q0 q1 q3 q4 q2 26 / 26
Determineeritud l~opliku utomdi minimiseerimine Nide { regulrvldisele ( j )? vstv DFA minimiseerimine: q0 q1 q3 q4 26 / 26