Syntaktick anal za roz i iteln ch jazyk
Transkript
Syntaktick analza roziitelnch jazyk P edbn zprva Michal emlika Katedra softwarovho inenrstv Karlova Univerzita, Praha [email protected] Abstract Dob e iteln (srozumiteln) jazyky a souvislosti s analzou shora. P m analza shora jednoduch lev rekurze. Syntaktick analyztor rozi iteln v dob analzy. Analza LL(k) jazyk v linernm ase. 1 Motivace Po cel m svt existuje obrovsk spousta programovacch jazyk. Nkter jsou specializovan , jin jsou povaovan za 'univerzln' nebo sp e obecn pouiteln . Programtoi jsou tak nuceni bu zapomenout na vymoenosti jednch nebo druhch jazyk. as od asu je vhodn pout jin prostedky, ne se ktermi nejastji pracujeme - vt inou proto, e pomoc tchto prostedk je mon zvldnout dan (pod)probl m vrazn snze. Potkme se pak nejen s jinm paradigmatem (vt inou toto bv dvod ke zmn vvojovch prostedk - jazyka i vvojov ho prosted), nebo s jinou knihovnou (nkter knihovny pracuj jen s nktermi dialekty pouit ho jazyka), ale i s dal mi pekkami - nov knihovny pouvaj jin nzvy, vvojov prosted se ovld jinak. S rostoucm potem zmn v prci vvoje roste i pravdpodobnost vzniku chyb. Mnohdy se tomu el pouitm njak ho "velk ho" jazyka (dve PL/1, Ada, nyn vt inou C++), kter zvld skoro v echno, ale skoro dn programtor jej neovldne dokonale. Vt ina programtor se tak nau jen uritou st, a pak doufaj, e nedojde ke kolizi s jim m n znmmi rysy jazyka1. Je-li k dispozici roz iiteln jazyk, pouv programtor stle stejn zklad i jdro jazyka a k nmu si podle poteb dan ho projektu me dodenovvat nov prvky. Jdro jazyka tak me bt relativn mal , stejn jako mnostv identiktor a jazykovch prvk nutnch k zapamatovn. V kad aplikaci je navc mon pouvat takovou notaci, kter odpovd prv e en mu probl mu. Tm se kd stv itelnj m a snze udrovatelnm a laditelnm. Tato pr ce byla sten podporov na grantem GA R slo 201/96/0195 Obdobn situace je i u objektovch knihoven - mnoho lid pe v C++, mnoho lid pe pro njak operan systm. Pesto, chtj-li dva program toi vyuvajc rzn objektov knihovny (nkdy sta i rzn verze) zapsat tut akci, mus to naprogramovat kad jinak. Je to podobn, jako by kad z nich pracoval v jinm jazyce. Tento problm vak bude vhodnj rozpracovat samostatn. 1 1 Jak se pozdji uke, je v t to prci pedstavena tda gramatik a jim odpovdajcch analyztor umoujc zapisovat (a bez prav gramatiky i pmo pouvat) i takov konstrukce, kter se v LL(k) gramatikch formuluj m n srozumiteln (napklad aritmetick vraz). Nyn je tedy mon pst gramatiky i pro analzu shora pjemnji - tedy i s vyuitm jednoduch lev rekurze. P klad 1 Jedna z monost, jak by mohl vypadat roz iiteln jazyk je napklad tato: program powering function power(base,exponent) var result begin result:=1 while base>0 do result:=result*base exponent:=exponent-1 end power:=result end terminal 'doublestar','**' rule 'power:<F>::=<f>(doublestar)<F>' instance of 'power' is power var base, exponent begin write 'Enter base and exponent: ' read base read exponent write 'Power is ' write base**exponent end. Podobn pklad je peloiteln nap. pomoc Zem94] Pro toho, kdo chce popsat njak programovac jazyk gramatikou, je daleko pjemnj , me-li napsat gramatiku LL(k) nebo LR(k) s k>1. K tomuto poznn se asi dostane kad, kdo se pokou pracovat s nv tmi obvyklm zpsobem. 2 Snadno iteln jazyky V programtorsk i v lingvistick praxi se meme setkat s mnoha jazyky a mnoha texty v nich napsanmi. Nkter (texty) se snadno tou: ji pi prvnm ten je hned jasn , co chtl autor vyjdit. Jin texty musme st vcekrt a pomalu, abychom alespo po mluvnick strnce pochopili, jak e byl text sestaven, a o tom, co chtl autor ci, se budeme moci dohadovat a po nkolika dal ch pokusech. Nen-li vta srozumiteln nebo jednoznan v pirozen m jazyce pi prvnm ten, nen to nic neobvykl ho a nee iteln ho: zkusme se nad n zamyslet v kontextu dal ch vt dan ho textu, nebo si vydme upesnn (je-li nepesnost nebo nejasnost i s mantick), nebo si meme pomoci kontextem situanm i jinm. Podobn situace me nastat i u jazyk relativn velmi jednoduchch - u programovacch jazyk. Zde by mlo bt na zklad ji zpracovan ho textu jasn , jak vznam m ten sek, kterm se prv prokousvme. Nkter jazyky pipou tj i situaci, kdy nen 2 zcela jasn (dokonce ani pi prohlen nkolika dek dopedu a dozadu), zda se jedn o denici i vkonnou st. Takovto text vyaduje velk sil, aby se jej podailo sprvn pochopit. Co se patn te a chpe, to se obvykle dlouho a pracn lad. Pokusme se tedy naznait, jak jazyk je (snad) dobe iteln, resp. srozumiteln. Ml by mt relativn jednoduchou strukturu i s mantiku: Na zklad ji zanalyzovan sti textu by mlo bt mon generovat (provdt) pslu n s mantick akce. Tedy petu-li si symbol vstupn abecedy, ml bych bt schopen generovat akci s tmto symbolem spojenou - nanejv tuto akci mohu o nkolik mlo symbol (vhled omezen d lky) opozdit. Jinak eeno: i kdy je gramatika relativn sloit (nap. LR(k)), s mantika jazyka by mla bt deterministicky analyzovateln zleva a nejl pe shora. Ukazuje se, e pak je mon i cel analyztor koncipovat jinak. Spokojme-li se s vhledem d lky 1, meme pout bu analzu t m shora dol (Kra82], Dro85], Dro90]) nebo pvtiv automaty (Zem95]). Denice 1 Zleva srozumitelnm jazykem s vhledem k nazvu jazyk, jeho libovoln prex dlky n uruje prvnch n ; k smantickch akc (piem po peten kadho vstupnho symbolu vykonm odpovdajc smantickou akci). 3 Automaty s vhledem 3.1 Motivace V teorii jazyk se meme setkat s gramatikami, jako jsou LL(k), LR(k) apod. Parametr k udv d lku vhledu2. Tedy znak, zpracovvan danm automatem (LL(k), LR(k), : : : ) se me, pro dostaten velk k, li it od toho, kter se te. A sem je v e v podku. Pesto se me zdt trochu luxus zpracovvat vhled d lky k i v situacch, kdy posta vhled krat . Pokud navrhujeme takovto automat, musme pracovat mnohdy s velkm mnostvm stav. Vyuijeme-li toho, e vhled je vt inou krtk, automat se podstatn zjednodu . Jedno esk pslov tvrd, e co je mal , to je hezk . Nkdy se je t dopluje, e nen-li to hezk , je toho alespo mlo. Zaveme tedy takov model, kter bude co nejpehlednj a pitom zstane stejn siln, jako stvajc model. Zaveme tedy automaty s vhledem. 3.2 Zkladn pedstava Bude se tedy pracovat s takovm modelem, kdy bude automat mt monost jakoby "vidt" je t nkolik znak vstupn abecedy ped tec hlavou. 3.2.1 Idea Pedstavme si, e mme konen/zsobnkov automat, kter se me podvat nejv e k znak ped hlavu. Tento vhled me bt jednm z parametr pechodov funkce. Vhled me bt vyuit jak cel, tak i jenom st. Bude-li se nkde uvdt vhled krat , rozum se v echny vhledy, kter maj stejn prex. 2 Zaveden pojm v hled, LR(k), LL(k) F irst a F ollow je napklad v Aho86]. 3 3.2.2 Nvrh Jak zakdovat vhled do stav automatu? Stavy automatu s vhledem mohou bt reprezentovny jako dvojice (stav, vhled). 3.3 Zsobnkov automat s vhledem P edstava: Dovolme zsobnkov mu automatu, aby se dval nejen na prv ten symbol vstupn abecedy, ale na (nejv e) k dosud nepetench symbol vstupn abecedy. Denice 2 (Zsobnkov automat s v hledem k) Zsobnkovm automatem s vhledem k nazvu osmici M = (k Q & ; q0 Z0 F ) kde pirozen slo k 1 udv dlku vhledu, Q je neprzdn konen mnoina stav, & je neprzdn konen vstupn abeceda, ; je neprzdn konen zsobnkov abeceda, q0 2 Q je poten stav, Z0 2 ; je poten zsobnkov symbol (na zatku vpotu bude zsobnk obsahovat pouze symbol Z0 ), F Q je mnoina koncovch stav, je zobrazen Q (& f"g)k ; do Q (& f"g)k ; . Ji od pohledu je tato denice velmi blzk denici bn ho zsobnkov ho automatu (viz nap. Chy84]). Podvejme se tedy na to, m se tyto dva typy automat li a co maj spolen . Pro k = 1 se zsobnkov automat s vhledem kryje se zsobnkovm automatem, jak jej znme (nap. z Chy84]). D se ukzat, e pro k > 1 je k dispozici vce informac pro rozhodovn, jak postupovat dl. Tmto zpsobem je mon pesnji urit, jak m vpoet probhat3 . Vhled je mon simulovat vnitnmi stavy zsobnkov ho automatu. Zsobnkov automat s vhledem je tedy mon simulovat bnm zsobnkovm automatem. Pozorovn 1 Zsobnkov automat s vhledem rozpoznv prv bezkontextov jazyky. Poznmka 1 A zsobnkov automat s vhledem je obecn nedeterministick, pro poteby tto zprvy se omezme na deterministickou variantu - vechny pechodov funkce ne uveden budou deterministick. Poznmka 2 Tak je mon denovat zsobnkov automat s v hledem nejv e k. V tomto ppad se vyuv jen takovho vhledu, kter je nezbytn nutn pro uren dalho postupu vpotu. 4 Pvtiv gramatiky Vezmeme-li libovolnou bezkontextovou gramatiku, meme si pravidla t to gramatiky rozdlit do skupin podle toho, jak neterminl pepisuj. P klad 2 Pro jazyk pouit v prvnm pkladu me bt pkaz denovn napklad takto: 3 Podobn jako u LR gramatik, kde vhled nem vliv na rozpozn van jazyk, ale na itelnost gramatik a pehlednost denic automat, i zde zst v jazyk stejn, jen automat me bt trochu jin. 4 cmd ::= id cmd ::= id params cmd ::= id := expr cmd ::= write chr cmd ::= write str cmd ::= write expr cmd ::= read id cmd ::= while cond do cmds end Tot je v ak mon zaznamenat i jinak: id ; ; ; ; @ @ @ R @ params expr cond do while chr write str H A H j A HH A A A A A A := - - - ; ; ; ; @ @ @ R @ A AU - cmds - end expr id read - Obr. 1: Pkaz Poznmka 3 Pokud bychom se podobn pokusili zachytit LL(k) gramatiku, dostali by- chom strom, kter by se skldal z linernch seznam, jejich jedinm spolenm uzlem by byl koen. Pokud bychom z gramatiky z pedchozho pkladu chtli udlat LL(1) gramatiku, stailo by oddlit vechna nekoenov vtven, na jejich msta dosadit nov neterminly a tyto oddlen podstromy pout jako denice tchto novch neterminl. Pro nov neterminly by se pouila stejn technika pravy stromu do ve popsan podoby. Msto jednoho relativn pehlednho stromu bychom tak zskali nkolik mench a jednoduch strom. Nejprve denujme nkolik uitench pojm: Denice 3 (Prex symbolu dlky k) Nech G = (N, T, S, P) je libovoln bezkontextov gramatika. Pak pro kad symbol (neterminl nebo terminl) X meme denovat 5 prex dlky k Pref(k,X) tak, e to budou vechny etzce terminl dlky k, jimi zan alespo jeden etzec odvoditeln z X v G. PrefG (k X ) = fa1 : : : ak j X ) a1 : : : ak : : : an( a1 : : : an 2 TGg: Obdobn lze zav st i prex etzce symbol d lky k (Pref (k X1 : : :Xl ), na jejich zklad pak denujeme v hled dlenho pravidla: LookaheadkG (A ! : ) = PrefGk (:FollowGk (A)) Denice 4 (Pravidla bez lev rekurze) Pravidlo A ! X1: : : Xn bezkontextov gra- matiky G nazvme pravidlem bez lev rekurze, pokud z X1 : : : Xn nen mon odvodit etzec symbol zanajc neterminlem A. NLRPG (A) = fA ! j A ! 2 PG ^ :( ) A )g Denice 5 (Pravidla s jednoduchou levou rekurz) Pravidlo A ! A, 6= " nazvme pravidlem s jednoduchou levou rekurz. LRPG (A) = fA ! A j A ! A 2 PG g Denice 6 (Nslednci bez lev rekurze) Mnoinu etzc terminl dlky k, kter mohou nsledovat za danm neterminlem A mimo jeho levou rekurzi, nazvu nslednky A bez lev rekurze (NLRF (A)), pokud mohou bt odvozeny bezprostedn za danm neterminlem kdekoliv mimo levou rekurzi tohoto neterminlu. Formln: NLRFG (k A) = fa1 : : :ak 2 Pref (k Follow(B )) j B ! A 2 PG ^(( 6= ")_(B 6= A))g Denice 7 (Nslednci po lev rekurzi) Mnoinu etzc terminl dlky k, kter mohou nsledovat za danm neterminlem (A) bezprostedn po lev rekurzi tohoto neterminlu, nazvu nslednky A po lev rekurzi (LRF(A)). Denice 8 (k-p vtiv gramatika) Bezkontextovou gramatiku G obsahujc pouze pravidla bez lev rekurze a pravidla s jednoduchou levou rekurz nazvme k-pvtivou, pokud 1. pro kad dv pravidla A ! X a A ! Y gramatiky plat: X 6= Y ) Pref(k,X ) \ Pref(k,Y ) = a 2. pro kad neterminl A plat LRFGk (A) \ NLRFGk (A) = . Denice 9 (P vtiv gramatika) Bezkontextovou gramatiku G nazvu pvtivou, pokud je k-pvtiv pro njak k. Lemma 1 Libovoln LL(k) gramatika je k-pvtivou gramatikou. LL(k) gramatiky obsahuj pouze pravidla bez lev rekurze a kad A-pravidlo LL(k) gramatiky generuje etzce jejich prex d lky k je odli n od prex t e d lky generovatelnch pomoc jinch A-pravidel. Lemma 2 Ke kad k-pvtiv gramatice je mon vytvoit LL(k) gramatiku generujc stejn jazyk. 6 Nstin dkazu: Podrobme-li k-pvtivou gramatiku lev faktorizaci, zskme LL(k) gramatiku. Lemma 3 1. Existuje gramatika, kter je k-pvtiv a nen LL(k). 2. Existuje deterministick gramatika, kter nen pvtiv. Pkladem potvrzujc prvn vrok me bt napklad gramatika jednoduch ho aritmetick ho vrazu: P klad 3 E!E+T E!E;T E!T E!+T E!;T T!T*F T ! T div F T ! T mod F T!F F!(E) F ! id F ! num Jako pklad pro druhou st tvrzen meme pout LR(1) gramatiku z Dro90]: S ! Z$ Z ! aby Z ! aBAx B!b A ! Ca C ! Ac A!z C!z Tato gramatika denuje stejn jazyk jako regulrn vraz: a:b:(y + z:(a + "):(c:a) :x (Pouita notace z Chy84]). Tda pvtivch gramatik je tedy oste podtdou LR gramatik a zrove oste nadtdou LL gramatik. 5 Pvtiv automaty Pokusme se postavit automat pmo pracujc se strukturou odpovdajc stromov notaci pouit v pedchoz sti. Pracujeme s bezkontextovmi jazyky a gramatika m obecn vhled k. Bude tedy vhodn pout zsobnkov automat s vhledem k. 7 Budeme-li chtt etit mstem, pouijeme zsobnkov automat s vhledem nejv e k. Automat bude tvoen nkolika relativn oddlenmi stmi: kad mu neterminlu bude odpovdat jedna pro pravidla bez lev rekurze a jedna pro pravidla s jednoduchou levou rekurz (jsou-li vbec njak). P klad 4 Gramatiku z pkladu 3 meme vyjdit i gracky: pravidla bez lev rekurze jednoduch lev rekurze ; ; E: T: ; ; @ @ @ R @ - T + ; - - H H T - HH j - T ; ; @ @ F id num ( E ) + T ; T * F div F mod F * ; ; - - - @ R @ - ; ; F: ; ; @ @ @ R @ - - Obr. 2: Celoseln vraz 5.1 Pvtiv automat s pevnm vhledem Vezmeme-li E jako startovn symbol a ekneme-li, e po dokonen analzy prav strany libovoln ho pravidla se podle vhledu rozhodneme, zda budeme pokraovat njakm lev rekurzivnm pravidlem t ho neterminlu, nebo zda analzu dan ho neterminlu budeme povaovat za ukonenou4, mme vlastn automat hotov. Z pravidel dan gramatiky si meme vytvoit tzv. dlen pravidla - pravidla (viz Nau94]), v nich je tekou vyznaena aktuln pozice analzy (nap. A! : ). 4 Pokud nebudeme trvat na tom, e se vhledy odpovdajc tmto dvma variant m mus odliovat, ale spokojme se se strategi "bli koile ne kab t", tedy budeme upednostovat rozvoj pr v analyzovanho netermin lu, meme analyzovat i takov konstrukce, jako je pascalsk if-then a if-then-else. Struktura ani sestavov n automatu se tmto vrazn neovlivn. 8 Tak, jak jsme zapisovali pravidla do strom, meme denovat ekvivalenci na dlench pravidlech: A ! : =G B ! : ,df A = B ^ = Sestavme tedy analyztor, kter bude mt navrenou "stromekovou strukturu" a pitom bude odpovdat poadavkm kladenm na formln model: pvtiv automat. Pokud vynechme vstup (pro tuto chvli nepodstatn - nem vliv na strukturu ani na analzu i pijet), meme si v e ukzat na konstrukci akceptujcho zsobnkov ho automatu: Za mnoinu stav vezmme ekvivalenn tdy dlench pravidel podle ekvivalence =G , za zsobnkov symboly je mon vzt tut mnoinu, za vstupn abecedu terminly gramatiky. Potenm stavem budi S ! :]=G , kde S je startovn symbol gramatiky G, mnoinou koncovch stav budi fS ! :]=G j S ! 2 PG g. Pechodovou funkc stanovme sjednocen shift expand complete recursion , kde shift = f(A ! :a ]=G aa2 : : : ak X ) 7! (A ! a: ]=G a2 : : : ak X ) j A ! :a 2 PG ^ a2 : : :ak 2 Pref (k ; 1 :Followk;1(A))g, expand = f(A ! :B ]=G a1 : : :ak X ) 7! (B ! : ]=G a1 : : : ak A ! :B ]=GX ) j A ! a B ! 2 PG ^ a1::ak 2 Pref (k B:Followk(A))g complete = fB ! :]=G a1 : : : ak A ! :B ]=GX ) 7! (A ! B: ]=G a1 : : : ak X ) j B ! A ! B 2 PG ^ a1 : : :ak 2 NLRFGk (B )g recursion = fA ! :]=G a1 : : :ak X ) 7! (A ! A: ]=G a1 : : : ak X ) j A ! A ! A 2 PG ^ a1 : : :ak 2 LRFGk (A)g Pvtiv automat je zsobnkov automat rozdlen na sti odpovdajc jednotlivm neterminlm - tedy tak, jako by byl tvoen rekurzivn volanmi procedurami. Nejdve je vdy analyzovna nerekurzivn st neterminlu (podle pravidel bez lev rekurze), a pak se (dokud to jde) analyzuje podle lev rekurzivnch pravidel. Se zsobnkem se pracuje jen tehdy, zan-li se analza njak ho neterminlu nebo je-li pln ukonena analza njak ho neterminlu. 5.2 Pvtiv automat s promnnm vhledem Podobn je mon sestrojit analyztor/pijmajc automat pracujc se stejnm jazykem (pop. poskytujc stejn vstup), ale s men mi pam,ovmi nroky - sta pouze zredukovat pechodovou funkci z varianty pracujc s vhledem (konstantn) k na verzi pracujc s vhledem nejv e k. I kdy minimalizujeme vhled na nezbytn nutn k rozli en dal ho postupu vpotu, dostaneme pro sprvn vstup stejn vsledek jako od "pln " varianty a stejn tak i chybn vstup je oznaen za chybn - pouze nkdy v jin fzi vpotu (nejv e o nkolik mlo krok pozdji). Pro bn programovac jazyky se odhaduje velikost takto sestrojen ho syntaktick ho analyztoru na velikost odpovdajc piblin LL(1) analyztoru (i kdy by v dan m ppad nebyl deterministick). Tohoto se d doshnout za pedpokladu, e vt ho vhledu ne 1 je zapoteb jen na velmi mlo mstech. 5.3 Roz iovn automatu Podvejme se, co se stane se stromem denujc neterminl "cmd" (pkaz) z pkladu 2, jestlie do gramatiky pidme nov pravidlo 9 cmd ::= if cond then cmds end a pslu n nov terminly: id ; ; ; ; @ @ @ R @ params := expr while cond do chr str write - - ACHH j CA HH CA C A C A C A C A C A A C AU C C C C C CW - ; ; ; ; @ @ @ R @ - cmds end - expr read id if cond then cmds end - - - - - Obr. 3: Pkaz rozen o if Chceme-li roz it stvajc automat (s pevnm vhledem k), sta s novm pravidlem udlat to, co se dlalo s ostatnmi pravidly ji pi kostrukci stvajcho automatu. Struktura ji existujcch stav se zachovv, nedochz tedy ke ztrt informace zskan a dosud ppadn rozpracovanou analzou. Analyztor tedy me bt roz iovn kdykoliv - tedy nap. i pi pekladu. Pi roz iovn automatu s vhledem nejv e k je nutn ohldat, zda nen nutn nkter pechody nahradit jinmi s del mi vhledy (stvajc vhled by odpovdal nejen stvajc variant, ale i variant prv pidan - automat by se stal nedeterministickm). 5.4 Alternativn pstupy Tak jako na jin vci, d se i na pvtiv analyztory dvat z rznch stran. Sami se sname dvat na svt obma oima, abychom zskali stereoskopick obrzek, a proto se zkusme podvat na vc e obrzk. Mnoho lid si pi my len maluje. Nkter npady se tak daj strunji zaznamenat. Jin npady se tak daj l pe pochopit. Pojme si proto tro ku hrt s obrzkem z pkladu 2: 10 Nejprve zvraznme ve ker vtven. Z vtven uime uzly grafu a z terminl a neterminl jeho hrany. id s params := s expr s while s cond s do s chr write s str expr read s id - - - - - - - - - - - - - - cmds - - - - s end - - - - - - Puntky oznaujc uzly vypadaj sice hezky, ale hrany pak nejsou moc rovn a patn se znakuj. Rozthnme tedy uzly do svislch tekovanch obd lnk. id params := expr while cond do chr write str expr read id - - - - - - - - - - - - - - - - - cmds - - end - - - - - Pokud do takto vytvoen ho voln ho msta zap eme vhledy, kter pak budeme pouvat pro vbr hrany, j budeme z uzlu vystupovat, mme vlastn zachycen cel pijmajc automat. 11 id while write Follow(cmds)- - id - while - write - - - - - - ( := cond - - chr str read id num, id, (, +, ; read - := do cmds end chr str params - - - - - - expr - - Kdo chce, me si ke hranm doplnit napklad s mantick akce, i jin informace, kter se vyuij pro generovn vstupu. A hle - analyztor je na svt. A dokonce relativn pehledn (a snad i snadno udrovateln). 6 Zvr V prci bylo nastnno, jak je mon zkonstruovat analyztor, kter me bt roz iovn i v prbhu analzy, ani by do lo ke ztrt a do toho okamiku zskan informace. Tento model dovoluje "zrovnoprvnit" nov kostrukce se stvajcmi (trochu jinak, ne jak bylo pedstaveno v Dem90], ale snad alespo srovnateln co do funkce). Roz en jsou zde syntakticky zpracovvna stejnou rychlost, jako pvodn prvky jazyka. Vzpamatovn ze syntaktickch chyb me bt e eno stejnmi technikami jak pro star , tak i nov konstrukce jazyka - nap. pomoc skeletlnch mnoin (Pla88], Top89] - zde se mohou vyskytout probl my s automatickm vbrem t to mnoiny, i s tm, e nov pravidla naru ila skeletlnost dan mnoiny), nebo radji polohlaviek (Pla92]). Pot , co byl napsn peklada pracujc s 1-pvtivmi gramatikami (Zem94]), pracuje se i na vvoji pekladae podporujcho jazyky denovan pomoc k-pvtivch gramatik. References Aho86] Alfred V. Aho, Ravi Sethi, Je-rey D. Ullmann: Compilers Principles, Techniques, and Tools, Addison Wesley, 1986 Dem90] Ji Demner: Mechanismy roz iiteln ho jazyka. Vzkumn zprva D. SPZV], erven 1990 Dro85] Janu Drzd: Syntaktick analza t m shora dol. Diplomov prce], Praha, MFF UK 1985. Dro90] Janu Drzd: Syntaktick analza rekurzivnm sestupem pro LR(k) gramatiky, Kandidtsk dizertan prce], Praha, MFF UK 1990. 12 Chy84] Michal Chytil: Automaty a gramatiky, SNTL, Praha 1984 Kra82] Jaroslav Krl: Syntaktick analza a syntax zen peklad. Vzkumn zprva .VT VUT], Praha, .VT VUT 1982. Nau94] Sven Naumann, Hagen Langer: Parsing: Eine Einf/hrung in die maschinelle Analyse nat/rlicer Sprache. B. G. Teubner Stuttgart, 1994, ISBN 3-519-02139-0 Par96] Terrence J. Parr, Russel W. Quong: LL and LR Translators Need k > 1 Lookahead. in: ACM SIGPLAN Notices, Volume 31, No. 2 February 1996, pp 27-34. Pla88] Martin Pltek: Testovateln podmnky pro bezpenou skeletln mnoinu a jejich zobecnn. in: Sbornk krtkch refert SOFSEM'88, .VT UJEP a JMF, Bratislava, 1998 Pla92] Martin Pltek: Syntactic Error Recovery with Formal Guarantees I. Vzkumn zprva MFF UK], Praha, MFF UK, duben 1992 Sik93] Nicolaas Sikkel: Parsing Schemata, Proefschrift Enschede, 1993, ISBN 909006688-8 Top89] Pavel T0pfer: An Error Recovery Method for Top-Down Syntactical Analysis. Vzkumn zprva MFF UK] Praha, MFF UK, nor 1989 Wil95] Reinhard Wilhelm, Dieter Maurer: Compiler Design. Addison-Wesley, 1995, ISBN 0-201-42290-5 Zem94] Michal 1emlika: Peklada roz iiteln ho jazyka. Diplomov prce], Praha, MFF UK 1994. Zem95] Michal 1emlika: Extensible LL(1) parser. Poster], SOFSEM'95, Milovy, 1995 13
Podobné dokumenty
Článek - LovZvere.cz
undGebiihren
D e AbschLrsspre
se hdngenvon
d e rS t a r k e
d e rT r o p h a ae b ! n d
k o n n e ns i c hb e iS c h ae n w i l dv o n
e r ng e nT a u s e n K
d f o n e nb s h i f z u
Betf;gef vof ...
NOVINY VIZOVSKÉ
Chci poukázat na to, Ïe jsou mezi námi dûti, pro které není v‰e samozfiejmostí. Proto se vracím
k tomu správnému rozhodnutí a pfiání - vytvofime dûtem domov, Vánoce a radost. AÈ mají krásné
Vánoce! No...
Gramatiky a jazyky -
Konvence 2.3 Pro zápis terminálních a nonterminálních symbolů a řetězců tvořených těmito
symboly budeme používat této konvence:
(1) a, b, c, d
T estovanı konecnych autom atu O bsah K onecne autom aty v praxi
Pokrytı́ stavu je množina vstupnı́ch sekvencı́ L taková, že lze nalézt
prvek množiny L, kterým se lze dostat do jakéhokoliv žádaného stavu
z počátečnı́ho stavu q0 .
Pokrytı́ přechodů...