Transcript Document
Chapter 3
Context-Free Grammars
and Parsing
Ambiguous Grammar
Gang S. Liu
College of Computer Science & Technology
Harbin Engineering University
Compiler
Samuel2005@126.com
1
Ambiguous Grammar
exp → exp op exp | (exp) | number
op → + | - | *
The string 34 – 3 * 42 has two
different parse trees and syntax trees.
*
34
42
34
3
*
3
42
A grammar that generates a string with two distinct parse
trees is called an ambiguous grammar.
Compiler
Samuel2005@126.com
2
Two Ways to Deal with
Ambiguity
1. Disambiguating rule
•
•
•
State a rule that specifies in each ambiguous
case which of the trees is correct.
It corrects the ambiguity without changing and
complicating the grammar.
Syntactic structure of the language is not given
by the grammar alone.
2. Change grammar into a form that forces
the construction of a correct parse tree.
In both cases we must decide which of the
trees are correct.
Compiler
Samuel2005@126.com
3
Ambiguous Grammar
exp → exp op exp | (exp) | number
op → + | - | *
The string 34 – 3 * 42 has two
different parse trees and syntax trees.
*
-
34
42
3
34
×
*
3
√
42
A grammar that generates a string with two distinct parse
trees is called an ambiguous grammar.
Compiler
Samuel2005@126.com
4
Precedence
Some operations have precedence over
other operations.
Multiplication has precedence over addition.
To handle the precedence of operations in
the grammar, we group the operators into
groups of equal precedence.
We must write a different rule for each
precedence.
Compiler
Samuel2005@126.com
5
Example
exp → exp op exp | (exp) | number
op → + | - | *
*
-
34
42
3
34
×
*
3
√
42
exp → exp addop exp | term
addop → + | term → term mulop term | factor
mulop → *
factor → (exp) | number
Compiler
Samuel2005@126.com
6
Ambiguous
34 – 3 – 42
(34 – 3) – 42 = –11
√
34 – (3 – 42) = 73
×
(34 – 3) – 42
Compiler
Samuel2005@126.com
7
Associativity
Some operation (like subtraction) are left
associative.
A series of subtraction operations is performed
from left to right.
exp → exp addop exp | term
Recursion on both sides of the operator allows
either side to match repetitions of the operator in a
derivation.
exp → exp addop term | term
The right recursion is replaced with the base case,
forcing the repetitive matches on the left side
Left recursion makes addition and subtraction left
associative.
Compiler
Samuel2005@126.com
8
Example
34 - 3 - 42 has a
unique parse tree
Compiler
Samuel2005@126.com
9
Example
exp → exp addop term | term
addop → + | term → term mulop factor | factor
mulop → *
factor → (exp) | number
34- 3* 42 has a
unique parse tree
exp
exp
addop
term
-
factor
number
Compiler
term
term
mulop
factor
*
number
Samuel2005@126.com
factor
number
10
Dangling else Problem
statement → if-stmt | other
if-stmt → if (exp) statement
| if (exp) statement else statement
exp → 0 | 1
if (0) if (1) other else other has two parse trees
with two meaning
if (0) if (1) other else other and
if (0) if (1) other else other
√
×
Compiler
Samuel2005@126.com
11
if (0) if (1) other else other
Compiler
Samuel2005@126.com
12
if (0) if (1) other else other
Compiler
Samuel2005@126.com
13
Dangling else Problem
statement → if-stmt | other
if-stmt → if (exp) statement
| if (exp) statement else statement
exp → 0 | 1
if (0) if (1) other else other has two parse trees
with two meaning
if (0) if (1) other else other and
if (0) if (1) other else other
1. Modify the grammar.
2. Disambiguating rule: the most closely nested rule.
Compiler
Samuel2005@126.com
14
if
(0)
if
(1)
other
else
other
Dangling else Problem
statement → matched-stmt | unmatched-stmt
matched-stmt → if (exp) matched-stmt else
matched-stmt | other
unmatched-stmt → if (exp) statement
| if (exp) matched-stmt else unmatched-stmt
exp → 0 | 1
Compiler
Samuel2005@126.com
15
Inessential Ambiguity
Sometimes a grammar may be
ambiguous and yet always produce
unique abstract syntax trees.
Example:
(a+b)+c=a+(b+c)
Compiler
Samuel2005@126.com
16
Extended BNF Notation (EBNF)
{ }
repetitions
A → β {α}
and
A → {α} β
Compiler
Samuel2005@126.com
17
Left and Right Recursion
Left recursive
grammar:
A→Aα|β
Equivalent to
α*
A → β {α}
Compiler
Right recursive
grammar:
A→αA|β
β
Equivalent to
α*β
A → {α} β
Samuel2005@126.com
18
Extended BNF Notation (EBNF)
{ }
repetitions
A → β {α} and A → {α} β
[ ] →optional
constructs
statement
if-stmt | other
if-stmt → if (exp) statement
| if (exp) statement else statement
exp → 0 | 1
Compiler
statement → if-stmt | other
if-stmt → if (exp) statement [ else statement ]
exp → 0 |Samuel2005@126.com
1
19
Syntax Diagrams
Graphical representations for visually representing
EBNF rules are called syntax diagrams.
They consist of boxes representing terminals and
nonterminals, arrowed lines representing
sequencing and choices, and nonterminal labels for
each diagram representing the grammar rule
defining that nonterminal.
A round or oval box is used to indicate terminals in
a diagram, while a square or rectangular box is
used to indicate nonterminals.
Compiler
Samuel2005@126.com
20
Syntax Diagrams(cont)
As an example, consider the grammar rule
factor → ( exp ) | number
This is written as a syntax diagram in the
following way:
Compiler
Samuel2005@126.com
21
Syntax Diagrams(cont)
Syntax diagrams are written from the
EBNF rather than the BNF, so we need
diagrams representing repetition and
optional constructs. Given a repetition
such as
A→{B}
The corresponding syntax diagram is
usually drawn as follow:
Compiler
Samuel2005@126.com
22
Syntax Diagrams(cont)
An optional construct such as
A→[B]
Is drawn as:
Compiler
Samuel2005@126.com
23
Example
exp → exp addop term | term
addop → + | –
term → term mulop factor | factor
mulop → *
factor → (exp) | number
exp → term { addop term }
addop → + | –
term → factor { mulop factor }
mulop → *
factor → (exp) | number
Compiler
Samuel2005@126.com
24
Example
statement → if-stmt | other
if-stmt → if (exp) statement
| if (exp) statement else statement
exp → 0 | 1
statement → if-stmt | other
if-stmt → if (exp) statement [ else statement ]
exp → 0 | 1
Compiler
Samuel2005@126.com
25
Homework
1.2
1.3
1.7
2.1
2.2
2.4
2.5
2.8
2.12
2.17
2.24
3.3
3.5
3.6
3.24
Compiler
Samuel2005@126.com
26