Professional Documents
Culture Documents
Lecture 9
Lecture 9
Bottom-up Parsing
E’ → .E
E → .T + E
E → .T
T → .int * T
T → .int
T → .(E)
E→T+E|T
LR(0) Automaton T → int * T | int | (E)
E’ → .E E’ → E.
E → .T + E E
E → .T
T → .int * T
T → .int
T → .(E)
E→T+E|T
LR(0) Automaton T → int * T | int | (E)
E’ → .E E’ → E.
E → .T + E E
E → .T
T → .int * T T
E → T. + E
T → .int E → T.
T → .(E)
E→T+E|T
LR(0) Automaton T → int * T | int | (E)
E’ → .E E’ → E.
E → .T + E E
E → .T
T → .int * T T
E → T. + E
T → .int E → T.
T → .(E) int
T → int. * T
T → int.
E→T+E|T
LR(0) Automaton T → int * T | int | (E)
E’ → .E E’ → E.
E → .T + E E
E → .T
T → .int * T T
E → T. + E
T → .int E → T.
T → .(E) int
T → int. * T
T → int. T → (.E)
E → .T + E
E → .T
T → .int * T
T → .int
T → .(E)
(
E→T+E|T
LR(0) Automaton T → int * T | int | (E)
E → T +. E
E → .T + E
E → .T
E’ → .E E’ → E. T → .int * T
E → .T + E E + T → .int
E → .T T → .(E)
T → .int * T T
E → T. + E
T → .int E → T.
T → .(E) int
T → int. * T
T → int. T → (.E)
E → .T + E
E → .T
T → .int * T
T → .int
T → .(E)
(
E→T+E|T
LR(0) Automaton T → int * T | int | (E)
E → T +. E
E → .T + E E E → T + E.
E → .T
E’ → .E E’ → E. T → .int * T
E → .T + E E + T → .int
E → .T T → .(E)
T → .int * T T
E → T. + E T
T → .int E → T.
T → .(E) int int (
T → int. * T
T → int. T → (.E)
E → .T + E
E → .T
T → .int * T
T → .int
T → .(E)
(
E→T+E|T
LR(0) Automaton T → int * T | int | (E)
E → T +. E
E → .T + E E E → T + E.
E → .T
E’ → .E E’ → E. T → .int * T
E → .T + E E + T → .int
E → .T T → .(E)
T → .int * T T
E → T. + E T
T → .int E → T.
T → .(E) int int (
T → int. * T
T → int. T → (.E)
E → .T + E
E → .T
* T → int *. T T → .int * T
T → .int * T T → .int
T → .int T → .(E)
T → .(E) (
E→T+E|T
LR(0) Automaton T → int * T | int | (E)
E → T +. E
E → .T + E E E → T + E.
E → .T
E’ → .E E’ → E. T → .int * T
E → .T + E E + T → .int
E → .T T → .(E)
T → .int * T T
E → T. + E T
T → .int E → T.
T → .(E) int int (
T → int. * T
T → int. T → (.E)
E → .T + E
int E → .T
* T → int *. T T → .int * T
T → .int * T T T → .int
T → int * T. T → .(E)
T → .int
T → .(E) (
E→T+E|T
LR(0) Automaton T → int * T | int | (E)
E → T +. E
E → .T + E E E → T + E.
E → .T
E’ → .E E’ → E. T → .int * T
E → .T + E E + T → .int
E → .T T → .(E)
T → .int * T T
E → T. + E T
T → .int T → (E.)
E → T.
T → .(E) int int
T (
E
T → int. * T
T → int. T → (.E)
int E → .T + E
int E → .T
* T → int *. T T → .int * T
T → .int * T T T → .int
T → int * T. T → .(E)
T → .int
T → .(E) (
(
E→T+E|T
LR(0) Automaton T → int * T | int | (E)
E → T +. E
E → .T + E E E → T + E.
E → .T T → (E).
E’ → .E E’ → E. T → .int * T
E → .T + E E + T → .int
E → .T )
T T → .(E)
T → .int * T E → T. + E T
T → .int T → (E.)
E → T.
T → .(E) int int T (
E
T → int. * T
T → int. T → (.E)
int E → .T + E
int E → .T
* T → int *. T T → .int * T
T → .int * T T T → .int
T → int * T. T → .(E)
T → .int
T → .(E) (
(
LR Parsing Algorithm
● Use stack of states and symbols
○ All states in the FA are numbered
● Two parse tables
○ Goto table (State x Symbol → State)
■ GOTO[i, A] = j, if statei →A statej
○ Action table (state x terminal → {shift, reduce, accept, reject})
■ statei has S’ → S., then ACTION [i, $] = accept
■ statei has A → α.tβ and GOTO[i, t] = j, then ACTION[i, t] = shift j
■ statei has A → α. and t ∈ FOLLOW(A), then ACTION[i, t] = reduce A → α
■ None of the above ⇒ ACTION[i, t] = reject
LR Parsing Algorithm
INPUT: An input string w and an LR parsing table
OUTPUT: If w is accepted, the reduction steps; else error
a ← first symbol of w
while (true) {
s ← state on the top of the stack /* initially it is s0 or start state */
if (ACTION[s, a] = shift t) {
push t onto the stack
a ← next symbol of w
} else if (ACTION[s, a] = reduce A → β) {
pop |β| elements off the stack
t ← state on top of the stack
push GOTO[t, A] onto the stack
output production A → β
} else if (ACTION[s, a] = accept) { break } /* parsing is done */
else { reject with error }
LR(0) Parsing
● Shift if the item A → α.Bβ can transition on B, i.e., there is a
transition from A → α.Bβ to A → αB.β
● Reduce by A → α, if the item-set contains the item A → α.
● Example
String : (id)
Grammar : S → E | (E)
E → id
LR(0) Parsing
● Reduce by A → α, if the item-set contains the item A → α.
● Shift if the item A → α.Bβ can transition on B, i.e., there is a
transition from A → α.Bβ to A → αB.β
● Conflicts
○ Shift-reduce
■ If any state in the DFA has a shift and a reduce item,
e.g., A → α. and A’ → α’.B
○ Reduce-reduce
■ If any state in the DFA has two reduce items, e.g., A → α. and A’ → α’.
E→T+E|T
Shift-reduce Conflict T → int * T | int | (E)
E → T +. E
E → .T + E E E → T + E.
E → .T T → (E).
E’ → .E E’ → E. T → .int * T
E → .T + E E + T → .int
E → .T )
T T → .(E)
T → .int * T E → T. + E T T
T → .int T → (E.)
E → T.
T → .(E) int int (
E
T → int. * T
T → int. T → (.E)
int E → .T + E
int E → .T
* T → int *. T T → .int * T
T → .int * T T T → .int
T → int * T. T → .(E)
T → .int
T → .(E) (
(
Simple LR Parsing
● Reduce by A → α, if the item-set contains the item A → α. and
the next input symbol is in FOLLOW(A)
● Shift if the item A → α.Bβ can transition to B, i.e., there is a
transition from A → α.Bβ to A → αB.β
● There may still be conflicts because not all grammars are SLR
● Example: int * int + int
E→T+E|T
SLR Parsing T → int * T | int | (E)
E → T +. E
E → .T + E E E → T + E.
E → .T T → (E).
E’ → .E E’ → E. T → .int * T
E → .T + E E + T → .int
E → .T )
T T → .(E)
T → .int * T E → T. + E T
T → .int T → (E.)
E → T.
T → .(E) int int
T (
E
T → int. * T
T → int. T → (.E)
int E → .T + E
int E → .T
* T → int *. T T → .int * T
T → .int * T T T → .int
T → int * T. T → .(E)
T → .int
T → .(E) (
(
int + * ( ) $ E T
GOTO Table 1 4 11 2 3
3 5
4 6
5 4 11 7 3
6 4 11 8
10 9
11 4 11 10 3
State int + * ( ) $
2 A
3 s5 r3 r3
4 r5 s6 r5 r5
5 s4 s11
1. E’ → E 6 s4 s11
2. E→T+E 7 r2 r2
3. E→T 8 r4 r4 r4
4. T → int * T 9 r6 r6 r6
5. T → int 10 s9
6. T → (E) 11 s4 s11
State int + * ( ) $ E T
2 A
3 s5 r3 r3
4 r5 s6 r5 r5
5 s4 s11 7 3
1. E’ → E 6 s4 s11 8
2. E→T+E 7 r2 r2
3. E→T 8 r4 r4 r4
4. T → int * T
9 r6 r6 r6
5. T → int
10 s9
6. T → (E)
11 s4 s11 10 3
SLR Parsing with Parse Tables
Input State on Stack Action