3.2 Parse Trees
3.2 Parse Trees
3.2 Parse Trees
Section 3.2
Wed, Oct 20, 2004
Parse Trees
Given a derivable string, we may represent the
derivation by a parse tree.
A parse tree is a tree with the following properties.
At the root node is the start symbol S.
At each node, the children (from left to right) are the
symbols on the right hand side (from left to right) of the
production rule that was used.
Two derivations are equivalent if they have the same
parse tree.
Example of a Parse Tree
Let the grammar G be
S → AB
A → aAb | e
B → bB | e
Let the string be w = aabbbb.
Write the parse tree of w.
Parse Tree of aabbbb
A B
a A b b B
a A b b B
e e
Derivations vs. Parse Trees
This is the parse tree of many different, but
equivalent, derivations of aabbbb.
For example,
S AB aAbB aaAbbB aabbB
aabbbB aabbbbB aabbbb.
S AB AbB AbbB Abb
aAbbb aaAbbbb aabbbb.
Similar Derivations
The most minor difference between two derivations is
that two consecutive steps in one of them are reversed
in the other, and all other steps are the same.
That is, at some point both derivations have derived a
string uAvBw, where u, v, w V* and A and B are
nonterminals.
One derivation next replaces A and then B, while the
other derivation next replaces B and then A.
Similar Derivations
Let D1 be the derivation that replaces A, then B, and
let D2 be the derivation that replaces B, then A, and D1
and D2 are identical in all other steps.
Then we say that D1 precedes D2, and we write
D1 D2.
Now consider the reflexive, symmetric, transitive
closure of and call this new relation similarity.
Clearly, similarity is an equivalence relation.
Leftmost and Rightmost
Derivations
A leftmost derivation of a string is a derivation that is
not preceded by any other derivation.
That is, each production rule is applied to the leftmost
nonterminal in the string.
A rightmost derivation of a string is a derivation that
does not precede any other derivation.
That is, each production rule is applied to the
rightmost nonterminal in the string.
For example, see the previous two derivations.
Ambiguous Grammars
If there exists w L(G) such that w has two different
parse trees, then G is ambiguous.
For example, define G as
S → AB | aSb | Sb | e
A → aAb | e
B → bB | e
Then the string aabbbb has two different parse trees,
that is, two derivations that are not similar.
What are they?
Inherently Ambiguous
Grammars
It is obvious how to remove the ambiguity in the last
example.
However, if the ambiguity cannot be removed, then
the language is called inherently ambiguous.
Example: An Inherently
Ambiguous Grammar
Consider the following grammar of expressions using
addition and multiplication.
EE+E
EE*E
E (E)
E id
The string E + E * E has two parse trees.
What are they?
Is there a difference in their “meaning” (semantics)?
Can this ambiguity be removed?
Example: An Inherently
Ambiguous Grammar
Consider a grammar for if statements without braces.
The language includes both
if (condition) statement
and
if (condition) statement else statement
Example: An Inherently
Ambiguous Grammar
Production rules
S if(c)S if(c)S else S SS s e
There are two different parse trees for the string
if (c1) if (c2) s1 else s2
What are they?
Is there a difference in meaning?
Can this ambiguity be removed?