Download presentation
Presentation is loading. Please wait.
1
CH4.1 CSE244 Sections 4.5,4.6 Aggelos Kiayias Computer Science & Engineering Department The University of Connecticut 371 Fairfield Road, Box U-155 Storrs, CT 06269-1155 aggelos@cse.uconn.edu http://www.cse.uconn.edu/~akiayias
2
CH4.2 CSE244 Bottom Up Parsing “Shift-Reduce” Parsing Reduce a string to the start symbol of the grammar. At every step a particular substring is matched (in left-to-right fashion) to the right side of some production and then it is substituted by the non- terminal in the left hand side of the production. Consider: S aABe A Abc | b B d abbcde aAbcde aAde aABe S Rightmost Derivation: S aABe aAde aAbcde abbcde
3
CH4.3 CSE244Handles Handle of a string = substring that matches the RHS of some production AND whose reduction to the non-terminal on the LHS is a step along the reverse of some rightmost derivation. Formally: handle of a right sentential form is that satisfies the above property. i.e. A i.e. A is a handle of at the location immediately after the end of , if: S => A => A certain sentential form may have many different handles. Right sentential forms of a non-ambiguous grammar have one unique handle * rm
4
CH4.4 CSE244Example S aABe aAde aAbcde abbcde Consider: S aABe A Abc | b B d It follows that: S aABe is a handle of aABe in location 1. B d is a handle of aAde in location 3. A Abc is a handle of aAbcde in location 2. A b is a handle of abbcde in location 2.
5
CH4.5 CSE244 Handle Pruning A rightmost derivation in reverse can be obtained by “handle-pruning.” Apply this to the previous example. S aABe A Abc | b B d abbcde Find the handle = b at loc. 2 aAbcde b at loc. 3 is not a handle: aAAcde... blocked. Also Consider: E E + E | E * E | | ( E ) | id Derive id+id*id By two different Rightmost derivations
6
CH4.6 CSE244 Handle Pruning, II Consider the cut of a parse-tree of a certain right sentential form. S A Left part Handle (only terminals here) Viable prefix
7
CH4.7 CSE244 Shift Reduce Parsing with a Stack Two problems:locate a handle and decide which production to use (if there are more than two candidate productions). General Construction: using a stack: 1. “shift” input symbols into the stack until a handle is found on top of it. 2. “reduce” the handle to the corresponding non- terminal. (other operations: “accept” when the input is consumed and only the start symbol is on the stack, also: “error”).
8
CH4.8 CSE244Example $ $ id $E id + id * id$ + id * id$ STACKINPUTRemark Shift E E + E | E * E | ( E ) | id Reduce by E id
9
CH4.9 CSE244 More on Shift-Reduce Parsing Viable prefix: prefix of a right sentential form that appears on the stack of a Shift-Reduce parser. Conflicts either “shift/reduce” or “reduce/reduce” Example: stmt if expr then stmt | if expr then stmt else stmt | other (any other statement) StackInput if … thenelse … Shift/ Reduce conflict
10
CH4.10 CSE244 More Conflicts stmt id ( parameter-list ) stmt expr := expr parameter-list parameter-list, parameter | parameter parameter id expr-list expr-list, expr | expr expr id | id ( expr-list ) Consider the string A(I,J) Corresponding token stream is id(id, id) After three shifts: Stack = id(idInput =, id) Reduce/Reduce Conflict … what to do? (it really depends on what is A, an array? or a procedure?
11
CH4.11 CSE244 Operator-Precedence Parsing Operator Grammars: no production right side is or has two adjacent non-terminals. Consider: E EAE | - E | ( E ) | id A - | + | * | / | ^ Not an operator grammar, but: E E - E | E + E | E * E | E / E | E ^ E | - E | ( E ) | id
12
CH4.12 CSE244 Basic Technique For the terminals of the grammar, define the relations and.=. a <. b means that a yields precedence to b a.=. b means that a has the same precedence as b. a.> b means hat a takes precedence over b E.g. *.> + or + + or + <. *
13
CH4.13 CSE244 Using Operator-Precedence Relations GOAL: delimit the handle of a right sentential form will mark the end and.=. will be in between. Since no two adjacent non-terminals appear in the RHS of any production, the same is true for any any sentential form. So given a 1 a 2 a n So given 0 a 1 1 a 2 2 … a n n where each i is either a nonterminal or the empty string. We drop all non-terminals and we write the corresponding relation between each consecutive pair of terminals. example for $id+id*id$ using standard precedence: $ + * $ Example for $E+E*id$ … $ $
14
CH4.14 CSE244 Using Operator-Precedence … Then 1. Scan the string to discover the first.> 2. Scan backwards skipping.=. (if any) until a $ The handle is E*E
15
CH4.15 CSE244 Operator Precedence Parser Set ip to point to the first symbol of w$ Stack=$ Repeat forever: if $==topofstack and ip==$ then accept Else { a=topofstack; b=ip; if a<.b or a.=.b then push(b);advance ip; if a.>b then repeat pop() until the top stack terminal is related by <. else error
16
CH4.16 CSE244Example $ $ id $ $ + $ + id $ + $ + * $ + * id $ + * $ + $ id + id * id$ + id * id$ id * id$ * id$ id$ $ STACKINPUTRemark $. + $ * + $ *.> $ +.> $ accept A sequence of pops corresponds to the application of some of the productions
17
CH4.17 CSE244 Operator Precedence Table Construction Basic techniques for operators: if operator 1 has higher precedence than 2 then set 1.> 2 If the operators are of equal precedence (or the same operator) set 1.> 2 and 2.> 1 if the operators associate to the left set 1 <. 2 and 2 <. 1 if the operators associate to the right Make and .>) id has higher precedence than any other symbol $ has lowest precedence.
18
CH4.18 CSE244 Unary Operators Unary operators that are not also used as binary operators are treated as before. Problem: the – sign. Typical solution: have the lexical analyzer return a different token when it sees a unary minus.
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.