Syntaktick anal za roz i iteln ch jazyk

Komentáře

Transkript

Syntaktick anal za roz i iteln ch jazyk
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

Č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 ...

Více

NOVINY VIZOVSKÉ

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...

Více

Gramatiky a jazyky -

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

Více

T estovanı konecnych autom atu O bsah K onecne autom aty v praxi

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ů...

Více