ambiguity

19
CS 536 Spring 2001 1 Ambiguity Lecture 8

Upload: bruce-wade

Post on 31-Dec-2015

22 views

Category:

Documents


0 download

DESCRIPTION

Ambiguity. Lecture 8. Announcement. Reading Assignment “Context-Free Grammars” (Sections 4.1, 4.2) Programming Assignment 2 due Friday! Homework 1 due in a week (Wed Feb 21) not Feb 25!. Ambiguity = program structure not defined. String id * id + id has two parse trees:. E. E. E. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Ambiguity

CS 536 Spring 2001 1

Ambiguity

Lecture 8

Page 2: Ambiguity

CS 536 Spring 2001 2

Announcement

• Reading Assignment– “Context-Free Grammars” (Sections 4.1, 4.2)

• Programming Assignment 2– due Friday!

• Homework 1– due in a week (Wed Feb 21)– not Feb 25!

Page 3: Ambiguity

CS 536 Spring 2001 3

Ambiguity = program structure not defined

String id * id + id has two parse trees:

E

E

E E

E*

id +

idid

E

E

E E

E+

id*

idid

E E+E | E E | (E) | id

Page 4: Ambiguity

CS 536 Spring 2001 4

Ambiguity

• A grammar is ambiguous if, for any string– it has more than one parse tree, or– there is more than one right-most derivation, or– there is more than one left-most derivation.(the three conditions are equivalent)

• Ambiguity is BAD– Leaves meaning of some programs ill-defined

Page 5: Ambiguity

CS 536 Spring 2001 5

Dealing with Ambiguity

• There are several ways to handle ambiguity

• We’ll discuss two of them:– rewriting the grammar– parser-generator declarations

Page 6: Ambiguity

CS 536 Spring 2001 6

Outline

• Rewriting:– Expression Grammars

• precedence• associativity

– IF-THEN-ELSE• the Dangling-ELSE problem

• Declarations– Expression Grammars

• precedence• associativity

Page 7: Ambiguity

CS 536 Spring 2001 7

Expression Grammars (precedence)

• Rewrite the grammar– use a different nonterminal for each precedence level – start with the lowest precedence (MINUS)

E E - E | E / E | ( E ) | id

rewrite to

E E - E | TT T / T | F F id | ( E )

Page 8: Ambiguity

CS 536 Spring 2001 8

Example

parse tree for id – id / id

E E - E | TT T / T | F F id | ( E )

E

E

F F

T

-

id

/

idid

T

FT T

E

Page 9: Ambiguity

CS 536 Spring 2001 9

TEST YOURSELF #1

• Attempt to construct a parse tree for id-id/id that shows the wrong precedence.

• Question: – Why do you fail to construct this parse tree?

Page 10: Ambiguity

CS 536 Spring 2001 10

Associativity

• The grammar captures operator precedence, but it is still ambiguous! – fails to express that both subtraction and division

are left associative; • e.g., 5-3-2 is equivalent to: ((5-3)-2) and not to: (5-(3-2)).

• TEST YOURSELF #3 – Draw two parse trees for the expression 5-3-2

using the grammar given above; one that correctly groups 5-3, and one that incorrectly groups 3-2.

Page 11: Ambiguity

CS 536 Spring 2001 11

Recursion

• A grammar is recursive in nonterminal X if: – X + … X …

• recall that + means “in one or more steps, X derives a sequence of symbols that includes an X”

• A grammar is left recursive in X if: – X + X …

• in one or more steps, X derives a sequence of symbols that starts with an X

• A grammar is right recursive in X if: – X + … X

• in one or more steps, X derives a sequence of symbols that ends with an X

Page 12: Ambiguity

CS 536 Spring 2001 12

How to fix associativity

• The grammar given above is both left and right recursive in nonterminals exp and term– try at home: write the derivation steps that show this.

• To correctly expresses operator associativity: – For left associativity, use left recursion. – For right associativity, use right recursion.

• Here's the correct grammar: E E – T | TT T / F | F F id | ( E )

Page 13: Ambiguity

CS 536 Spring 2001 13

Ambiguity: The Dangling Else

• Consider the grammar E if E then E | if E then E else E | print

• This grammar is also ambiguous

Page 14: Ambiguity

CS 536 Spring 2001 14

The Dangling Else: Example

• The expression if E1 then if E2 then E3 else E4

has two parse trees

if

E1 if

E2 E3 E4

if

E1 if

E2 E3

E4

• Typically we want the second form

Page 15: Ambiguity

CS 536 Spring 2001 15

The Dangling Else: A Fix

• else matches the closest unmatched then • We can describe this in the grammar

E MIF /* all then are matched */ | UIF /* some then are unmatched */

MIF if E then MIF else MIF

| printUIF if E then E | if E then MIF else UIF

• Describes the same set of strings

Page 16: Ambiguity

CS 536 Spring 2001 16

The Dangling Else: Example Revisited

• The expression if E1 then if E2 then E3 else E4

if

E1 if

E2 E3 E4

if

E1 if

E2 E3

E4

• Not valid because the then expression is not a MIF

• A valid parse tree (for a UIF)

Page 17: Ambiguity

CS 536 Spring 2001 17

Precedence and Associativity Declarations

• Instead of rewriting the grammar– Use the more natural (ambiguous) grammar– Along with disambiguating declarations

• Most parser generators allow precedence and associativity declarations to disambiguate grammars

• Examples …

Page 18: Ambiguity

CS 536 Spring 2001 18

Associativity Declarations

• Consider the grammar E E - E | int • Ambiguous: two parse trees of int - int - int

E

E

E E

E-

int -

intint

E

E

E E

E-

int-

intint

• Left associativity declaration: %left +

Page 19: Ambiguity

CS 536 Spring 2001 19

Precedence Declarations

• Consider the grammar E E + E | E * E | int – And the string int + int * int

E

E

E E

E+

int *

intint

E

E

E E

E*

int+

intint• Precedence declarations: %left + %left *