0% found this document useful (0 votes)
132 views25 pages

PP04 LL (1) Gramatike

The document discusses top-down parsing algorithms and LL(1) grammars. It defines key concepts for LL(1) grammars like FIRST and FOLLOW functions. It also provides rules for eliminating left-recursive rules from grammars. An example Pascal block grammar is given and analyzed step-by-step to determine if it is LL(1) and to perform LL(1) parsing on a given block.
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
132 views25 pages

PP04 LL (1) Gramatike

The document discusses top-down parsing algorithms and LL(1) grammars. It defines key concepts for LL(1) grammars like FIRST and FOLLOW functions. It also provides rules for eliminating left-recursive rules from grammars. An example Pascal block grammar is given and analyzed step-by-step to determine if it is LL(1) and to perform LL(1) parsing on a given block.
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 25

Programski prevodioci (ve be)

T op-down sintaksna anailza, LL(1) gramatike

Algoritmi za sintaksnu analizu


n

T op-down algoritmi algoritmi koji sintaksno stablo kreiraju s vrha ka dnu, tj. ovi algoritmi pok#avaju da startni simbol gramatike preslikaju u kod koji analiziraju. Bottom-up algoritmi algortmi koji sintaksno stablo kreiraju s dna ka vrhu, tj. ovi algoritmi poku#avaju da ulazni kod redukuju na startni simbol gramatike.

Op#ti top-down algoritam za sintaksnu analizu


1. 2.

3.

4.

5. 6.

U izvedenu sekvencu upisati startni simbol, proglasiti ga za tekuci u izvedenoj sekvenci i pro%itati prvi simbol iz ulaznog koda. Ukoliko je tekuci simbol u izvedenoj sekvenci neterminalni simbol, zameniti ga desnom stranom prve smene na %ijoj je levoj strani taj neterminalni simbol. Ukoliko je tekuci simbol u izvedenoj sekvenci terminalni simbol jednak teku'em ulaznom simbolu, prihvati ga (pre'i na analizu slede'eg simbola). Ukoliko je tekuci simbol u izvedenoj sekvenci terminalni simbol razli %it od teku'eg ulaznog simbola, poni#titi dejstvo poslednje primenjene smene. Ukoliko postoji jo# koja smena za preslikavanje istog neterminalnog simbola, poku #ati sa primenom slede'e smene, u suprotnom vratiti se jo# jedan korak nazad. Ukoliko se vra'anjem dodjemo do startnog simbola i ne postoji vi#e smena za njegovo preslikavanje, ulazni kod sadr i sintaksnu gre %ku. Ukoliko nakon prihvatanja poslednjeg ulaznog simbola, ni u izvedenoj sekvenci nema neobradjenih simbola, kod je sintaksno korektan.

Uslov primenljivosti top-down algoritma za sintaksnu analizu


n

Bilo koji top-down algoritam za sintaksnu analizu je primenljiv ukoliko gramatika ne sadr i levo-rekurzivne smene (kako direktne, tako i indirektne).

Pravila za eliminaciju levo-rekurzivnih smena


n

Eliminisanje direktnih levih rekurzija:


q

Skup smena oblika: X ) X | se mo e zameniti slede'im skupom smena: X ) X X ) X| *

Pravila za eliminaciju levo-rekurzivnih smena


n

Indirektne levo-rekurzivne smene: U gramatici postoji indirektna leva rekurzija ukoliko postoji izvodjenje oblika:
X X

Primer indirektno levo-rekurzivnog skupa smena:

X ) Y Y) X|

Eliminacija indirektnih levih rekurzija: Sve skupove smene oblika: X ) Y

Y ) 1 | 2 | 3

zameniti smenama:

X ) 1 | 2 | 3
a zatim se osloboditi direktnih levo-rekurzivnih smena (ukoliko postoje).

