0% found this document useful (0 votes)
77 views

Introduction To Shift-Reduce Parsing

The document discusses shift-reduce parsing. It explains that a shift-reduce parser uses a pushdown automaton to parse input based on a context-free grammar. The pushdown automaton can shift tokens onto a stack, reduce tokens on the stack based on grammar productions, and accept the input string. An example is provided to demonstrate how a shift-reduce parser would parse an expression based on a grammar.

Uploaded by

Ahmad Abba
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
77 views

Introduction To Shift-Reduce Parsing

The document discusses shift-reduce parsing. It explains that a shift-reduce parser uses a pushdown automaton to parse input based on a context-free grammar. The pushdown automaton can shift tokens onto a stack, reduce tokens on the stack based on grammar productions, and accept the input string. An example is provided to demonstrate how a shift-reduce parser would parse an expression based on a grammar.

Uploaded by

Ahmad Abba
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 95

MIT 6.

035
6 035
Introduction to Shift-Reduce Parsing

Martin Rinard
Laboratory for Computer Science
Massachusetts Institute of Technology
Orientation
• Specify Syntax Using
Context-Free Grammar Expr → Expr Op Expr
• Nonterminals Expr → (Expr)
• Terminals p → - Expr
Expr p
• Productions Expr → num
• Given a grammar, Parser Op → +
Generator produces a Op → -
parser
Op → *
• Starts with input string
• Produces parse tree
Today’s Lecture

• How generated parser works


• How
H parser generator
t produces
d parser
• Central mechanism
• Pushdown automaton,
automaton which
which implements
• Shift-reduce parser
Pushdown Automata
• C
Consists
i t off
• Pushdown stack (can have terminals and nonterminals)
• Finite state automaton control
• Can do one of three actions (based on state and input):
• Shift:
• Shift current input symbol from input onto stack
• Reduce:
• If symbols on top of stack match right hand side of
some grammar production NT → β
• Pop symbols (β) off of the stack
• Push left hand side nonterminal (NT) onto stack
• Accept
A h iinputt string
t tthe ti
Shift-Reduce Parser Example
Expr → Expr Op Expr
Expr → (Expr)
Expr → - Expr
Stack Expr → num
Opp→ +
Op → -
Op → *

Input String

num * ( num + num )


Shift-Reduce Parser Example
Expr → Expr Op Expr
Expr → (Expr)
Expr → - Expr
Expr → num
Opp→ +
Op → -
Op → *

num * ( num + num )


Shift-Reduce Parser Example
Expr → Expr Op Expr
Expr → (Expr)
Expr → - Expr
Expr → num
Opp→ +
Op → -
Op → *
FT
SHIF

num * ( num + num )


Shift-Reduce Parser Example
Expr → Expr Op Expr
Expr → (Expr)
Expr → - Expr
Expr → num
Opp→ +
Op → -
num Op → *
FT
SHIF

* ( num + num )
Shift-Reduce Parser Example
p
Expr → Expr Op Expr
Expr → (Expr)
Expr → - Expr
Expr → num
Opp→ +
Op → -
num Op → *
R UCE
REDU

* ( num + num )
Shift-Reduce Parser Example
Expr → Expr Op Expr
Expr → (Expr)
Expr → - Expr
Expr → num
Opp→ +
Op → -
Expr Op → *
R UCE
REDU

num
* ( num + num )
Shift-Reduce Parser Example
Expr → Expr Op Expr
Expr → (Expr)
Expr → - Expr
Expr → num
Opp→ +
Op → -
Expr Op → *
FT
SHIF

num
* ( num + num )
Shift-Reduce Parser Example
Expr → Expr Op Expr
Expr → (Expr)
Expr → - Expr
Expr → num
Opp→ +
* Op → -
Expr Op → *
FT
SHIF

num
( num + num )
Shift-Reduce Parser Example
p
Expr → Expr Op Expr
Expr → (Expr)
Expr → - Expr
Expr → num
Opp→ +
Op Op → -
Expr Op → *
R UCE
REDU

