0% found this document useful (0 votes)
231 views

Construct CFG that generates the language L = (w є (a,b) : length (w) ≥ 2 and second letter of w from right is a)

The document discusses several topics related to context-free grammars (CFGs) including: 1) Constructing a CFG to generate strings where the second to last letter is 'a'. 2) Converting infix arithmetic expressions to prefix notation by traversing the parse tree left-to-right. 3) An example of calculating the value of a prefix expression by replacing operator-operand pairs. 4) The concept of ambiguity in CFGs where a string can have multiple parse trees.

Uploaded by

Ahsan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
231 views

Construct CFG that generates the language L = (w є (a,b) : length (w) ≥ 2 and second letter of w from right is a)

The document discusses several topics related to context-free grammars (CFGs) including: 1) Constructing a CFG to generate strings where the second to last letter is 'a'. 2) Converting infix arithmetic expressions to prefix notation by traversing the parse tree left-to-right. 3) An example of calculating the value of a prefix expression by replacing operator-operand pairs. 4) The concept of ambiguity in CFGs where a string can have multiple parse trees.

Uploaded by

Ahsan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 19

Task

Construct CFG that generates the


language
L = {w є {a,b}*: length(w) ≥ 2 and second
letter of w from right is a}
Solution of the task
Construct CFG that generates the language L =
{w є {a,b}*: length(w) ≥ 2 and second letter of
w from right is a}
It can be observed that the language L can be
expressed by (a+b)*(aa+ab). Here the
nonterminal S should be replaced the
nonterminals X or Y where X should generate
the strings corresponding to (a+b)* and Y
should generate the strings corresponding to
(aa+ab). Thus the required CFG may be
(1) S → XY (2) X → aX|bX|Ʌ (3) Y→ aa|ab
Task
Construct the CFG for the language of
strings, defined over Σ={a,b}, beginning and
ending in same letters.
Solution:
It may be noted that the above language
contains the strings a and b as well. So
while constructing the required CFG the
strings a and b must be generated. Thus
the required CFG may be
S → aXa|bXb|a|b
X → aX|bX|Ʌ
Example
Consider the following CFG
S → S+S|S*S|number
where S and number are non-terminals
and the operators behave like terminals.
The above CFG creates ambiguity as the
expression 3+4*5 has two possibilities
(3+4)*5=35 and 3+(4*5)=23 which can be
expressed by the following production
trees
Example continued …

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

(i)=> 3 + S => 3 + 20 =>23

4 * 5
Example continued …
Similarly
S S

(ii) => S * 5 => 7 * 5 =>35

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

You might also like