Primer 1:
Blok naredbi u jeziku Pascal definisan je slede 'im skupom smena: Blok begin NizNar end NizNar NizNar ; Naredba | Naredba Naredba Dodela | Blok Dodela ID := Izraz Izraz Izraz + CONST | CONST Metodom top-down proveriti da li je blok: begin ID := CONST end sintaksno korektno napisan.

Korak 1: Eliminacija levo-rekurzivnih smena


1.

Skup smena:
NizNar NizNar NizNar NizNar ; Naredba | Naredba Naredba NizNar ; Naredba NizNar |

zamenjujemo smenama:

2.

Skup smena:
Izraz Izraz Izraz Izraz + CONST | CONST CONST Izraz + CONST Izraz |

zamenjujemo smenama:

Transformisani skup smena


(1) (2) (3) (4) (5) (6) (7) (8) (9) (10) Blok begin NizNar end NizNar Naredba NizNar NizNar ; Naredba NizNar NizNar Naredba Dodela Naredba Blok Dodela ID := Izraz Izraz CONST Izraz Izraz + CONST Izraz Izraz

Korak 2: Analiza

LL(1) gramatike
n

LL(1) gramatike omogu'avaju top-down postupak sintaksne analize bez vra'anja. Osnovna ideja je da se ne poku#ava uvek sa primenom prve smene za preslikavanje teku'eg neterminalnog simbola, nego se pogleda slede'i simbol iz ulaznog niza i na osnovu toga odlu%i koja 'e se smena primeniti. Poreklo imena LL(1)
q q q

Ulazni niz se analizira s Leva na desno. Nalazi se Levo izvodjenje sintaksnog stabla. Pri odluci koja 'e se smena primeniti, pogleda se (1) naredni simbol iz ulaznog niza.

FIRST i FOLLOW funkcije


n

Za formalnu definiciju LL(1) gramatika potrebno je definisati funkcije FIRST i FOLLOW. Ukoliko postoji smena oblika X ) , defini#e se funkcija

FIRST() koja sadr i sve terminalne simbole koji mogu da se nadju na po %etku re%i izvedenih iz niza , tj. x FIRST() x Za svaki neterminalni simbol gramatike X defini#e se skup FOLLOW( X ) koji sadr i sve terminalne simbole koji u razvoju mogu da se nadju iza simbola X, tj. x FOLLOW( X) S X x, gde je S startni simbol gramatike.

Odredjivanje FOLLOW funkcije


n n

Po definiciji FOLLOW funkcija startnog simbola gramatike sadr i grani%ni simbol #. Za odredjivanje FOLLOW funkcije neterminalnog simbola X posmatraju se desne strane smena u kojima se posmatrani simbol pojavljuje. Simbol X da desnoj strani smene mo e da se nadje u jednom od slede'ih koteksta: n Z X x xVT xFOLLOW(X) n Z XY YVN FIRST(Y)FOLLOW(X)
n

(Napomena: ukoliko postoji izvodjenje Y *, simbol Y se preska%e i gleda se nastavak smene)

Z X FOLLOW(Z)FOLLOW(X)

Formalna definicija LL(1) gramatike


n

Gramatika G jeste LL(1) gramatika ako i samo ako za svaki skup smena koji na levoj strani imaju isti neterminalni simbol va i:
1. 2.

FIRST(1) FIRST(2) FIRST(n) = Samo jedan od nizova 1, 2 , ,n se mo e preslikati u prazan niz *. Ukoliko se niz k preslikava u prazan niz, onda FIRST(1) FIRST(2) FIRST(k-1) FIRST(k+1) ... FIRST(n) FOLLOW( X )=

X ) 1 | 2 | | n

3.

Leva faktorizacija
n

