Presentation is loading. Please wait.

Presentation is loading. Please wait.

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,

Similar presentations


Presentation on theme: "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,"— Presentation transcript:

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.


Download ppt "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,"

Similar presentations


Ads by Google