![Page 1: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/1.jpg)
Prof. Bodik CS 164 Lecture 8 1
Grammars and ambiguity
CS1643:30-5:00 TT
10 Evans
![Page 2: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/2.jpg)
Prof. Bodik CS 164 Lecture 82
Overview
• derivations and parse trees– different derivations produce may produce
same parse tree
• ambiguous grammars– what they are– and how to fix them
![Page 3: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/3.jpg)
Prof. Bodik CS 164 Lecture 83
Recall: derivations and parse trees
A derivation is a sequence of productions S … …
A derivation can be drawn as a parse tree– Start symbol is the tree’s root
– For a production X Y1 … Yn add children Y1, …, Yn to node X
You need parse trees to build ASTs
![Page 4: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/4.jpg)
Prof. Bodik CS 164 Lecture 84
Derivation Example
• Grammar
• String
E E+E | E E | (E) | id
id id + id
![Page 5: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/5.jpg)
Prof. Bodik CS 164 Lecture 85
Derivation Example (Cont.)
E
E+E
E E+E
id E + E
id id + E
id id + id
E
E
E E
E+
id*
idid
![Page 6: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/6.jpg)
Prof. Bodik CS 164 Lecture 86
Derivation in Detail (1)
E
E
![Page 7: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/7.jpg)
Prof. Bodik CS 164 Lecture 87
Derivation in Detail (2)
E
E+E
E
E E+
![Page 8: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/8.jpg)
Prof. Bodik CS 164 Lecture 88
Derivation in Detail (3)
E E
E
E+E
E +
E
E
E E
E+
*
![Page 9: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/9.jpg)
Prof. Bodik CS 164 Lecture 89
Derivation in Detail (4)
E
E+E
E E+E
id E + E
E
E
E E
E+
*
id
![Page 10: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/10.jpg)
Prof. Bodik CS 164 Lecture 810
Derivation in Detail (5)
E
E+E
E E+E
id E +
id id +
E
E
E
E
E E
E+
*
idid
![Page 11: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/11.jpg)
Prof. Bodik CS 164 Lecture 811
Derivation in Detail (6)
E
E+E
E E+E
id E + E
id id + E
id id + id
E
E
E E
E+
id*
idid
![Page 12: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/12.jpg)
Prof. Bodik CS 164 Lecture 812
Notes on Derivations
• A parse tree has– Terminals at the leaves– Non-terminals at the interior nodes
• An in-order traversal of the leaves is the original input
• The parse tree shows the association of operations, the input string does not
![Page 13: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/13.jpg)
Prof. Bodik CS 164 Lecture 813
Left-most and Right-most Derivations
• The example is a left-most derivation– At each step, replace
the left-most non-terminal
• There is an equivalent notion of a right-most derivation
E
E+E
E+id
E E + id
E id + id
id id + id
![Page 14: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/14.jpg)
Prof. Bodik CS 164 Lecture 814
Right-most Derivation in Detail (1)
E
E
![Page 15: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/15.jpg)
Prof. Bodik CS 164 Lecture 815
Right-most Derivation in Detail (2)
E
E+E
E
E E+
![Page 16: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/16.jpg)
Prof. Bodik CS 164 Lecture 816
Right-most Derivation in Detail (3)
id
E
E+E
E+
E
E E+
id
![Page 17: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/17.jpg)
Prof. Bodik CS 164 Lecture 817
Right-most Derivation in Detail (4)
E
E+E
E+id
E E + id
E
E
E E
E+
id*
![Page 18: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/18.jpg)
Prof. Bodik CS 164 Lecture 818
Right-most Derivation in Detail (5)
E
E+E
E+id
E E
E
+ id
id + id
E
E
E E
E+
id*
id
![Page 19: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/19.jpg)
Prof. Bodik CS 164 Lecture 819
Right-most Derivation in Detail (6)
E
E+E
E+id
E E + id
E id + id
id id + id
E
E
E E
E+
id*
idid
![Page 20: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/20.jpg)
Prof. Bodik CS 164 Lecture 820
Derivations and Parse Trees
• Note that right-most and left-most derivations have the same parse tree
• The difference is only in the order in which branches are added
![Page 21: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/21.jpg)
ambiguity
![Page 22: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/22.jpg)
Prof. Bodik CS 164 Lecture 822
Ambiguity
• Grammar E E + E | E * E | ( E ) | int
• Strings int + int + int
int * int + int
![Page 23: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/23.jpg)
Prof. Bodik CS 164 Lecture 823
Ambiguity. Example
This string has two parse trees
E
E
E E
E+
int
+
intint
E
E
E E
E+
int
+
intint
+ is left-associative
![Page 24: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/24.jpg)
Prof. Bodik CS 164 Lecture 824
Ambiguity. Example
This string has two parse trees
E
E
E E
E*
int
+
intint
E
E
E E
E+
int
*
intint
* has higher precedence than +
![Page 25: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/25.jpg)
Prof. Bodik CS 164 Lecture 825
Ambiguity (Cont.)
• A grammar is ambiguous if it has more than one parse tree for some string– Equivalently, there is more than one right-most
or left-most derivation for some string
• Ambiguity is bad– Leaves meaning of some programs ill-defined
• Ambiguity is common in programming languages– Arithmetic expressions– IF-THEN-ELSE
![Page 26: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/26.jpg)
Prof. Bodik CS 164 Lecture 826
Dealing with Ambiguity
• There are several ways to handle ambiguity
• Most direct method is to rewrite the grammar unambiguously E E + T | T T T * int | int | ( E )
• Enforces precedence of * over +• Enforces left-associativity of + and *
![Page 27: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/27.jpg)
Prof. Bodik CS 164 Lecture 827
Ambiguity. Example
The int * int + int has ony one parse tree now
E
E
E E
E*
int
+
intint
E
T
T int
T+
int
*
E
int
![Page 28: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/28.jpg)
Prof. Bodik CS 164 Lecture 828
Ambiguity: The Dangling Else
• Consider the grammar S if E then S | if E then S else S | OTHER
• This grammar is also ambiguous
![Page 29: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/29.jpg)
Prof. Bodik CS 164 Lecture 829
The Dangling Else: Example
• The expression if E1 then if E2 then S3 else S4
has two parse trees
if
E1 if
E2 S3 S4
if
E1 if
E2 S3
S4
• Typically we want the second form
![Page 30: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/30.jpg)
Prof. Bodik CS 164 Lecture 830
The Dangling Else: A Fix
• else matches the closest unmatched then • We can describe this in the grammar (distinguish
between matched and unmatched “then”)
S MIF /* all then are matched */ | UIF /* some then are unmatched */
MIF if E then MIF else MIF
| OTHERUIF if E then S | if E then MIF else UIF
• Describes the same set of strings
![Page 31: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/31.jpg)
Prof. Bodik CS 164 Lecture 831
The Dangling Else: Example Revisited
• The expression if E1 then if E2 then S3 else S4
if
E1 if
E2 S3 S4
if
E1 if
E2 S3
S4
• Not valid because the then expression is not a MIF
• A valid parse tree (for a UIF)
![Page 32: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/32.jpg)
Prof. Bodik CS 164 Lecture 832
Ambiguity
• No general techniques for handling ambiguity
• Impossible to convert automatically an ambiguous grammar to an unambiguous one
• Used with care, ambiguity can simplify the grammar– Sometimes allows more natural definitions– We need disambiguation mechanisms
![Page 33: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/33.jpg)
Prof. Bodik CS 164 Lecture 833
Precedence and Associativity Declarations
• Instead of rewriting the grammar– Use the more natural (ambiguous) grammar– Along with disambiguating declarations
• LR (bottom-up) parsers allow precedence and associativity declarations to disambiguate grammars
• Examples …
![Page 34: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/34.jpg)
Prof. Bodik CS 164 Lecture 834
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 35: Prof. Bodik CS 164 Lecture 81 Grammars and ambiguity CS164 3:30-5:00 TT 10 Evans](https://reader030.vdocuments.mx/reader030/viewer/2022032800/56649d4c5503460f94a2a0f8/html5/thumbnails/35.jpg)
Prof. Bodik CS 164 Lecture 835
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 *