This is an old revision of the document!


9. Context-Free Languages

Write a PDA as well as a CF grammar for the following languages. Specify - for each PDA, the way it accepts (by empty-stack or by final state). For each grammar, make sure it is not ambiguous. (Start with any CF grammar that accepts L. Then write another non-ambiguous grammar for the same language).

9.1.1. $ L = \{\: w \in \{A,B\}^* \ | \:w \text{ is a palindrome}\} $.

Click to display ⇲

Click to hide ⇱

S $ \leftarrow $ A S A | B S B | A | B | $ \varepsilon $

9.1.2. $ L = \{ A^{m} B^{m+n} C^{n} \ | \: n, m \geq 0 \} $

Click to display ⇲

Click to hide ⇱

S $ \leftarrow $ X Y

X $ \leftarrow $ A X B | $ \varepsilon $

Y $ \leftarrow $ B Y C | $ \varepsilon $

9.1.3. $ L = \{w \in \{a, b\}^* | \#_a(w) = \#_b(w) \} $

Click to display ⇲

Click to hide ⇱

S $ \leftarrow $ a B S | b a S | $ \varepsilon $

ambiguuous because of: “ababab”

S $ \leftarrow $ a S b | b S a | S S | $ \varepsilon $

ambiguuous because of: “abab”

Idea: A = rule that promises that one letter 'a' should come without a pair; B = rule that promises that one letter 'b' should come without a pair

S $ \leftarrow $ a B S | b A S | $ \varepsilon $

A $ \leftarrow $ a | b A A

B $ \leftarrow $ b | a B B

9.1.4. $ L = \{w \in \{a, b\}^* | \#_a(w) \neq \#_b(w) \} $

Click to display ⇲

Click to hide ⇱

S $ \leftarrow $ A | B

A $ \leftarrow $ G |G G

B $ \leftarrow $ H | H H

G $ \leftarrow $ E a

H $ \leftarrow $ E b

E $ \leftarrow $ a M E | b N E | $ \varepsilon $

M $ \leftarrow $ b | a M M

N $ \leftarrow $ a | b N N

9.1.5. $ L = \{a^ib^jc^k | i = j \lor j = k \} $

Click to display ⇲

Click to hide ⇱

Inherently ambiguous grammar because of the case i = j = k
$ S \leftarrow X | Y $
$ X \leftarrow ZC $
$ Z \leftarrow aZb | \varepsilon $
$ C \leftarrow cC | \varepsilon $
$ Y \leftarrow AT $
$ A \leftarrow aA | \varepsilon $
$ T \leftarrow bTc | \varepsilon $

Which of the following grammars are ambiguous? Justify each answer. Modify the grammar to remove ambiguity, wherever the case.

9.2.1.

$ S \leftarrow aA | A $
$ A \leftarrow aA | B $
$ B \leftarrow bB | \epsilon $

Click to display ⇲

Click to hide ⇱

Ambiguuous: yes
  • S ⇒ aA ⇒ aB ⇒ abB ⇒ ab
  • S ⇒ A ⇒ aA ⇒ aB ⇒ abB ⇒ ab

Repaired, unambiguous grammar:

$ S \leftarrow A $
$ A \leftarrow aA | B $
$ B \leftarrow bB | \epsilon $

9.2.2.

$ S \leftarrow AS | \epsilon $
$ A \leftarrow 0A1 | 01 | B $
$ B \leftarrow B1 | \epsilon $

Click to display ⇲

Click to hide ⇱

Ambiguuous: yes
  • S ⇒ $ \epsilon $
  • S ⇒ AS ⇒ BS ⇒ S ⇒ $ \epsilon $

Repaired:
$ S \leftarrow AS | \epsilon $
$ A \leftarrow 0A’1B $
$ A’ \leftarrow 0A’1 | \epsilon $
$ B \leftarrow B1 | \epsilon $

9.2.3.

$ S \leftarrow ASB | BSA | \epsilon $
$ A \leftarrow aA | \epsilon $
$ B \leftarrow bB | \epsilon $

Click to display ⇲

Click to hide ⇱

Ambiguuous: yes
  • S ⇒ ε
  • S ⇒ ASB ⇒ SB ⇒ B ⇒ $ \epsilon $

Repaired:
$ S \leftarrow aSb | bSa | b | a | \epsilon $

9.2.4. Write an ambiguous grammar for $ L(a^*) $.

Click to display ⇲

Click to hide ⇱

$ S \leftarrow aS | aaS \epsilon $
Ambiguuous: yes
  • S ⇒ aS ⇒ aaS ⇒ aa
  • S ⇒ aaS ⇒ aa