Pushdown Automata • Consists of – Pushdown stack (can have terminals and nonterminals) – Finite state automaton control • Can do one of three actions (based on state and input): – Shift: Move current input 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 the input string
58
Embed
Pushdown Automata Consists of –Pushdown stack (can have terminals and nonterminals) –Finite state automaton control Can do one of three actions (based.
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Pushdown Automata• Consists of
– Pushdown stack (can have terminals and nonterminals)
– Finite state automaton control
• Can do one of three actions (based on state and input):– Shift: Move current input 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 the input string
Shift-Reduce Parser Example
* ( + num )numnum
Expr Expr Op Expr Expr (Expr)Expr - Expr
Expr numOp +Op -Op *
Stack
Tokenized Input String 5*(2+3)
Shift-Reduce Parser Example
* ( + num )numnum
Expr Expr Op Expr Expr (Expr)Expr - Expr
Expr numOp +Op -Op *
Grammar Rules
SHIFT
Shift-Reduce Parser Example
* ( + num )numnum
Expr Expr Op Expr Expr (Expr)Expr - Expr
Expr numOp +Op -Op *
SHIFT
Shift-Reduce Parser Example
* ( + num )num
num
Expr Expr Op Expr Expr (Expr)Expr - Expr
Expr numOp +Op -Op *
Shift-Reduce Parser Example
* ( + num )num
num
Expr Expr Op Expr Expr (Expr)Expr - Expr
Expr numOp +Op -Op *
REDUCE
Shift-Reduce Parser Example
* ( + num )num
num
Expr Expr Op Expr Expr (Expr)Expr - Expr
Expr numOp +Op -Op *
REDUCE
Expr
Shift-Reduce Parser Example
* ( + num )num
num
Expr Expr Op Expr Expr (Expr)Expr - Expr
Expr numOp +Op -Op *
Expr
SHIFT
Shift-Reduce Parser Example
( + num )num
num
Expr Expr Op Expr Expr (Expr)Expr - Expr
Expr numOp +Op -Op *
Expr
SHIFT
*
Shift-Reduce Parser Example
( + num )num
num
Expr Expr Op Expr Expr (Expr)Expr - Expr
Expr numOp +Op -Op *
Expr
Op
REDUCE
*
Shift-Reduce Parser Example
( + num )num
num
Expr Expr Op Expr Expr (Expr)Expr - Expr
Expr numOp +Op -Op *
Expr
Op
*SHIFT
Shift-Reduce Parser Example
+ num )num
num
Expr Expr Op Expr Expr (Expr)Expr - Expr
Expr numOp +Op -Op *
Expr
Op
*SHIFT
(
Shift-Reduce Parser Example
+ num )num
num
Expr Expr Op Expr Expr (Expr)Expr - Expr
Expr numOp +Op -Op *
Expr
Op
*SHIFT
(
Shift-Reduce Parser Example
+ num )
num
Expr Expr Op Expr Expr (Expr)Expr - Expr
Expr numOp +Op -Op *
Expr
Op
*SHIFT
(
num
Shift-Reduce Parser Example
+ num )
num
Expr Expr Op Expr Expr (Expr)Expr - Expr
Expr numOp +Op -Op *
Expr
Op
*SHIFT
(
num
REDUCE
Expr
Shift-Reduce Parser Example
+ num )
num
Expr Expr Op Expr Expr (Expr)Expr - Expr
Expr numOp +Op -Op *
Expr
Op
*SHIFT
(
num
Expr
Shift-Reduce Parser Example
num )
num
Expr Expr Op Expr Expr (Expr)Expr - Expr
Expr numOp +Op -Op *
Expr
Op
*SHIFT
(
num
Expr
+
Shift-Reduce Parser Example
num )
num
Expr Expr Op Expr Expr (Expr)Expr - Expr
Expr numOp +Op -Op *
Expr
Op
*SHIFT
(
num
Expr
Op
REDUCE
+
Shift-Reduce Parser Example
num )
num
Expr Expr Op Expr Expr (Expr)Expr - Expr
Expr numOp +Op -Op *
Expr
Op
*SHIFT
(
num
Expr
Op
+
Shift-Reduce Parser Example
)
num
Expr Expr Op Expr Expr (Expr)Expr - Expr
Expr numOp +Op -Op *
Expr
Op
*SHIFT
(
num
Expr
num
Op
+
Shift-Reduce Parser Example
)
num
Expr Expr Op Expr Expr (Expr)Expr - Expr
Expr numOp +Op -Op *
Expr
Op
*SHIFT
(
num
Expr
Op
+
Expr
REDUCE
num
Shift-Reduce Parser Example
)
num
Expr Expr Op Expr Expr (Expr)Expr - Expr
Expr numOp +Op -Op *
Expr
Op
*SHIFT
(
num +
REDUCE
num
Expr
Expr
Op
ExprExpr
Shift-Reduce Parser Example
)
num
Expr Expr Op Expr Expr (Expr)Expr - Expr
Expr numOp +Op -Op *
Expr
Op
*SHIFT
(
num
Expr
Op
+
Expr
num
Expr
Shift-Reduce Parser Example
num
Expr Expr Op Expr Expr (Expr)Expr - Expr
Expr numOp +Op -Op *
Expr
Op
*SHIFT
(
num
Expr
Op
+
Expr
num
Expr
)
REDUCE
Shift-Reduce Parser Example
num
Expr Expr Op Expr Expr (Expr)Expr - Expr
Expr numOp +Op -Op *
Expr
Op
*
(
num
Expr
Op
+
Expr
num
Expr
)Expr
REDUCE
Shift-Reduce Parser Example
num
Expr Expr Op Expr Expr (Expr)Expr - Expr
Expr numOp +Op -Op *Expr
Op
*
(
num
Expr
Op
+
Expr
num
Expr
)Expr
Expr
ACCEPT!
Shift-Reduce Parser Example
num
Expr Expr Op Expr Expr (Expr)Expr - Expr
Expr numOp +Op -Op *Expr
Op
*
(
num
Expr
Op
+
Expr
num
Expr
)Expr
Expr
*
num:5
num:2
+
num:3
Input String
5 * (2 + 3)
Basic Idea
• Goal: reconstruct parse tree for input string
• Read input from left to right• Build tree in a bottom-up fashion
• Use stack to hold pending sequences of terminals and nonterminals
Potential Conflicts
• Reduce/Reduce Conflict– Top of the stack may match RHS of multiple 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
Expr Expr Op ExprExpr (Expr)
Expr - ExprExpr numOp +Op - Op *
•Original GrammarExpr Expr Op ExprExpr Expr - ExprExpr (Expr)
Expr Expr - Expr numOp +Op - Op *
•New Grammar
Conflicts
- numnum
Expr Expr Op ExprExpr Expr - Expr
Expr (Expr)Expr Expr -
Expr numOp +Op -Op *
Conflicts
- numnum
SHIFT
Expr Expr Op ExprExpr Expr - Expr
Expr (Expr)Expr Expr -
Expr numOp +Op -Op *
Conflicts
- num
SHIFT
num
Expr Expr Op ExprExpr Expr - Expr
Expr (Expr)Expr Expr -
Expr numOp +Op -Op *
Conflicts
- num
SHIFT
Expr
REDUCE
num
Expr Expr Op ExprExpr Expr - Expr
Expr (Expr)Expr Expr -
Expr numOp +Op -Op *
Conflicts
- num
SHIFT
Expr
num
Expr Expr Op ExprExpr Expr - Expr
Expr (Expr)Expr Expr -
Expr numOp +Op -Op *
Conflicts
num
SHIFT
Expr
num
-
Expr Expr Op ExprExpr Expr - Expr
Expr (Expr)Expr Expr -
Expr numOp +Op -Op *
Shift/Reduce/Reduce Conflict
num
Expr
num
-
Expr Expr Op ExprExpr Expr - Expr
Expr (Expr)Expr Expr -
Expr numOp +Op -Op *
Options:ShiftReduceReduce
Shift/Reduce/Reduce Conflict
num
Expr
num
-
Expr Expr Op ExprExpr Expr - Expr
Expr (Expr)Expr Expr -
Expr numOp +Op -Op *
What Happens if Choose
Reduce
REDUCE
Shift/Reduce/Reduce Conflict
num
Expr
num -
Expr Expr Op ExprExpr Expr - Expr
Expr (Expr)Expr Expr -
Expr numOp +Op -Op *
What Happens if Choose
Reduce
SHIFT
Expr
Shift/Reduce/Reduce Conflict
Expr
num -
Expr Expr Op ExprExpr Expr - Expr
Expr (Expr)Expr Expr -
Expr numOp +Op -Op *
What Happens if Choose
Reduce
SHIFT
Expr
num
Shift/Reduce/Reduce Conflict
Expr
num -
Expr Expr Op ExprExpr Expr - Expr
Expr (Expr)Expr Expr -
Expr numOp +Op -Op *
What Happens if Choose
Reduce
REDUCE
Expr
Expr
num
Shift/Reduce/Reduce Conflict
Expr
num -
Expr Expr Op ExprExpr Expr - Expr
Expr (Expr)Expr Expr -
Expr numOp +Op -Op *
What Happens if Choose
Reduce
FAILS!
Expr
Expr
num
Shift/Reduce/Reduce Conflict
num
Expr
num
-
Expr Expr Op ExprExpr Expr - Expr
Expr (Expr)Expr Expr -
Expr numOp +Op -Op *
Both of These Actions Work
ReduceShift
Shift/Reduce/Reduce Conflict
num
Expr
num
-
Expr Expr Op ExprExpr Expr - Expr
Expr (Expr)Expr Expr -
Expr numOp +Op -Op *
What Happens if Choose
Reduce
Shift/Reduce/Reduce Conflict
num
Expr
num
Op
Expr Expr Op ExprExpr Expr - Expr
Expr (Expr)Expr Expr -
Expr numOp +Op -Op *
What Happens if Choose
Reduce
-
REDUCE
Shift/Reduce/Reduce Conflict
Expr
num
Op
Expr Expr Op ExprExpr Expr - Expr
Expr (Expr)Expr Expr -
Expr numOp +Op -Op *
What Happens if Choose
Reduce
-
SHIFT
num
Shift/Reduce/Reduce Conflict
Expr
num
Op
Expr Expr Op ExprExpr Expr - Expr
Expr (Expr)Expr Expr -
Expr numOp +Op -Op *
What Happens if Choose
Reduce
-
REDUCE
Expr
num
Shift/Reduce/Reduce Conflict
Expr
num
Op
Expr Expr Op ExprExpr Expr - Expr
Expr (Expr)Expr Expr -
Expr numOp +Op -Op *
What Happens if Choose
Reduce
-
REDUCE
Expr
num
Expr
Shift/Reduce/Reduce Conflict
Expr
num
Op
Expr Expr Op ExprExpr Expr - Expr
Expr (Expr)Expr Expr -
Expr numOp +Op -Op *
What Happens if Choose
Reduce
-
ACCEPT
Expr
num
Expr
num
Expr
num
-
Expr Expr Op ExprExpr Expr - Expr
Expr (Expr)Expr Expr -
Expr numOp +Op -Op *
SHIFT
Conflicts
What Happens if Choose
Shift
Expr
num
-
Expr Expr Op ExprExpr Expr - Expr
Expr (Expr)Expr Expr -
Expr numOp +Op -Op *
SHIFT
num
Conflicts
What Happens if Choose
Shift
Expr
num
-
Expr Expr Op ExprExpr Expr - Expr
Expr (Expr)Expr Expr -
Expr numOp +Op -Op *
REDUCE
Expr
Conflicts
num
What Happens if Choose
Shift
Expr
num -
Expr Expr Op ExprExpr Expr - Expr
Expr (Expr)Expr Expr -
Expr numOp +Op -Op *
REDUCE
Expr
Conflicts
num
Expr
What Happens if Choose
Shift
Expr
num -
Expr Expr Op ExprExpr Expr - Expr
Expr (Expr)Expr Expr -
Expr numOp +Op -Op *
ACCEPT
Expr
Conflicts
num
Expr
What Happens if Choose
Shift
Shift/Reduce/Reduce Conflict
num
Expr
num
-
Expr Expr Op ExprExpr Expr - Expr
Expr (Expr)Expr Expr -
Expr numOp +Op -Op *
This Shift/Reduce Conflict Reflects Ambiguity in Grammar
Shift/Reduce/Reduce Conflict
num
Expr
num
-
Expr Expr Op ExprExpr Expr - Expr
Expr (Expr)Expr Expr -
Expr numOp +Op -Op *
This Shift/Reduce Conflict Reflects Ambiguity in Grammar
Eliminate by HackingGrammar
Shift/Reduce/Reduce Conflict
num
Expr
num
-
Expr Expr Op ExprExpr Expr - Expr
Expr (Expr)Expr Expr -
Expr numOp +Op -Op *
This Shift/Reduce Conflict Can Be Eliminated By Lookahead of One Symbol