Compilerbauhome Compilerbau: Mini-Grammatik Prof. Dr. Uwe Schmidt FH Wedel

Mini-Grammatik

weiter

weiter

Beispiel für FIRST- und FOLLOW-Mengen

Mit diesem Beispiel sollen die Berechnungen der nullable-Menge und der FIRST- und FOLLOW-Mengen veranschaulicht werden.
Die Grammatik ist mehrdeutig, da X und Y beide auf ε  ableitbar sind.
Also ist diese Grammatik auch keine LL(1)-Grammatik.


Die Grammatik

G:      (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
weiter

Die Iterationen bei der Berechnung der Menge der nullable-Symbole

.0      {}
.1      {Y}
.2      {X, Y}

X und Y sind auf ε  ableitbar.
Ab der 3. Iteration wachsen die Mengen nicht mehr.


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.
Ab der 3. Iteration wachsen die Mengen nicht mehr.


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 FOLLOW-Menge Z ist leer, da hier nicht mit der erweiterten Grammatik gearbeitet wurde.


Die LL-Parser-Tabelle

Grammar 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.
Für X mit Lookahead a, Y mit Lookahead c und Z mit Lookahead d gibt es je zwei anwendbare Produktionen.

Die FIRST- und FOLLOW-Mengen und die Parsertabelle sind mit dem Aufruf cfg -l -g examples/Mini.cfg -L des Programms cfg aus den grammar-tools (github) generiert worden.

weiter

Letzte Änderung: 03.01.2018
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel