You are on page 1of 5

Ambiguity in Grammar

A grammar is said to be ambiguous if there exists more than one leftmost derivation or more
than one rightmost derivation or more than one parse tree for the given input string. If the
grammar is not ambiguous, then it is called unambiguous.

If the grammar has ambiguity, then it is not good for compiler construction. No method can
automatically detect and remove the ambiguity, but we can remove ambiguity by re-writing the
whole grammar without ambiguity.

Let us consider a grammar G with the production rule

1. E→I
2. E→E+E
3. E→E*E
4. E → (E)
5. I → ε | 0 | 1 | 2 | ... | 9

Solution:

For the string "3 * 2 + 5", the above grammar can generate two parse trees by leftmost
derivation:

Since there are two parse trees for a single string "3 * 2 + 5", the grammar G is
ambiguous.

Example 3:

Check whether the given grammar G is ambiguous or not.

1. S → aSb | SS

2. S → ε

Solution:

For the string "aabb" the above grammar can generate two parse trees
Since there are two parse trees for a single string "aabb", the grammar G is ambiguous.

Parser is a compiler that is used to break the data into smaller elements coming from lexical
analysis phase.

A parser takes input in the form of sequence of tokens and produces output in the form of parse
tree.

Parsing is of two types: top down parsing and bottom up parsing.


Top-Down Parsing:

In the top-down parsing construction of the parse tree starts at the root and then proceeds towards
the leaves. 2 categories of Top down parsing:

1. Predictive Parsing:

Predictive parse can predict which production should be used to replace the specific input string.
The predictive parser uses look-ahead point, which points towards next input symbols. itss
known as LL(1) Parser

2. Recursive Descent Parsing:

This parsing technique recursively parses the input to make a prase tree.

Bottom-Up Parsing:

In the bottom-up parsing technique the construction of the parse tree starts with the leave, and
then it processes towards its root. It is also called as shift-reduce parsing.

Shift reduce parsing


 Shift reduce parsing is a process of reducing a string to the start symbol of a grammar.
 Shift reduce parsing uses a stack to hold the grammar and an input tape to hold the string.

 Shift reduce parsing performs the two actions: shift and reduce. That's why it is known as
shift reduces parsing.
 At the shift action, the current symbol in the input string is pushed to a stack.
 At each reduction, the symbols will replaced by the non-terminals. The symbol is the
right side of the production and non-terminal is the left side of the production.
Grammar:

1. S → S+S
2. S → S-S
3. S → (S)
4. S→a

Input string:

1. a1-(a2+a3)

Operator precedence parsing


Operator precedence grammar is kinds of shift reduce parsing method. It is applied to a small
class of operator grammars.

There are the three operator precedence relations:

a ⋗ b means that terminal "a" has the higher precedence than terminal "b".

a ⋖ b means that terminal "a" has the lower precedence than terminal "b".

a ≐ b means that the terminal "a" and "b" both have same precedence.

You might also like