|
Dieses ist ein Beispiel für eine LL(1)-Grammatik.
Man erkennt, dass die rechten Seiten von S und L immer
mit einem jeweils eindeutigen Terminalsymbol beginnen.
Es wird im folgenden mit der erweiterten Grammatik gearbeitet.
Die Grammatik
| G = (N, T, P, S) |
| N : | { S', S, L, E } |
| T : | { :=, ;, begin, else, end, id, if, num, then, $ } |
| S : | S' |
| P : | S' | ::= | S $ |
|---|
| | S | ::= | if E then S else S | | | S | ::= | begin S L | | | S | ::= | id := E | | | L | ::= | end | | | L | ::= | ; S L | | | E | ::= | num | | | E | ::= | id |
Die Iterationen bei der Berechnung der nullable-Symbole
| | S' | S | L | E |
|---|
| 0. | - | - | - | - |
|---|
| 1. | - | - | - | - |
|---|
Da keine ε-Produktionen existieren, ist die Berechnung trivial.
Die Iterationen bei der Berechnung der FIRST-Mengen
| | S' | S | L | E |
|---|
| 0. | { } | { } | { } | { } |
|---|
| 1. | { } | { if, begin, id } | { end, ; } | { num, id } |
|---|
| 2. | { if, begin, id } | { if, begin, id } | { end, ; } | { num, id } |
|---|
| 3. | { if, begin, id } | { if, begin, id } | { end, ; } | { num, id } |
|---|
Die Iterationen bei der Berechnung der FOLLOW-Mengen
| | S' | S | L | E |
|---|
| 0. | { } | { } | { } | { } |
|---|
| 1. | { } | { $, else, end, ; } | { $, else, end, ; } | { then, $, else, end, ; } |
|---|
| 2. | { } | { $, else, end, ; } | { $, else, end, ; } | { then, $, else, end, ; } |
|---|
Diese Berechnung ist redundant, da kein Symbol auf ε ableitbar ist.
Die LL-Parser-Tabelle
| | := | ; | begin | else | end | id | if | num | then | $ |
|---|
| S' | - | - | S' ::= S $ | - | - | S' ::= S $ | S' ::= S $ | - | - | - |
|---|
| S | - | - | S ::= begin S L | - | - | S ::= id := E | S ::= if E then S else S | - | - | - |
|---|
| L | - | L ::= ; S L | - | - | L ::= end | - | - | - | - | - |
|---|
| E | - | - | - | - | - | E ::= id | - | E ::= num | - | - |
|---|
Die Grammatik ist LL(1)
|