sections 4.5,4.6

18
CH4.1 CSE244 Sections 4.5,4.6 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 [email protected] http://www.cse.uconn.edu/~akiayias

Upload: lanai

Post on 04-Jan-2016

16 views

Category:

Documents


1 download

DESCRIPTION

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. [email protected] http://www.cse.uconn.edu/~akiayias. Bottom Up Parsing. “Shift-Reduce” Parsing - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Sections 4.5,4.6

CH4.1

CSE244

Sections 4.5,4.6Sections 4.5,4.6

Aggelos KiayiasComputer Science & Engineering Department

The University of Connecticut371 Fairfield Road, Box U-155

Storrs, CT [email protected]

http://www.cse.uconn.edu/~akiayias

Page 2: Sections 4.5,4.6

CH4.2

CSE244

Bottom Up ParsingBottom Up Parsing

““Shift-Reduce” ParsingShift-Reduce” Parsing Reduce a string to the start symbol of the grammar.Reduce a string to the start symbol of the grammar. At every step a particular substring is matched (in At every step a particular substring is matched (in

left-to-right fashion) to the right side of some left-to-right fashion) to the right side of some production and then it is substituted by the non-production and then it is substituted by the non-terminal in the left hand side of the production. terminal in the left hand side of the production.

Consider: S aABe A Abc | b B d

abbcdeaAbcdeaAdeaABeS

Rightmost Derivation:S aABe aAde aAbcde abbcde

Page 3: Sections 4.5,4.6

CH4.3

CSE244

HandlesHandles

Handle of a string = substring that matches the Handle of a string = substring that matches the RHS of some production AND whose reduction to RHS of some production AND whose reduction to the non-terminal on the LHS is a step along the the non-terminal on the LHS is a step along the reverse of some rightmost derivation.reverse of some rightmost derivation.

Formally: handle of a right sentential form Formally: handle of a right sentential form is <A is <A , location of in > that satisfies the above property.

i.e. i.e. AA 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 rm

Page 4: Sections 4.5,4.6

CH4.4

CSE244

ExampleExample

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.

Page 5: Sections 4.5,4.6

CH4.5

CSE244

Handle PruningHandle Pruning

A rightmost derivation in reverse can be obtained A rightmost derivation in reverse can be obtained by “handle-pruning.”by “handle-pruning.”

Apply this to the previous example.Apply this to the previous example.S aABeA Abc | bB d

abbcdeFind the handle = b at loc. 2aAbcdeb at loc. 3 is not a handle:aAAcde... blocked.

Also Consider:E E + E | E * E | | ( E ) | id

Derive id+id*idBy two different Rightmost derivations

Page 6: Sections 4.5,4.6

CH4.6

CSE244

Handle Pruning, IIHandle Pruning, II

Consider the cut of a parse-tree of a certain right Consider the cut of a parse-tree of a certain right sentential form.sentential form.

S

A

Left part Handle (only terminals here)

Viable prefix

Page 7: Sections 4.5,4.6

CH4.7

CSE244

Shift Reduce Parsing with a StackShift Reduce Parsing with a Stack

Two problems:locate a handle Two problems:locate a handle and decide which production to use (if there are and decide which production to use (if there are more than two candidate productions).more than two candidate productions).

General Construction:General Construction:using a stack: using a stack: 1. “shift” input symbols into the stack until a 1. “shift” input symbols into the stack until a handle is found on top of it.handle is found on top of it.2. “reduce” the handle to the corresponding non-2. “reduce” the handle to the corresponding non-terminal.terminal.(other operations: “accept” when the input is (other operations: “accept” when the input is consumed and only the start symbol is on the stack, consumed and only the start symbol is on the stack, also: “error”).also: “error”).

Page 8: Sections 4.5,4.6

CH4.8

CSE244

ExampleExample

$$ id $E

id + id * id$

+ id * id$ + id * id$

STACK INPUT Remark

Shift

E E + E | E * E

| ( E ) | idReduce by E id

Page 9: Sections 4.5,4.6

CH4.9

CSE244

More on Shift-Reduce ParsingMore on Shift-Reduce Parsing

Viable prefix: prefix of a right sentential form that Viable prefix: prefix of a right sentential form that appears on the stack of a Shift-Reduce parser.appears on the stack of a Shift-Reduce parser.