num *
( num + num )
Shift-Reduce Parser Example
Expr → Expr Op Expr
Expr → (Expr)
Expr → - Expr
Expr → num
Opp→ +
Op Op → -
Expr Op → *
FT
SHIF

num *
( num + num )
Shift-Reduce Parser Example
Expr → Expr Op Expr
Expr → (Expr)
Expr → - Expr
Expr → num
( Opp→ +
Op Op → -
Expr Op → *
FT
SHIF

num *
num + num )
Shift-Reduce Parser Example
Expr → Expr Op Expr
Expr → (Expr)
Expr → - Expr
Expr → num
( Opp→ +
Op Op → -
Expr Op → *
FT
SHIF

num *
num + num )
Shift-Reduce Parser Example
Expr → Expr Op Expr
Expr → (Expr)
Expr → - Expr
num
Expr → num
( Opp→ +
Op Op → -
Expr Op → *
FT
SHIF

num *
+ num )
Shift-Reduce Parser Example
Expr → Expr Op Expr
Expr → (Expr)
Expr → - Expr
Expr
Expr → num
( Opp→ +
Op Op → -
Expr Op → *
UCE
FT
SHIF
REDU

num * num
R

+ num )
Shift-Reduce Parser Example
Expr → Expr Op Expr
Expr → (Expr)
Expr → - Expr
Expr
Expr → num
( Opp→ +
Op Op → -
Expr Op → *
FT
SHIF

num * num
+ num )
Shift-Reduce Parser Example
Expr → Expr Op Expr
+ Expr → (Expr)
Expr → - Expr
Expr
Expr → num
( Opp→ +
Op Op → -
Expr Op → *
FT
SHIF

num * num
num )
Shift-Reduce Parser Example
Expr → Expr Op Expr
Op Expr → (Expr)
Expr → - Expr
Expr
Expr → num
( Opp→ +
Op Op → -
Expr Op → *
UCE
FT
SHIF
REDU

num * num +
R

num )
Shift-Reduce Parser Example
Expr → Expr Op Expr
Op Expr → (Expr)
Expr → - Expr
Expr
Expr → num
( Opp→ +
Op Op → -
Expr Op → *
FT
SHIF

num * num +
num )
Shift-Reduce Parser Example
num Expr → Expr Op Expr
Op Expr → (Expr)
Expr → - Expr
Expr
Expr → num
( Opp→ +
Op Op → -
Expr Op → *
FT
SHIF

num * num +
)
Shift-Reduce Parser Example
Expr Expr → Expr Op Expr
Op Expr → (Expr)
Expr → - Expr
Expr
Expr → num
( Opp→ +
Op Op → -
Expr Op → *
UCE
FT
SHIF
REDU

num * num + num


R

)
Shift-Reduce Parser Example
p
Expr → Expr Op Expr
Expr → (Expr)
Expr → - Expr
Expr
Expr → num
( Expr
Opp→ +
Op Op Op → -
Expr Expr Op → *
UCE
FT
SHIF
REDU

num * num + num


R

)
Shift-Reduce Parser Example
Expr → Expr Op Expr
Expr → (Expr)
Expr → - Expr
Expr
Expr → num
( Expr
Opp→ +
Op Op Op → -
Expr Expr Op → *
FT
SHIF

num * num + num


)
Shift-Reduce Parser Example
Expr → Expr Op Expr
) Expr → (Expr)
Expr → - Expr
Expr
Expr → num
( Expr
Opp→ +
Op Op Op → -
Expr Expr Op → *
FT
SHIF

num * num + num


Shift-Reduce Parser Example
p
Expr → Expr Op Expr
Expr → (Expr)
Expr → - Expr
) Expr → num
Expr Opp→ +
E
Expr
Op Expr Op → -
Expr ( Op → *
Op
Expr
R UCE
REDU

num * num + num


Shift-Reduce Parser Example
Expr → Expr Op Expr
Expr → (Expr)
Expr → - Expr
) Expr → num
Expr
Opp→ +
E
Expr
Op Expr Op → -
Expr ( Op → *
Expr Op
Expr
R UCE
REDU

num * num + num


Shift-Reduce Parser Example
Expr → Expr Op Expr
Expr → (Expr)
Expr → - Expr
) Expr → num
Expr
Opp→ +
E
Expr
Op Expr Op → -
Expr ( Op → *
Expr Op
Expr
A EPT!
ACCE

num * num + num


Basic Idea

• Goal: reconstruct parse tree for input string


• R d input
Read i t from
f left
l ft tto right
i ht
• Build tree in a bottom-up fashion
• Use sstack
tack to hold pending sequences of terminals
and nonterminals
Potential Conflicts

• Reduce/Reduce Conflict
• Top
T off tthe
h stack t h RHS off multiple
t k may match lt i l
productions
• Which production to use in the reduction?
• Shift/Reduce Conflict
• Stack may match RHS of production
• But that may not be the right match
• May need to shift an input and later find a
different reduction
Conflicts
•Original Grammar •New Grammar
Expr → Expr Op Expr Expr → Expr Op Expr
Expr → (Expr) Expr → Expr - Expr
Expr → (Expr)
Expr → - Expr
Expr → num Expr → Expr -
O → +
Op Expr → num
Op → - Op → +
Op
p→ * Op → -
Op → *
Conflicts
Expr → Expr Op Expr
Expr → Expr - Expr
Expr → (Expr)
Expr → Expr -
Expr
p → num
Op → +
Op → -
Op → *

num - num
Conflicts
Expr → Expr Op Expr
Expr → Expr - Expr
Expr → (Expr)
Expr → Expr -
Expr
p → num
Op → +
Op → -
Op → *
FT
SHIF

num - num
Conflicts
Expr → Expr Op Expr
Expr → Expr - Expr
Expr → (Expr)
Expr → Expr -
Expr
p → num
Op → +
num Op → -
Op → *
FT
SHIF

- num
Conflicts
Expr → Expr Op Expr
Expr → Expr - Expr
Expr → (Expr)
Expr → Expr -
Expr
p → num
Op → +
Expr Op → -
Op → *
UCE
FT
SHIF
REDU

num
R

- num
Conflicts
Expr → Expr Op Expr
Expr → Expr - Expr
Expr → (Expr)
Expr → Expr -
Expr
p → num
Op → +
Expr Op → -
Op → *
FT
SHIF

num

- num
Conflicts
Expr → Expr Op Expr
Expr → Expr - Expr
Expr → (Expr)
Expr → Expr -
Expr
p → num
- Op → +
Expr Op → -
Op → *
FT
SHIF

num

num
Shift/Reduce/Reduce Conflict
Expr → Expr Op Expr
Expr → Expr - Expr
Options: Expr → (Expr)
Reduce Expr → Expr -
Reduce Expr
p → num
- Shift Op → +
Expr Op → -
Op → *

num

num
Shift/Reduce/Reduce Conflict
Expr → Expr Op Expr
Expr → Expr - Expr
What Happens if Expr → (Expr)
Choose Expr → Expr -
Reduce Expr
p → num
- Op → +
Expr Op → -
Op → *
R UCE
REDU

num

num
Shift/Reduce/Reduce Conflict
Expr → Expr Op Expr
Expr → Expr - Expr
What Happens if Expr → (Expr)
Choose Expr → Expr -
Reduce Expr
p → num
Op → +
Expr Op → -
Op → *
Expr
SHIFT
T

num -
S

num
Shift/Reduce/Reduce Conflict
Expr → Expr Op Expr
Expr → Expr - Expr
What Happens if Expr → (Expr)
Choose Expr → Expr -
Reduce Expr
p → num
num Op → +
Expr Op → -
Op → *
Expr
SHIFT
T

num -
S
Shift/Reduce/Reduce Conflict
Expr → Expr Op Expr
Expr → Expr - Expr
What Happens if Expr → (Expr)
Choose Expr → Expr -
Reduce Expr
p → num
Expr Op → +
Expr Op → -
Op → *
Expr
R UCE
REDU

num - num
Shift/Reduce/Reduce Conflict
Expr → Expr Op Expr
Expr → Expr - Expr
What Happens if Expr → (Expr)
Choose Expr → Expr -
Reduce Expr
p → num
Expr Op → +
Expr Op → -
Op → *
Expr
S!
FAILS

num - num
F
Shift/Reduce/Reduce Conflict
Expr → Expr Op Expr
Expr → Expr - Expr
Both of These Expr → (Expr)
Actions Work Expr → Expr -
Reduce Expr
p → num
- Shift Op → +
Expr Op → -
Op → *

num

num
Shift/Reduce/Reduce Conflict
Expr → Expr Op Expr
Expr → Expr - Expr
What Happens if Expr → (Expr)
Choose Expr → Expr -
Reduce Expr
p → num
- Op → +
Expr Op → -
Op → *

num

num
Shift/Reduce/Reduce Conflict
Expr → Expr Op Expr
Expr → Expr - Expr
What Happens if Expr → (Expr)
Choose Expr → Expr -
Reduce Expr
p → num
Op Op → +
Expr Op → -
Op → *
R UCE
REDU

num -

num
Shift/Reduce/Reduce Conflict
Expr → Expr Op Expr
Expr → Expr - Expr
What Happens if Expr → (Expr)
Choose Expr → Expr -
num Reduce Expr
p → num
Op Op → +
Expr Op → -
Op → *
SHIFT
T

num -
S
Shift/Reduce/Reduce Conflict
Expr → Expr Op Expr
Expr → Expr - Expr
What Happens if Expr → (Expr)
Choose Expr → Expr -
Expr Reduce Expr
p → num
Op Op → +
Expr Op → -
Op → *
R UCE
REDU

num - num
Shift/Reduce/Reduce Conflict
Expr → Expr Op Expr
Expr → Expr - Expr
What Happens if Expr → (Expr)
Choose Expr → Expr -
Reduce Expr
p → num
Expr Op → +
Expr Op Op → -
Op → *
Expr
R UCE
REDU

num - num
Shift/Reduce/Reduce Conflict
Expr → Expr Op Expr
Expr → Expr - Expr
What Happens if Expr → (Expr)
Choose Expr → Expr -
Reduce Expr
p → num
Expr Op → +
Expr Op Op → -
Op → *
Expr
A EPT
ACCE

num - num
Conflicts
Expr → Expr Op Expr
Expr → Expr - Expr
What Happens if Expr → (Expr)
Choose Expr → Expr -
Shift Expr
p → num
- Op → +
Expr Op → -
Op → *
FT
SHIF

num

num
Conflicts
Expr → Expr Op Expr
Expr → Expr - Expr
What Happens if Expr → (Expr)
Choose Expr → Expr -
num Shift Expr
p → num
- Op → +
Expr Op → -
Op → *
FT
SHIF

num
Conflicts
Expr → Expr Op Expr
Expr → Expr - Expr
What Happens if Expr → (Expr)
Choose Expr → Expr -
Expr Shift Expr
p → num
- Op → +
Expr Op → -
Op → *
UCE
REDU

num num
Conflicts
Expr → Expr Op Expr
Expr → Expr - Expr
What Happens if Expr → (Expr)
Choose Expr → Expr -
Shift Expr
p → num
Expr Op → +
Expr Op → -
Op → *
UCE

Expr
REDU

num - num
Conflicts
Expr → Expr Op Expr
Expr → Expr - Expr
What Happens if Expr → (Expr)
Choose Expr → Expr -
Shift Expr
p → num
Expr Op → +
Expr Op → -
Op → *
EPT

Expr
ACCE

num - num
Shift/Reduce/Reduce Conflict
Expr → Expr Op Expr
This Shift/Reduce
/ Conflict Expr → Expr - Expr
Reflects Ambiguity in Expr → (Expr)
Grammar Expr → Expr -
Expr
p → num
- Op → +
Expr Op → -
Op → *

num

num
Shift/Reduce/Reduce Conflict
Expr → Expr Op Expr
This Shift/Reduce
/ Conflict Expr → Expr - Expr
Reflects Ambiguity in Expr → (Expr)
Grammar Expr → Expr -
Expr
p → num
- Op → +
Expr Op → -
Op → *
Eliminate by Hacking
Grammar
num

num
Shift/Reduce/Reduce Conflict
Expr → Expr Op Expr
This Shift/Reduce
/ Expr → Expr - Expr
Conflict Can Be Expr → (Expr)
Eliminated By Expr → Expr -
Lookahead of One Expr
p → num
- Symbol Op → +
Expr Op → -
Op → *
Parser Generator Should
Handle It
num

num
Constructing a Parser
• We will construct version with no lookahead
• Key Decisions
• Shift or Reduce
• Which Production to Reduce
• Basic Idea
• Build a DFA to control shift and reduce actions
• In effect, convert grammar to pushdown
automaton
• Encode finite state control in parse table
Parser State
• Input Token Sequence ($ for end of input)
• Current State from Finite State Automaton
• Two Stacks
• State Stack (implements finite state automaton)
• Symbol Stack (terminals from input and
nonterminals from reductions)
Integrating Finite State Control

• Actions
• Push
P h Symbols
S b l and d States
St t O Onto
t Stacks
St k
• Reduce According to a Given Production
• Accept
• Selected action is a function of
• Current input ssymbol
• Current state of finite state control
• Each action specifies next state
• Implement control using parse table
Parse Tables
ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

• Implements finite state control


• At each step, look up
• Table[top
T bl [ off state stack]
k] [ input
i symbol]
b l]
• Then carry out the action
Parse Table Example
ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