Iz uslova 1. sledi da gramatika ne mo e biti tipa LL(1) ukoliko sadr i smene koje na levoj strani imaju isti neterminalni simbol na levoj i isti prvi simbol na desnoj strani, tj. LL(1) gramatika ne sadr i smene oblika: X ) Y1 | Y2 Ukoliko u gramatici postoje smene navedenog oblika, gramatika se transformi #e u LL(1) gramatiku tako #to se prikazani skup smena zamenjuje smenama: X ) Y X X ) 1 | 2 Navedena transformacija se naziva levom faktorizacijom.

Postupak LL(1) sintaksne analize


1.

2.

3.

U postupku se koriste 1 radni magacin koji %uva trenutno stanje u razvoju i niz koji pamti primenjene smene. Na po%etku analize se u radni magacin upisuje grani%ni simbol i startni simbol gramatike i pro%ita se prvi simbol iz ulaznog niza. Na osnovu simbola na vrhu radnog magacina i izdvojenog ulaznog simbola, odredjuje se akcija koju treba izv#iti. Sve mogu'e akcije zapam'ene su u LL(1) sintaksnoj tabeli. Korak 2 se ponavlja dok pro%itana akcija iz sintaksne tabele ne bude PRIHVATI (acc) ili GRESKA (err).

LL(1) sintaksna tabela


n

LL(1) sintaksna tabela ima onoliko vrsta koliko je ukupno neterminalnih i terminalnih simbola gramatike (ra unaju'i i grani%ni simbol kao fiktivni terminalni simbol) i onoliko kolona koliko je terminalnih simbola u gramatici. Elementi LL(1) sintaksne tabele su:
pop, acc, M ( A, a ) = (, i ) err ako je A = a (a VT ) ako je A = # i a = # ako je i - ta smena oblika A i (a FIRST ( ) ( FIRST ( ) a FOLLOW ( A))) u ostalim slu%lu%ajeima

Primfer 2:
n

Metodom LL(1) sintaksne anaize proveriti da li je blok definisan u primeru 1 sintaksno ispravno zapisan.

Korak 1: provera da li gramatika jeste LL(1) gramatika


1.

Oslobadjanje od levo-rekurzivnih smena. Nakon ove transformacije gramatika postaje:


(1) (2) (3) (4) (5) (6) (7) (8) (9) (10) Blok begin NizNar end NizNar Naredba NizNar NizNar ; Naredba NizNar NizNar Naredba Dodela Naredba Blok Dodela ID := Izraz Izraz CONST Izraz Izraz + CONST Izraz Izraz

Korak 1: provera da li gramatika jeste LL(1) gramatika


2.

Analiza skupova smena koje na levoj strani imaju isti neterminalni simbol. I par takvih smena:
(3) NizNar ; Naredba NizNar (4) NizNar FIRST( ; Naredba NizNar ) = {;} FIRST( ) = { } FIRST( ; Naredba NizNar ) FIRST( ) = Samo jedna od navedenih smena se preslikava u prazan niz. FOLLOW( NizNar ) = FOLLOW( NizNar) = { end } FIRST( ; Naredba NizNar ) FOLLOW( NizNar ) =

q q

Korak 1: provera da li gramatika jeste LL(1) gramatika


II par takvih smena:
(5) (6)
q

Naredba Naredba

Dodela Blok

FIRST( Dodela ) = { ID } FIRST( Blok ) = { begin } FIRST( Dodela ) FIRST( Blok ) = Ni jedna od navedenih smena se ne preslikava u prazan niz.

Korak 1: Provera da li gramatika jeste LL(1) gramatika


III par takvih smena:
(9) Izraz (10) Izraz
q

+ CONST Izraz

FIRST( + CONST Izraz ) = { + } FIRST( ) = { } FIRST( + CONST Izraz ) FIRST( ) = Samo jedna od navedenih smena se preslikava u prazan niz. FOLLOW( Izraz ) = { ;, end } FIRST(+ CONST Izraz ) FOLLOW( Izraz ) =

Korak 2: Kreiranje LL(1) sintaksne tabele

Korak 2: Sintaksna analiza

Korak 4: Kreiranje sintaksnog stabla

You might also like