Edit this page Backlinks This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ====== 9. Context-Free Languages ====== ===== 9.1. Accepting and generating a CF language ===== 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}\} $. <hidden> <note important> S $ \leftarrow $ A S A | B S B | A | B | $ \varepsilon $ </note> </hidden> **9.1.2.** $ L = \{ A^{m} B^{m+n} C^{n} \ | \: n, m \geq 0 \} $ <hidden> <note important> S $ \leftarrow $ X Y X $ \leftarrow $ A X B | $ \varepsilon $ Y $ \leftarrow $ B Y C | $ \varepsilon $ </note> </hidden> **9.1.3.** $ L = \{w \in \{a, b\}^* | \#_a(w) = \#_b(w) \} $ <hidden> <note warning> 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” </note> <note important> **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 </note></hidden> **9.1.4.** $ L = \{w \in \{a, b\}^* | \#_a(w) \neq \#_b(w) \} $ <hidden> <note important> 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 </note> </hidden> **9.1.5.** $ L = \{a^ib^jc^k | i = j \lor j = k \} $ \\ <hidden> <note important> 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 $ </note> </hidden> ===== 9.2. Ambiguous grammars ===== 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 $ <hidden> <note important> 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 $ </note> </hidden> **9.2.2.** $ S \leftarrow AS | \epsilon $ \\ $ A \leftarrow 0A1 | 01 | B $\\ $ B \leftarrow B1 | \epsilon $ <hidden><note important> 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 $ </note></hidden> **9.2.3.** $ S \leftarrow ASB | BSA | \epsilon $\\ $ A \leftarrow aA | \epsilon $\\ $ B \leftarrow bB | \epsilon $ <hidden> <note important> Ambiguuous: yes * S ⇒ ε * S ⇒ ASB ⇒ SB ⇒ B ⇒ $ \epsilon $ Repaired: \\ $ S \leftarrow aSb | bSa | b | a | \epsilon $ </note> </hidden> **9.2.4.** Write an ambiguous grammar for $ L(a^*) $.