Analiza składniowa – struktura, definicje

Transkrypt

Analiza składniowa – struktura, definicje
J zyki formalne i kompilatory
Modyfikacja:
2005-01-01
Analiza składniowa – struktura,
definicje
PobieranieZnaków
Gramatyki bezkontekstowe
Przykłady wyprowadze
Analizator
Leksykalny
Struktura analizatora składniowego
Zbiory „lookahead”, „first” i „follow”
Gramatyka
bezkontekstowa
PobieranieSymboli
Analizator
Składniowy
J zyki formalne i kompilatory, © by Michał miałek
Gramatyki bezkontekstowe
Gramatyka jest gramatyk bezkontekstow , je li wszystkie jej
produkcje maj form :
A
, gdzie A jest symbolem nieterminalnym (nale y do zbioru , a
nale y do zbioru ( U )*
Zwró my uwag , e to oznacza mo liwo istnienia produkcji o
postaci A
, inaczej: produkcji pustej
Poznamy 2 rodzaje gramatyk bezkontekstowych - gramatyki LL i LR.
Obydwa rodzaje gramatyk umo liwiaj przetwarzanie zdania
wej ciowego od lewej do prawej strony (st d pierwsze L).
Gramatyki LL umo liwiaj analiz składniow od góry w dół zaczynamy od symbolu startowego i dochodzimy do zdania
ko cowego poprzez lewostronne (L) wyprowadzenie
Gramatyki LR umo liwiaj analiz składniow z dołu do góry zaczynamy od zdania ko cowego i dochodzimy do symbolu
startowego poprzez prawostronne (R) wyprowadzenie
J zyki formalne i kompilatory
Analiza składniowa - struktura, definicje
© by Michał miałek
1
J zyki formalne i kompilatory
Modyfikacja:
2005-01-01
Wyprowadzenie dla gramatyki bezkontekstowej
Przykładowy zbiór produkcji dla gramatyki bezkontekstowej:
S
sta B stp
B
D,B
B
E;B
D
defv : id
D
defc : n
E
add
E
mul
E
S to symbol startowy, {S, B, D, E} to zbiór symboli nieterminalnych,
{sta, stp, defv, defc, :, n, add, mul} to zbiór symboli terminalnych
Wyprowadzenie zdania polega na kolejnym stosowaniu produkcji.
Je eli w produkcji napotykamy na symbol nieterminalny, rozwijamy
go stosuj c odpowiedni produkcj (patrz wyprowadzenie podczas
wykładu).
J zyki formalne i kompilatory
© by Michał miałek
Sprawdzanie składni zdania
We my zdanie:
sta defv : id , ; mul ; stp
Jak sprawdzi , czy jest to poprawne zdanie w j zyku zdefiniowanym
gramatyk z poprzedniego slajdu?
Nale y zacz od symbolu startowego, stosuj c odpowiedni
produkcj . Przetwarzaj c produkcj porównujemy symbole
terminalne w produkcji z napotykanymi w zdaniu kolejnymi
symbolami. Je eli w produkcji napotykamy na symbol nieterminalny
– stosujemy odpowiedni produkcj . Je eli istnieje kilka produkcji,
których lew stron stanowi dany symbol nieterminalny,
dokonujemy wyboru na podstawie piwerwszego znaku produkcji.
Pytanie: czy dla wszystkich gramatyk bezkontekstowych mo na
zastosowa powy sz procedur ?
J zyki formalne i kompilatory
Analiza składniowa - struktura, definicje
© by Michał miałek
2
J zyki formalne i kompilatory
Modyfikacja:
2005-01-01
Struktura analizatora LL(1)
Analizator składniowy pobiera leksemy, sprawdza składni i
przekazuje informacje steruj ce generatorem kodu.
Analizator powinien zna wszystkie produkcje i posiada stos.
«interface»
«interface»
PobieranieSymboli
+
+
Translacja
PodajSymbol() : LekSem
Rozpocznij(String) : void
+ Przetłumacz(String) : void
«realize»
typ: int
«interface»
LekSem
Zarz dca Analizatora
Składniowego
+
GeneracjaKodu
+ DodajW zeł(W zeł) : void
+ Generuj(String) : void
Przetłumacz(String) : void
Tablica
Produkcj i
Stos Produkcj i
Analizator LL
+
Przetłumacz(String) : void
J zyki formalne i kompilatory
© by Michał miałek
Tablica i stos produkcji
Produkcje gramatyki bezkontekstowej zawieraj jeden symbol
terminalny po lewej stronie i ci g symboli po lewej.
Zarz dca Analizatora Składniowego
Analizator LL
-
symbol_startowy: int
+
Przetłumacz(nazwa :String) : void
Stos Produkcj i
Tablica Produkcj i
+
+
+
+
wstaw(p :Produkcja) : void
znajd _produkcj (symbol_nieterm :int, symbol_term :int) : Produkcja
-aktualna
1..*
+nast pny
Symbol
Produkcj i
+
typ: int
-głowa
1
+aktualny
J zyki formalne i kompilatory
Analiza składniowa - struktura, definicje
wstaw(p :Produkcja) : void
wyjmij() : Produkcja
0..*
Produkcj a
-
symbol_lewej_strony: int
+
+
+
rozpocznij() : void
przejd _do_nast pnego() : int
sprawd (symbol_term :int) : boolean
© by Michał miałek
3
J zyki formalne i kompilatory
Modyfikacja:
2005-01-01
Zbiór „first”
Zbiór „first” zawiera te symbole terminalne, które mog si znale
na pocz tku produkcji.
Definicja (rekurencyjna):
first(a ) = {a}
first(A) = {a:
(A
gdzie: a
,A
,
(
P; a first( )}
)*, P jest zbiorem produkcji
Zwró my uwag , e:
first( ) = { }
first(A ) = first(A), gdy
= (first(A) – { })
first(A)
first( ), gdy
first(A)
J zyki formalne i kompilatory
© by Michał miałek
Zbiór „follow”
Zbiór „follow” zawiera te symbole terminalne, które mog si
znale po symbolu nieterminalnym we wszystkich produkcjach.
Definicja:
follow(A) = {a: X, , (X
gdy
first( )
follow(A) = {a: X, , (X
a ( (first( ) – {
follow(S) = (jak wy ej) { }
gdzie: a
, A,X
, ,
J zyki formalne i kompilatory
Analiza składniowa - struktura, definicje
A
Pia
first( ) ) },
A
Pi
}) follow(X) ) }, gdy
(
first( )
)*, P jest zbiorem produkcji
© by Michał miałek
4
J zyki formalne i kompilatory
Modyfikacja:
2005-01-01
Zbiór „lookahead”, gramatyka LL(1)
Zbiór „lookahead” dotyczy konkretnej produkcji. Okre la on, pod
wpływem jakich symboli terminalnych nale y zastosowa t
produkcj .
Definicja:
lookahead(A
) = first( ), gdy
= (first( ) – { ))
first(A)
follow(A), gdy
first(A)
Gramatyka jest LL(1), gdy zbiory „lookahead” dla produkcji z t
sam lew stron – s rozł czne.
J zyki formalne i kompilatory
© by Michał miałek
Sprawdzanie gramatyki LL
Aby sprawdzi , czy gramatyka jest LL(1) nale y porówna zbiory
lookahead dla tych produkcji, które posiadaj identyczne lewe
strony.
Dla podanej na pocz tku gramatyki nale y sprawdzi produkcje:
B
D,B
B
E;B
D
defv : id
D
defc : n
E
add
E
mul
E
Jakie s zbiory lookahead dla tych produkcji. Czy zbiory lookahead
s wzajemnie rozł czne?
J zyki formalne i kompilatory
Analiza składniowa - struktura, definicje
© by Michał miałek
5

Podobne dokumenty