SLR Parser Actions
SLR (simple LR) is like LR(0) but reduces on (X::=p.) only if additionally:
- t follow(X) where is current token
Otherwise, same as LR(0) Parser Actions
Here is then the algorithm:
Let K be parser state at the end of stack and t current token:
- if there is a transition for non-empty
- shift: push t onto stack
- if t is EOF, then accept
- reduce: if item K and t follow(X) then
- pop p from stack
- push X onto stack
- if none possible, report syntax error
- if both possible, shift-reduce conflict: grammar not SLR
Note: SLR uses lookahead in a simpler way than (LR(1)), but it is useful
Example 1: Parsing our example using the automaton we constructed
Example 2: Consider the ambiguous grammar
D' ::= E eof E ::= E - E E ::= ID
How does the automaton look like? Compute
goto(goto(goto(I0,E),-),E)
where I0 is the initial state.