ConflictsConflictseither “shift/reduce” or “reduce/reduce”either “shift/reduce” or “reduce/reduce”

Example:Example:

stmt if expr then stmt

| if expr then stmt else stmt

| other (any other statement)

Stack Inputif … then else … Shift/ Reduce

conflict

Page 10: Sections 4.5,4.6

CH4.10

CSE244

More ConflictsMore 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(id Input = , id)

Reduce/Reduce Conflict … what to do?(it really depends on what is A,an array? or a procedure?

Page 11: Sections 4.5,4.6

CH4.11

CSE244

Operator-Precedence ParsingOperator-Precedence Parsing

Operator Grammars: no production right side is Operator Grammars: no production right side is or has two adjacent non-terminals.or has two adjacent non-terminals.

Consider:E EAE | - E | ( E ) | idA - | + | * | / | ^

Not an operator grammar, but:

E E - E | E + E | E * E | E / E | E ^ E | - E | ( E ) | id

Page 12: Sections 4.5,4.6

CH4.12

CSE244

Basic TechniqueBasic Technique

For the terminals of the grammar,For the terminals of the grammar,define the relations <. .> and .=.define the relations <. .> and .=.

a <. b means that a yields precedence to ba <. b means that a yields precedence to b a .=. b means that a has the same precedence as b.a .=. b means that a has the same precedence as b. a .> b means hat a takes precedence over ba .> b means hat a takes precedence over b E.g. * .> + or + <. * E.g. * .> + or + <. *

Page 13: Sections 4.5,4.6

CH4.13

CSE244

Using Operator-Precedence RelationsUsing Operator-Precedence Relations

GOAL: delimit the handle of a right sentential formGOAL: delimit the handle of a right sentential form <. will mark the beginning, .> will mark the end <. will mark the beginning, .> will mark the end

and .=. will be in between.and .=. will be in between. Since no two adjacent non-terminals appear in the Since no two adjacent non-terminals appear in the

RHS of any production, the same is true for any RHS of any production, the same is true for any any sentential form.any sentential form.

So given So given 0 a a1 1 1 aa22 2 … aann 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:

$<.id.>+<.id.>*<.id.>$ Example for $E+E*id$ … $<.+<.*<.id.>$

Page 14: Sections 4.5,4.6

CH4.14

CSE244

Using Operator-PrecedenceUsing Operator-Precedence

… … ThenThen1. Scan the string to discover the first .>1. Scan the string to discover the first .>2. Scan backwards skipping .=. (if any) until a <. is 2. Scan backwards skipping .=. (if any) until a <. is found.found.3. The handle is the substring delimited by the two 3. The handle is the substring delimited by the two steps above (including any in-between or steps above (including any in-between or surrounding non-terminals).surrounding non-terminals).E.g. E.g. Consider the sentential form E+E*EConsider the sentential form E+E*Ewe obtain $+*$ and from this the stringwe obtain $+*$ and from this the string$<. + <. * .> $$<. + <. * .> $

The handle is E*EThe handle is E*E

Page 15: Sections 4.5,4.6

CH4.15

CSE244

Operator Precedence ParserOperator 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

Page 16: Sections 4.5,4.6

CH4.16

CSE244

ExampleExample

$$ id $$ + $ + id$ +$ + *$ + * id$ + *$ + $

id + id * id$

+ id * id$ + id * id$

id * id$* id$* id$

id$$$$$$

STACK INPUT Remark

$ <. idid >. +$ <. ++ <. idid .> *+ <. * * <. idid .> $* .> $+ .> $

accept

A sequence of pops corresponds to the

application of some of the productions

Page 17: Sections 4.5,4.6

CH4.17

CSE244

Operator Precedence Table ConstructionOperator Precedence Table Construction

Basic techniques for operators: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 leftset 1<. 2 and 2<. 1 if the operators associate to the right

Make <.( and (<. and ).> and .>) id has higher precedence than any other symbol $ has lowest precedence.

Page 18: Sections 4.5,4.6

CH4.18

CSE244

Unary OperatorsUnary Operators

Unary operators that are not also used as binary Unary operators that are not also used as binary operators are treated as before.operators are treated as before.

Problem: the – sign.Problem: the – sign. Typical solution: have the lexical analyzer return a Typical solution: have the lexical analyzer return a

different token when it sees a unary minus.different token when it sees a unary minus.