Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
160 views6 pages

Hwsoln 05

The document provides examples of context-free grammars (CFGs) that generate specific formal languages. It then discusses converting CFGs to Chomsky normal form. The key points are: 1) CFG examples are given that generate languages with certain properties over the alphabets {0,1} and {a,b,c}. 2) A CFG is designed to generate regular expressions over {0,1}. 3) It is shown that the class of context-free languages is closed under union by defining a CFG for the union of two languages. 4) A procedure is demonstrated for converting a CFG to Chomsky normal form.

Uploaded by

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

Hwsoln 05

The document provides examples of context-free grammars (CFGs) that generate specific formal languages. It then discusses converting CFGs to Chomsky normal form. The key points are: 1) CFG examples are given that generate languages with certain properties over the alphabets {0,1} and {a,b,c}. 2) A CFG is designed to generate regular expressions over {0,1}. 3) It is shown that the class of context-free languages is closed under union by defining a CFG for the union of two languages. 4) A procedure is demonstrated for converting a CFG to Chomsky normal form.

Uploaded by

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

CFG AND CNF EXAMPLES

1. Give context-free grammars that generate the following languages.

(a) { w ∈ {0, 1}∗ | w contains at least three 1s }


Answer: G = (V, Σ, R, S) with set of variables V = {S, X}, where S is the
start variable; set of terminals Σ = {0, 1}; and rules

S → X1X1X1X
X → 0X | 1X | ε

(b) { w ∈ {0, 1}∗ | w = w R and |w| is even }


Answer: G = (V, Σ, R, S) with set of variables V = {S}, where S is the start
variable; set of terminals Σ = {0, 1}; and rules

S → 0S0 | 1S1 | ε

(c) { w ∈ {0, 1}∗ | the length of w is odd and the middle symbol is 0 }
Answer: G = (V, Σ, R, S) with set of variables V = {S}, where S is the start
variable; set of terminals Σ = {0, 1}; and rules

S → 0S0 | 0S1 | 1S0 | 1S1 | 0

(d) { ai bj ck | i, j, k ≥ 0, and i = j or i = k }
Answer: G = (V, Σ, R, S) with set of variables V = {S, W, X, Y, Z}, where
S is the start variable; set of terminals Σ = {a, b, c}; and rules

S → XY | W
X → aXb | ε
Y → cY | ε
W → aW c | Z
Z → bZ | ε

1
(e) { ai bj ck | i, j, k ≥ 0 and i + j = k }
Answer: G = (V, Σ, R, S) with set of variables V = {S, X}, where S is the
start variable; set of terminals Σ = {a, b, c}; and rules

S → aSc | X
X → bXc | ε

(f) ∅
Answer: G = (V, Σ, R, S) with set of variables V = {S}, where S is the start
variable; set of terminals Σ = {0, 1}; and rules

S → S

Note that if we start a derivation, it never finishes, i.e., S ⇒ S ⇒ S ⇒ · · · , so


no string is ever produced. Thus, L(G) = ∅.
(g) The language A of strings of properly balanced left and right brackets: every left
bracket can be paired with a unique subsequent right bracket, and every right
bracket can be paired with a unique preceding left bracket. Moreover, the string
between any such pair has the same property. For example, [ ] [ [ [ ] [ ] ] [ ] ] ∈ A.
Answer: G = (V, Σ, R, S) with set of variables V = {S}, where S is the start
variable; set of terminals Σ = {[, ]}; and rules

S → ε | SS | [S]

2. Let T = { 0, 1, (, ), ∪, ∗ , ∅, e }. We may think of T as the set of symbols used by


regular expressions over the alphabet {0, 1}; the only difference is that we use e for
symbol ε, to avoid potential confusion in what follows.

(a) Your task is to design a CFG G with set of terminals T that generates exactly
the regular expressions with alphabet {0, 1}.
Answer: G = (V, Σ, R, S) with set of variables V = {S}, where S is the start
variable; set of terminals Σ = T ; and rules

S → S ∪ S | SS | S ∗ | (S) | 0 | 1 | ∅ | e

(b) Using your CFG G, give a derivation and the corresponding parse tree for the
string (0 ∪ (10)∗ 1)∗ .
Answer: A derivation for (0 ∪ (10)∗ 1)∗ is

S ⇒ S ∗ ⇒ (S)∗ ⇒ (S ∪ S)∗ ⇒ (0 ∪ S)∗ ⇒ (0 ∪ SS)∗ ⇒ (0 ∪ S ∗ S)∗


⇒ (0 ∪ (S)∗ S)∗ ⇒ (0 ∪ (SS)∗ S)∗ ⇒ (0 ∪ (1S)∗ S)∗
⇒ (0 ∪ (10)∗ S)∗ ⇒ (0 ∪ (10)∗ 1)∗

2
and the corresponding parse tree is

S ∗

( S )

S ∪ S

0 S S

