Hallo,
ich denke, dass es um die LR-Parsetabelle für die folgende Grammatik geht:
S -> A | bSbb
A -> aB
B -> A | a
Der LR-Automat dieser Grammatik sieht folgendermaßen aus:
und die Parsetabelle, auf die sich die Fragen beziehen, sieht folgendermaßen aus:
Bei der LR(0)-Parsetabelle würde man die Aktionen folgendermaßen definieren [Seite 178]:
- wenn der Zustand qi eine Regel A → α.aβ mit a ∈ T enthält, und qi′ der Zustand ist, der im Automaten von qi beim Lesen von a erreicht wird, dann schiebe a auf den Stack und lege qi′ darüber
- wenn der Zustand qi eine Regel S′ → S. enthält und die Eingabe ε ist, akzeptiere
- wenn der Zustand qi eine Regel B → γ. enthält, dann reduziere mit Regel B → γ
Allerdings sehen wir, dass diese Regeln die Aktionen der LR(0)-Parsetabelle nicht eindeutig festlegen [Seite 179]. Zum Beispiel könnten wir in Zustand q7 mit B → a reduzieren, da B → a. im Zustand enthalten ist und wir könnten andererseits in Zustand q7 das Zeichen a schieben, da A → .aB in diesem Zustand enthalten ist. Diese Grammatik kann daher nicht mit einem LR(0)-Parser geparst werden (jedenfalls nicht ohne Backtracking oder nichtdeterministische Auswahl von Aktionen).
Allerdings geht man beim LR-Parsing in der Regel von SLR(1)-Parsetabellen (und in der Praxis sogar noch von LALR(1)-Parsetabellen) aus. Wenn wir in RoSy von LR-Parsern sprechen, meinen wir in der Regel SLR(1)-Parser, da deren Erweiterung gegenüber LR(0)-Parsern sehr einfach ist [Seite 81]: Bei SLR(1)-Parsetabellen wird eine Reduktion B → γ. nur erlaubt, wenn B → γ. dem Zustand angehört und das nächste Zeichen im Wort zu FOLLOW(B) gehört.
Also brauchen wir für unsere Grammatik zunächst die FOLLOW-Mengen:
Follow(A) = {$,b}
Follow(B) = {$,b}
Follow(S) = {$,b}
So, nun wirklich zu den Fragen: q1 enthält S -> A., kann aber eine Reduktion nur machen, wenn das nächste Zeichen im Wort in Follow(S) = {$,b} liegt. Analog enhält q5 die Aktion B -> A., kann bei SLR(1) aber nur mit dieser Regel reduzieren, wenn das nächste Zeichen im Wort in Follow(B) = {$,b} liegt. Daher scheiden dies Reduktionen aus, wenn das nächste Zeichen im Wort der Buchstabe "a" ist.
Somit bekommen wir die obige SLR(1)-Parsetabelle, welche in jeder Situation nicht mehr als eine Aktion bestimmt und damit einen deterministischen Kellerautomaten beschreibt.