Construct CFG that generates the language L = (w є (a,b) : length (w) ≥ 2 and second letter of w from right is a)
Construct CFG that generates the language L = (w є (a,b) : length (w) ≥ 2 and second letter of w from right is a)
S S
(i) S + S (ii) S S
*
3 S * S S + S 5
4 5 3 4
Example continued …
The expressions can be calculated starting
from bottom to the top, replacing each
nonterminal by the result of calculation
e.g.
S S
4 * 5
Example continued …
Similarly
S S
3 + 4
The ambiguity that has been observed in this
example can be removed with a change in
the CFG as discussed in the following
example
Example
S → (S+S)|(S*S)|number
where S and number are nonterminals,
while (, *, +, ) and the numbers are
terminals.
Here it can be observed that
1. S => (S+S)
=> (S+(S*S))
=> (3+(4*5)) = 23
2. S => (S*S)
=> ((S+S)*S)
=> ((3+4)*5) = 35
Polish Notation (o-o-o)
There is another notation for arithmetic
expressions for the CFG
S→S+S|S*S|number. Consider the
following derivation trees
S S
(i) S + S (ii) S S
*
3 S * S S + S 5
4 5 3 4
Polish Notation (o-o-o)
The arithmetic expressions shown by the
trees (i) and (ii) can be calculated from the
following trees, respectively
S S
+ *
(i) 3 * (ii) + 5
5 3 4
4
Here most of the S’s are eliminated.
Polish notation continued …
The branches are connected directly with the
operators. Moreover, the operators + and * are
no longer terminals as these are to be replaced
by numbers (results).
To write the arithmetic expression, it is required
to traverse from the left side of S and going
onward around the tree. The arithmetic
expressions will be as under
(i) + 3 * 4 5 (ii) * +3 4 5
The above notation is called operator prefix
notation.
Polish notation continued …
To evaluate the strings of characters, the first
substring (from the left) of the form
operator-operand-operand (o-o-o) is found
and is replaced by its calculation e.g.
(i) +3*4 5 = +3 20 = 23
(ii) *+3 4 5 = * 7 5 = 35
It may be noted that 4*5+3 is an infix
arithmetic expression, while an arithmetic in
(o-o-o) form is a prefix arithmetic expression.
Consider another example as follows
Example
To calculate the arithmetic expression of
the following tree
S
*
+ 6
* 5
+ +
1 23 4
Example continued …
it can be written as
*+*+1 2+3 4 5 6
The above arithmetic expression in (o-
o-o) form can be calculated as
*+*+1 2+3 4 5 6 = *+*3+3 4 5 6
= *+*3 7 5 6 = *+21 5 6 = *26 6 = 156.
Following is a note
Note
The previous prefix arithmetic expression can
be converted into the following infix arithmetic
expression as
*+*+1 2+3 4 5 6
= *+*+1 2 (3+4) 5 6
= *+*(1+2) (3+4) 5 6
= *(((1+2)*(3+4)) + 5) 6
= (((1+2)*(3+4)) + 5)*6
Task
Convert the following infix expressions
into the corresponding prefix
expressions. Calculate the values of the
expressions as well
1. 2*(3+4)*5
2. ((4+5)*6)+4
Ambiguous CFG
The CFG is said to be ambiguous if there
exists atleast one word of it’s language
that can be generated by the different
production trees.
Example: Consider the following CFG
S→aS|Sa|a
The word aaa can be generated by the
following three different trees
Example continued …
S S S
a S a S S a
a S S a S a
a a a
Thus the above CFG is ambiguous, while the
CFG S→aS|a is not ambiguous as neither the
word aaa nor any other word can be derived
from more than one production trees. The
derivation tree for aaa is as follows
Summing UP
• Jo Kuch Bhi Parha