Compilerbau: Mini-Grammatik |
Mit diesem Beispiel sollen die Berechnungen der nullable-Menge
und der FIRST- und FOLLOW-Mengen veranschaulicht werden. Die GrammatikG: (N, T, P, S)
N: {X, Y, Z}
T: {a, c, d}
S: Z
P: X ::= Y
X ::= a
Y ::=
Y ::= c
Z ::= X Y Z
Z ::= d
Die Iterationen bei der Berechnung der Menge der nullable-Symbole.0 {}
.1 {Y}
.2 {X, Y}
X und Y sind auf ε ableitbar.
Die Iterationen bei der Berechnung der FIRST-Mengen.0 X : {}
Y : {}
Z : {}
.1 X : {a}
Y : {c}
Z : {d}
.2 X : {a, c}
Y : {c}
Z : {a, c, d}
Die FIRST-Mengen werden schrittweise über Y und X bis zu Z hin vergrößert.
Die Iterationen bei der Berechnung der FOLLOW-Mengen.0 X : {}
Y : {}
Z : {}
.1 X : {a, c, d}
Y : {a, c, d}
Z : {}
Schon ab der 2. Iteration wachsen die Mengen nicht mehr.
Die LL-Parser-TabelleGrammar G is not LL(1)
3 state(s) with conflicts found:
{(X, a), (Y, c), (Z, d)}
LL(1) parser table
X a : X ::= a
X ::= Y
^^^^^^^^^^^^^^
c : X ::= Y
d : X ::= Y
Y a : Y ::=
c : Y ::= c
Y ::=
^^^^^^^^^^^^^^
d : Y ::=
Z a : Z ::= X Y Z
c : Z ::= X Y Z
d : Z ::= d
Z ::= X Y Z
^^^^^^^^^^^^^^
Wegen der Mehrdeutigkeiten ist die Grammatik
keine LL-Grammatik.
Die FIRST- und FOLLOW-Mengen und die Parsertabelle sind mit
dem Aufruf |
Letzte Änderung: 03.01.2018 | © Prof. Dr. Uwe Schmidt |