S ∗ 1

( S )

S S

1 0

3. (a) Suppose that language A1 has a context-free grammar G1 = (V1 , Σ, R1 , S1 ),


and language A2 has a context-free grammar G2 = (V2 , Σ, R2 , S2 ), where, for
i = 1, 2, Vi is the set of variables, Ri is the set of rules, and Si is the start variable
for CFG Gi . The CFGs have the same set of terminals Σ. Assume that V1 ∩V2 =
∅. Define another CFG G3 = (V3 , Σ, R3 , S3 ) with V3 = V1 ∪ V2 ∪ {S3 }, where
S3 6∈ V1 ∪ V2 , and R3 = R1 ∪ R2 ∪ { S3 → S1 , S3 → S2 }. Argue that G3
generates the language A1 ∪ A2 . Thus, conclude that the class of context-free
languages is closed under union.
Answer: Let A3 = A1 ∪ A2 , and we need to show that L(G3 ) = A3 . To
do this, we need to prove that L(G3 ) ⊆ A3 and A3 ⊆ L(G3 ). To show that
L(G3 ) ⊆ A3 , first consider any string w ∈ L(G3 ). Since w ∈ L(G3 ), we

have that S3 ⇒ w. Since the only rules in R3 with S3 on the left side are
∗ ∗
S3 → S1 | S2 , we must have that S3 ⇒ S1 ⇒ w or S3 ⇒ S2 ⇒ w. Suppose

first that S3 ⇒ S1 ⇒ w. Since S1 ∈ V1 and we assumed that V1 ∩ V2 = ∅, the

derivation S1 ⇒ w must only use variables in V1 and rules in R1 , which implies

that w ∈ A1 . Similarly, if S3 ⇒ S2 ⇒ w, then we must have that w ∈ A2 .
Thus, w ∈ A3 = A1 ∪ A2 , so L(G3 ) ⊆ A3 .
To show that A3 ⊆ L(G3 ), first suppose that w ∈ A3 . This implies w ∈ A1 or

3
and the corresponding parse tree is

S ∗

( S )

S ∪ S

0 S S

S ∗ 1

( S )

S S

1 0

3. (a) Suppose that language A1 has a context-free grammar G1 = (V1 , Σ, R1 , S1 ),


and language A2 has a context-free grammar G2 = (V2 , Σ, R2 , S2 ), where, for
i = 1, 2, Vi is the set of variables, Ri is the set of rules, and Si is the start variable
for CFG Gi . The CFGs have the same set of terminals Σ. Assume that V1 ∩V2 =
∅. Define another CFG G3 = (V3 , Σ, R3 , S3 ) with V3 = V1 ∪ V2 ∪ {S3 }, where
S3 6∈ V1 ∪ V2 , and R3 = R1 ∪ R2 ∪ { S3 → S1 , S3 → S2 }. Argue that G3
generates the language A1 ∪ A2 . Thus, conclude that the class of context-free
languages is closed under union.
Answer: Let A3 = A1 ∪ A2 , and we need to show that L(G3 ) = A3 . To
do this, we need to prove that L(G3 ) ⊆ A3 and A3 ⊆ L(G3 ). To show that
L(G3 ) ⊆ A3 , first consider any string w ∈ L(G3 ). Since w ∈ L(G3 ), we

have that S3 ⇒ w. Since the only rules in R3 with S3 on the left side are
∗ ∗
S3 → S1 | S2 , we must have that S3 ⇒ S1 ⇒ w or S3 ⇒ S2 ⇒ w. Suppose

first that S3 ⇒ S1 ⇒ w. Since S1 ∈ V1 and we assumed that V1 ∩ V2 = ∅, the

derivation S1 ⇒ w must only use variables in V1 and rules in R1 , which implies

that w ∈ A1 . Similarly, if S3 ⇒ S2 ⇒ w, then we must have that w ∈ A2 .
Thus, w ∈ A3 = A1 ∪ A2 , so L(G3 ) ⊆ A3 .
To show that A3 ⊆ L(G3 ), first suppose that w ∈ A3 . This implies w ∈ A1 or

3
To show that L(G2 ) ⊆ A∗ , suppose we apply the rule S → S1 S2 a total of
n ≥ 0 times, followed by an application of the rule S2 → ε. This gives

S2 ⇒ S1 S1 · · · S1 S2 ⇒ S1 S1 · · · S1 .
| {z } | {z }
n times n times
Now each of the variables S1 can be used to derive a string wi ∈ A, i.e., from the