State Stack Symbol Stack Input Grammar


S → X $ (1)
(()) X → (X ) (2)
X → ( ) (3)
s0 X
Parser Tables

ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

• Shift to sn
• Push input token into the symbol stack
• Push sn into state stack
• Advance to next input symbol
Parser Tables

ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

• Reduce (n)
• Pop both stacks as many times as the number
off symbols
b l on the l n
th RHS off rule
• Push LHS of rule n into symbol stack
Parser Tables
ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

• Reduce (n) (continued)


• Look up
T bl [t off the
• Table[top th state
t t stack][top
t k][t off symbolb l stack]
t k]
• Push that state (in goto part of table) onto state
stack
Parser Tables

ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

• Accept
• Stop parsing and report success
Parse Table In Action
ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

State Stack Symbol Stack Input Grammar


(())$ S → X $ (1)
X → (X ) (2)
X → ( ) (3)
s0
Parse Table In Action
ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

State Stack Symbol Stack Input Grammar


(())$ S → X $ (1)
X → (X ) (2)
X → ( ) (3)
s0
Parse Table In Action
ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

State Stack Symbol Stack Input Grammar


())$ S → X $ (1)
X → (X ) (2)
s2 X → ( ) (3)
s0 (
Parse Table In Action
ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

State Stack Symbol Stack Input Grammar


())$ S → X $ (1)
X → (X ) (2)
s2 X → ( ) (3)
s0 (
Parse Table In Action
ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

State Stack Symbol Stack Input Grammar


))$ S → X $ (1)
s2 X → (X ) (2)
s2 ( X → ( ) (3)
s0 (
Parse Table In Action
ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

State Stack Symbol Stack Input Grammar


))$ S → X $ (1)
s2 X → (X ) (2)
s2 ( X → ( ) (3)
s0 (
Parse Table In Action
ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

State Stack Symbol Stack Input Grammar


s5 )$ S → X $ (1)
s2 ) X → (X ) (2)
s2 ( X → ( ) (3)
s0 (
Parse Table In Action
ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

State Stack Symbol Stack Input Grammar


s5 )$ S → X $ (1)
s2 ) X → (X ) (2)
s2 ( X → ( ) (3)
s0 (
Step
p One: Pop
p Stacks
ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

State Stack Symbol Stack Input Grammar


s5 )$ S → X $ (1)
s2 ) X → (X ) (2)
s2 ( X → ( ) (3)
s0 (
Step
p One: Pop
p Stacks
ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

State Stack Symbol Stack Input Grammar


)$ S → X $ (1)
X → (X ) (2)
s2 X → ( ) (3)
s0 (
Step
p Two: Push Nonterminal
ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

State Stack Symbol Stack Input Grammar


)$ S → X $ (1)
X → (X ) (2)
s2 X → ( ) (3)
s0 (
Step
p Two: Push Nonterminal
ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

State Stack Symbol Stack Input Grammar


)$ S → X $ (1)
X → (X ) (2)
s2 X X → ( ) (3)
s0 (
Step
p Three: Use Goto,, Push New State
ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

State Stack Symbol Stack Input Grammar


)$ S → X $ (1)
X → (X ) (2)
s2 X X → ( ) (3)
s0 (
Step
p Three: Use Goto,, Push New State
ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

State Stack Symbol Stack Input Grammar


)$ S → X $ (1)
s3 X → (X ) (2)
s2 X X → ( ) (3)
s0 (
Parse Table In Action
ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

State Stack Symbol Stack Input Grammar


)$ S → X $ (1)
s3 X → (X ) (2)
s2 X X → ( ) (3)
s0 (
Parse Table In Action
ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

State Stack Symbol Stack Input Grammar


s4 $ S → X $ (1)
s3 ) X → (X ) (2)
s2 X X → ( ) (3)
s0 (
Parse Table In Action
ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

State Stack Symbol Stack Input Grammar


s4 $ S → X $ (1)
s3 ) X → (X ) (2)
s2 X X → ( ) (3)
s0 (
Step
p One: Pop
p Stacks
ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

State Stack Symbol Stack Input Grammar


s4 $ S → X $ (1)
s3 ) X → (X ) (2)
s2 X X → ( ) (3)
s0 (
Step
p One: Pop
p Stacks
ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

State Stack Symbol Stack Input Grammar


$ S → X $ (1)
X → (X ) (2)
X → ( ) (3)
s0
Step
p Two: Push Nonterminal
ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

State Stack Symbol Stack Input Grammar


$ S → X $ (1)
X → (X ) (2)
X → ( ) (3)
s0
Step
p Two: Push Nonterminal
ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

State Stack Symbol Stack Input Grammar


$ S → X $ (1)
X → (X ) (2)
X → ( ) (3)
s0 X
Step
p Three: Use Goto,, Push New State
ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

State Stack Symbol Stack Input Grammar


$ S → X $ (1)
X → (X ) (2)
X → ( ) (3)
s0 X
Step
p Three: Use Goto,, Push New State
ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

State Stack Symbol Stack Input Grammar


$ S → X $ (1)
X → (X ) (2)
s1 X → ( ) (3)
s0 X
Accept
p the String!
g
ACTION Goto
State ( ) $ X
s0 shift to s2 error error goto s1
s1 error error accept
s2 shift to s2 shift to s5 error goto s3
s3
3 error shift
hift tto s4
4 error
s4 reduce (2) reduce (2) reduce (2)
s5 reduce (3) reduce (3) reduce (3)

State Stack Symbol Stack Input Grammar


$ S → X $ (1)
X → (X ) (2)
s1 X → ( ) (3)
s0 S
Key Concepts

• Pushdown automaton for parsing


• Stack,
St k FiFinite
it state
t t control
t l
• Parse actions: shift, reduce, accept
• Parse table for ccontrolling parser aactions
• Indexed by parser state and input symbol
• Entries sspecify
pecify action and n
next
ext sstate
tate
• Use state stack to help control
• Parse tree construction
• Reads input from left to right
• Bottom
Bottom-upup construction of parse tree
MIT OpenCourseWare
http://ocw.mit.edu

6.035 Computer Language Engineering


Spring 2010

For information about citing these materials or our Terms of Use, visit: http://ocw.mit.edu/terms.

You might also like