Przekształcanie gramatyk do LL(1) Gramatyki LL(k)

Transkrypt

Przekształcanie gramatyk do LL(1) Gramatyki LL(k)
J zyki formalne i kompilatory
Modyfikacja:
2005-01-01
Przekształcanie gramatyk do LL(1)
Gramatyki LL(k)
PobieranieZnaków
Przekształcanie gramatyk bezkontekstowych
do gramatyk LL(1)
Sprawdzanie, czy gramatyka jest LL(1) lub
LL(k)
Analizator
Leksykalny
PobieranieSymboli
Gramatyka
bezkontekstowa
Analizator
Składniowy
J zyki formalne i kompilatory, © by Michał miałek
Lewostronna faktoryzacja i zast powanie
Gramatyka, gdzie:
A
aB, A
aC, nie jest LL(1)
Lewostronna faktoryzacja polega na zast pieniu kilku produkcji
jedn oraz dodaniu nowego symbolu nieterminalnego:
A aX, X B, X C
Ta gramatyka nadal mo e nie by LL(1), gdy np.:
A aX, X B, X
C, B ab, C
ac
Zast powanie polega na podstawieniu symboli terminalnych
zamiast symboli nieterminalnych:
A
aX, X ab, X
ac, a nast pnie dokonaniu lewostronnej
faktoryzacji
A
aX, X aY, Y
b, Y
c
J zyki formalne i kompilatory
Przekształcanie gramatyk, gramatyki
LL(k)
© by Michał miałek
1
J zyki formalne i kompilatory
Modyfikacja:
2005-01-01
Eliminacja lewostronnej rekurencji
Gramatyka jest lewostronnie rekurencyjna, gdy posiada produkcje
postaci:
A
A , gdzie A∈Γ i ∈(Σ∪Γ)*
Eliminacja lewostronnej rekurencji polega na dodaniu nowego
symbolu nieterminalego, który b dzie zamieniał rekurencj na
prawostronn .
Ogólnie, zestaw produkcji:
A
A 1, A
A 2, … , A
A
A
β 1, A
β 2, … , A
βn
m
zamieniamy na nast puj cy zestaw:
A
β 1A’, A
β 2A’, … , A
β nA’
A
A’,
A
A’,
…
,
A
1
2
mA’, A’
λ
J zyki formalne i kompilatory
© by Michał miałek
Sprawdzanie gramatyk LL(1) i LL(k)
Gramatyka LL(k) wymaga znajomo ci „k” kolejnych symboli ze
strumienia wej ciowego, aby poprawnie zanalizowa składni
zdania.
Dla gramatyk definiujemy zbiory „firstk”, „followk” oraz „klookahead”.
Definicje s podobne, jak dla zbiorów „first”, „follow” i „lookahead”.
Zbiory t zawieraj nie pojedyncze symbole, ale ci gi składaj ce si z
maksimum „k” (by mo e mniej) symboli.
Zbiory „follow” musimy oblicza wtedy, gdy elementy zbioru „first”
mog by krótsze ni „k”.
Podobnie, jak dla gramatyk LL(1), gramatyka jest LL(k), gdy zbiory
„k-lookahead” produkcji o tym samym symbolu nieterminanym z
lewej strony, s rozł czne.
J zyki formalne i kompilatory
Przekształcanie gramatyk, gramatyki
LL(k)
© by Michał miałek
2
J zyki formalne i kompilatory
Modyfikacja:
2005-01-01
Sprawdzanie gramatyk LL(k) - ilustracja
Mamy gramatyk :
S
bRS, S
λ, R
RcSa, S
acR, R
b
λ
S
Liczymy first3(bRS):
S
R
bRS
acR
R
b
S
{bb…}
{bac}
R
{bb}
RcSa
acR
{bba}
R
b
{bbb}
J zyki formalne i kompilatory
© by Michał miałek
Sprawdzanie gramatyk LL(k) - ilustracja
Liczymy follow3(R):
S
RcSa
follow1(S) = ?
S
follow3(S) = ?
{ca…}
S
λ
{c…}
S
R
RcSa
acR
{cac}
R
bRS
{cbc}
b
{aca, acb, bca, bcb, …}
{cb..}
nale y jeszcze policzy follow1(S) i follow3(S)…
J zyki formalne i kompilatory
Przekształcanie gramatyk, gramatyki
LL(k)
© by Michał miałek
3
J zyki formalne i kompilatory
Modyfikacja:
2005-01-01
Sprawdzanie gramatyk LL(k) - wiczenia
Sprawdzamy, czy gramatyki o nast puj cych zestawach produkcji
s LL(1), LL(2), LL(3) (symbole pisane wielkimi literami s
nieterminalne, pisane małymi literami s terminalne, S jest
symbolem startowym):
S
aA, A S, A
λ
S
C, S
D, C
aC, C
c, D
aD, D
d
S
aAS, S
b, A
a, A bS
S
aAaB, S
bAbB, A
a, A
ab, B
aB, B
a
S
AS, S
λ, A aA, A b
Prosz policzy zbiory „lookahead” dla odpowiednich produkcji,
porówna je i stwierdzi , czy gramatyka jest LL(1), LL(2), LL(3), czy
te nie jest LL(k) gdzie k<4.
J zyki formalne i kompilatory
Przekształcanie gramatyk, gramatyki
LL(k)
© by Michał miałek
4

Podobne dokumenty