ith S1 , we get S1 ⇒ wi . Thus,
∗ ∗
S2 ⇒ S1 S1 · · · S1 ⇒ w1 w2 · · · wn ∈ A∗
| {z }
n times
since each wi ∈ A. Therefore, we end up with a string in A∗ . To convince
ourselves that the productions applied to the various separate S1 terms do not
interfere in undesired ways, we need only think of the parse tree. Each S1 is the
root of a distinct branch, and the rules along one branch do not affect those on
another. Here, we assumed that we first applied the rule S2 → S1 S2 a total of
n times, then applied the rule S2 → ε, and then applied rules to change each
S1 into strings. However, we could have applied the rules in a different order, as
long as the rule S2 → ε is applied only after the n applications of S2 → S1 S2 .
By examining the parse tree, we can argue as before that the order in which we
applied the rules doesn’t matter.
4. Convert the following CFG into an equivalent CFG in Chomsky normal form, using
the procedure given in Theorem 2.9.
S → BSB | B | ε
B → 00 | ε

Answer: First introduce new start variable S0 and the new rule S0 → S, which gives
S0 → S
S → BSB | B | ε
B → 00 | ε

Then we remove ε rules:


ˆ Removing B → ε yields
S0 → S
S → BSB | BS | SB | S | B | ε
B → 00
ˆ Removing S → ε yields
S0 → S | ε
S → BSB | BS | SB | S | B | BB
B → 00

5
∗ ∗
w ∈ A2 . If w ∈ A1 , then S1 ⇒ w. But then S3 ⇒ S1 ⇒ w, so w ∈ L(G3 ).
∗ ∗
Similarly, if w ∈ A2 , then S2 ⇒ w. But then S3 ⇒ S2 ⇒ w, so w ∈ L(G3 ).
Thus, A3 ⊆ L(G3 ), and since we previously showed that L(G3 ) ⊆ A3 , it follows
that L(G3 ) = A3 ; i.e., the CFG G3 generates the language A1 ∪ A2 .

(b) Prove that the class of context-free languages is closed under concatenation.
Answer: Suppose that language A1 has a context-free grammar G1 = (V1 , Σ, R1 , S1 ),
and language A2 has a context-free grammar G2 = (V2 , Σ, R2 , S2 ), where, for
i = 1, 2, Vi is the set of variables, Ri is the set of rules, and Si is the start
variable for CFG Gi . The CFGs have the same set of terminals Σ. Assume
that V1 ∩ V2 = ∅. Then a CFG for A1 ◦ A2 is G3 = (V3 , Σ, R3 , S3 ) with
V3 = V1 ∪ V2 ∪ {S3 }, where S3 6∈ V1 ∪ V2 , and R3 = R1 ∪ R2 ∪ { S3 → S1 S2 }.
To understand why L(G3 ) = A1 ◦ A2 , note that any string w ∈ A1 ◦ A2 can

be written as w = uv, where u ∈ A1 and v ∈ A2 . It follows that S1 ⇒ u and
∗ ∗ ∗
S2 ⇒ v, so S3 ⇒ S1 S2 ⇒ uS2 ⇒ uv, so w = uv ∈ L(G3 ). This proves that
A1 ◦ A2 ⊆ L(G3 ).
To prove that L(G3 ) ⊆ A1 ◦ A2 , consider any string w ∈ L(G3 ). Since w ∈

L(G3 ), it follows that S3 ⇒ w. The only rule in R3 with S3 on the left side is

S3 → S1 S2 , so S3 ⇒ S1 S2 ⇒ w. Since V1 ∩ V2 = ∅, any derivation starting
from S1 can only generate a string in A1 , and any derivation starting from S2

can only generate a string in A2 . Thus, since S3 ⇒ S1 S2 ⇒ w, it must be that
w is the concatenation of a string from A1 with a string from A2 . Therefore,
w ∈ A1 ◦ A2 , which establishes that L(G3 ) ⊆ A1 ◦ A2 .

(c) Prove that the class of context-free languages is closed under Kleene-star.
Answer: Suppose that language A has a context-free grammar G1 = (V1 , Σ, R1 , S1 ).
Then a CFG for A∗ is G2 = (V2 , Σ, R2 , S2 ) with V2 = V1 ∪ {S2 }, where
S2 6∈ V1 , and R2 = R1 ∪ { S2 → S1 S2 , S2 → ε }.
To show that L(G2 ) = A∗ , we first prove that A∗ ⊆ L(G2 ). Consider any
string w ∈ A∗ . We can write w = w1 w2 · · · wn for some n ≥ 0, where each
wi ∈ A. (Here, we interpret w = w1 w2 · · · wn for n = 0 to be w = ε.) Since

each wi ∈ A, we have that S1 ⇒ wi . To derive the string w using CFG G2 , we
first apply the rule S2 → S1 S2 a total of n times, followed by one application of

the rule S2 → ε. Then for the ith S1 , we use S1 ⇒ wi . Thus, we get
∗ ∗
S2 ⇒ S1 S1 · · · S1 S2 ⇒ S1 S1 · · · S1 ⇒ w1 w2 · · · wn = w
| {z } | {z }
n times n times
Therefore, w ∈ L(G2 ), so A∗ ⊆ L(G2 ).

You might also like