5. Bottom-Up Parsing

5. Bottom-Up Parsing

1 5. Bottom-Up Parsing • LR methods (Left-to-right, Rightmost derivation) – SLR, Canonical LR, LALR • Other special cases: – Shift-reduce parsing – Operator-precedence parsing 2 Shift-Reduce Parsing Grammar: Reducing a sentence: Shift-reduce corresponds S a A B e a b b c d e to a rightmost derivation: A A b c | b a A b c d e S rm a A B e B d a A de rm a A d e a A B e rm a A b c d e These match S rm a b b c d e production’s right-hand sides S A A A A A A B A B a b b c d e a b b c d e a b b c d e a b b c d e 3 Handles A handle is a substring of grammar symbols in a right-sentential form that matches a right-hand side of a production Grammar: a b b c d e S a A B e a A b c d e A A b c | b a A de Handle B d a A B e S a b b c d e a A b c d e NOT a handle, because a A A e further reductions will fail … ? (result is not a sentential form) 4 Stack Implementation of Shift-Reduce Parsing Stack Input Action $ id+id*id$ shift $id +id*id$ reduce E id How to $E +id*id$ shift Grammar: resolve E E + E $E+ id*id$ shift $E+id *id$ conflicts? E E * E reduce E id $E+E *id$ shift (or reduce?) E ( E ) $E+E* id$ shift E id $E+E*id $ reduce E id $E+E*E $ reduce E E * E $E+E $ reduce E E + E Found handles $E $ accept to reduce 5 Conflicts • Shift-reduce and reduce-reduce conflicts are caused by – The limitations of the LR parsing method (even when the grammar is unambiguous) – Ambiguity of the grammar 6 Shift-Reduce Parsing: Shift-Reduce Conflicts Stack Input Action $… …$ … $…if E then S else…$ shift or reduce? Ambiguous grammar: S if E then S | if E then S else S | other Resolve in favor of shift, so else matches closest if 7 Shift-Reduce Parsing: Reduce-Reduce Conflicts Stack Input Action $ aa$ shift $a a$ reduce A a or B a ? Grammar: C A B A a B a Resolve in favor of reducing A a, otherwise we’re stuck! 8 6. LR Parsing: Simple LR • LR(k) parsing – From left to right scanning of the input – Rightmost derivation in reverse – k lookahead symbols, only consider k=0, or 1 • Why LR Parsers – Can recognize virtually all programming language constructs – the most general nonbacktracking shift-reduce parsing method – Can detect a syntactic error as soon as possible – Powerful than LL parsing methods 9 LR(0) Items of a Grammar • An LR(0) item of a grammar G is a production of G with a • at some position of the right-hand side • Thus, a production A X Y Z has four items: [A • X Y Z] [A X • Y Z] [A X Y • Z] [A X Y Z •] • Note that production A has one item [A •] 10 The closure Operation for LR(0) Items 1. Start with closure(I) = I 2. If [A•B] closure(I) then for each production B in the grammar, add the item [B•] to I if not already in I 3. Repeat 2 until no new items can be added 11 The closure Operation Example closure({[E’ •E]}) = { [E’ • E] } { [E’ • E] { [E’ • E] { [E’ • E] [E • E + T] [E • E + T] [E • E + T] [E • T]} [E • T] [E • T] [T • T * F] [T • T * F] Add [E•] [T • F] } [T • F] Add [T•] [F • ( E )] Grammar: Add [F•] [F • id] } E E + T | T T T * F | F F ( E ) F id 12 The goto Operation for LR(0) Items 1. For each item [A•X] I, add the set of items closure({[AX•]}) to goto(I,X) if not already there 2. Repeat step 1 until no more items can be added to goto(I,X) • Intuitively, the goto function is used to define the transitions in the LR(0) automaton for a grammar. • The states of the automaton correspond to sets of items, and goto(I, X) specifies the transition from the state for I under input X. 13 The goto Operation Example 1 Suppose Then goto(I, E) = closure({[E’ E •, E E • + T]}) I = { [E’ • E] [E • E + T] ={ [E’ E •], [E E • + T] } [E • T] [T • T * F] [T • F] Grammar: [F • ( E )] E E + T | T [F • id] } T T * F | F F ( E ) F id 14 The goto Operation Example 2 Suppose I = { [E’ E •], [E E • + T]} Then goto(I,+) = closure({[E E + • T]}) = { [E E + • T] [T • T * F] [T • F] Grammar: [F • ( E )] E E + T | T [F • id] } T T * F | F F ( E ) F id 15 Constructing the Canonical LR(0) Collection of a Grammar 1. The grammar is augmented with a new start symbol S’ and production S’S 2. Initially, set C ={ closure({[S’•S]}) } (this is the start state of the DFA) 3. For each set of items I C and each grammar symbol X (NT) such that goto(I,X) C and goto(I,X) , add the set of items goto(I,X) to C 4. Repeat 3 until no more sets can be added to C 16 LR(0) Automaton for Grammar: E E + T | T T T * F | F F ( E ) F id 17 Use of the LR(0) Automaton The following Figure shows the actions of a shift-reduce parser on input id * id, using the LR(0) automaton shown on previous slide. 18 LR(k) Parsers: Use a DFA for Shift/Reduce Decisions 1 Use of the LR(0) Automaton C B 4 start A 0 2 State I1: a State I4: a 5 S C• goto(I0,C) C A B• 3 Grammar: goto(I ,B) State I0: 2 S C State I2: S •C goto(I0,A) C A B C A•B C •A B A a B •a A •a goto(I2,a) B a State I : Can only goto(I0,a) State I : 5 3 B a• reduce A a A a• (not B a) 19 DFA for Shift/Reduce Decisions The states of the DFA are used to determine Grammar: if a handle is on top of the stack S C C A B Stack Symbols Input Action aa$ shift to 3 A a 0 $ 0 3 $a a$ reduce A a B a 0 2 $A a$ shift to 5 0 2 5 $Aa $ reduce B a goto(I ,a) $AB $ reduce C AB State I0: 0 0 2 4 0 1 $C $ accept (S C) S •C State I3: C •A B A a• A •a 20 DFA for Shift/Reduce Decisions The states of the DFA are used to determine Grammar: if a handle is on top of the stack S C C A B Stack Symbols Input Action aa$ shift to 3 A a 0 $ 0 3 $a a$ reduce A a B a 0 2 $A a$ shift to 5 0 2 5 $Aa $ reduce B a 0 2 4 $AB $ reduce C AB goto(I0,A) State I0: 0 1 $C $ accept (S C) S •C State I2: C •A B C A•B A •a B •a 21 DFA for Shift/Reduce Decisions The states of the DFA are used to determine Grammar: if a handle is on top of the stack S C C A B Stack Symbols Input Action aa$ shift to 3 A a 0 $ 0 3 $a a$ reduce A a B a 0 2 $A a$ shift to 5 0 2 5 $Aa $ reduce B a 0 2 4 $AB $ reduce C AB 0 1 $C $ accept (S C) goto(I2,a) State I2: C A•B State I5: B •a B a• 22 DFA for Shift/Reduce Decisions The states of the DFA are used to determine Grammar: if a handle is on top of the stack S C C A B Stack Symbols Input Action aa$ shift to 3 A a 0 $ 0 3 $a a$ reduce A a B a 0 2 $A a$ shift to 5 0 2 5 $Aa $ reduce B a 0 2 4 $AB $ reduce C AB 0 1 $C $ accept (S C) goto(I2,B) State I2: C A•B State I4: B •a C A B• 23 DFA for Shift/Reduce Decisions The states of the DFA are used to determine Grammar: if a handle is on top of the stack S C C A B Stack Symbols Input Action aa$ shift to 3 A a 0 $ 0 3 $a a$ reduce A a B a 0 2 $A a$ shift to 5 0 2 5 $Aa $ reduce B a 0 2 4 $AB $ reduce C AB 0 1 $C $ accept (S C) goto(I0,C) State I0: S •C State I1: C •A B S C• A •a 24 DFA for Shift/Reduce Decisions The states of the DFA are used to determine Grammar: if a handle is on top of the stack S C C A B Stack Symbols Input Action aa$ shift to 3 A a 0 $ 0 3 $a a$ reduce A a B a 0 2 $A a$ shift to 5 0 2 5 $Aa $ reduce B a 0 2 4 $AB $ reduce C AB 0 1 $C $ accept (S C) goto(I0,C) State I0: S •C State I1: C •A B S C• A •a 25 Model of an LR Parser input a1 a2 … ai … an $ stack LR Parsing Program sm (driver) output sm-1 action goto Constructed with … LR(0) method, shift DFA SLR method, s0 reduce LR(1) method, or accept LALR(1) method error 26 LR Parsing (Driver) X1 X2 … Xm ai ai+1 … an right-sentential form Configuration ( = LR parser state): (s0 s1 s2 … sm, ai ai+1 … an $) stack input If action[sm,ai] = shift s then push s, and advance input: (s0 s1s2 … sm s, ai+1 … an $) If action[sm,ai] = reduce A and goto[sm-r,A] = s with r=|| then pop r symbols, and push s: (s0 s1 s2 … sm-r s, ai ai+1 … an $) If action[sm,ai] = accept then stop If action[sm,ai] = error then attempt recovery 27 Example LR(0) Parsing Table State I0: State I1: State I2: State I3: State I4: State I5: C’ •C C’ C• C A•B A a• C A B• B a• C •A B B •a A •a action goto Shift & goto 3 state a $ C A B 1 0 s3 1 2 Grammar: C 1 acc B 4 1.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    66 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us