0% found this document useful (0 votes)
85 views95 pages

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
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
85 views95 pages

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
We take content rights seriously. If you suspect this is your content, claim it here.
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