This preview shows pages 1–3. Sign up to view the full content.
This preview has intentionally blurred sections. Sign up to view the full version.View Full Document
Unformatted text preview: 1 Bottom-Up Parsing II Lecture 8 Prof. Aiken CS 143 Lecture 8 1 Review: Shift-Reduce Parsing Bottom-up parsing uses two actions: Shift ABC | xyz ABCx | yz Reduce Cbxy | ijk CbA | ijk Prof. Aiken CS 143 Lecture 8 2 Recall: The Stack • Left string can be implemented by a stack – Top of the stack is the | • Shift pushes a terminal on the stack • Reduce – pops 0 or more symbols off of the stack • production rhs – pushes a non-terminal on the stack • production lhs Prof. Aiken CS 143 Lecture 8 3 Key Issue • How do we decide when to shift or reduce? • Example grammar: E T + E | T T int * T | int | (E) • Consider step int | * int + int – We could reduce by T int giving T | * int + int – A fatal mistake! • No way to reduce to the start symbol E Prof. Aiken CS 143 Lecture 8 4 Handles • Intuition: Want to reduce only if the result can still be reduced to the start symbol • Assume a rightmost derivation S * X • Then is a handle of Prof. Aiken CS 143 Lecture 8 5 Handles (Cont.) • Handles formalize the intuition – A handle is a string that can be reduced and also allows further reductions back to the start symbol • We only want to reduce at handles • Note: We have said what a handle is, not how to find handles Prof. Aiken CS 143 Lecture 8 6 2 Important Fact #2 Important Fact #2 about bottom-up parsing: In shift-reduce parsing, handles appear only at the top of the stack, never inside Prof. Aiken CS 143 Lecture 8 7 Why? • Informal induction on # of reduce moves: • True initially, stack is empty • Immediately after reducing a handle – right-most non-terminal on top of the stack – next handle must be to right of right-most non- terminal, because this is a right-most derivation – Sequence of shift moves reaches next handle Prof. Aiken CS 143 Lecture 8 8 Summary of Handles • In shift-reduce parsing, handles always appear at the top of the stack • Handles are never to the left of the rightmost non-terminal – Therefore, shift-reduce moves are sufficient; the | need never move left • Bottom-up parsing algorithms are based on recognizing handles Prof. Aiken CS 143 Lecture 8 9 Recognizing Handles • There are no known efficient algorithms to recognize handles • Solution: use heuristics to guess which stacks are handles • On some CFGs, the heuristics always guess correctly – For the heuristics we use here, these are the SLR grammars – Other heuristics work for other grammars Prof. Aiken CS 143 Lecture 8 10 Grammars Prof. Aiken CS 143 Lecture 8 11 All CFGs Unambiguous CFGs SLR CFGs will generate conflicts Viable Prefixes • It is not obvious how to detect handles • At each step the parser sees only the stack, not the entire input; start with that . . ....
View Full Document
This document was uploaded on 04/06/2012.
- Fall '09