This is an old revision of the document!
9. Context-Free Languages
9.1. Accepting and generating a CF language
Find PDAs that accept each of the languages below, both by empty stack and by final state. Identify which approach feels more suitable for each language. Find CFGs for the languages. 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}\} $.
9.1.2. $ L = \{ A^{m} B^{m+n} C^{n} \ | \: n, m \geq 0 \} $
9.1.3. $ L = \{w \in \{a, b\}^* | \#_a(w) = \#_b(w) \} $
9.1.4. $ L = \{w \in \{a, b\}^* | \#_a(w) \neq \#_b(w) \} $
9.1.5. $ L = \{a^ib^jc^k | i = j \lor j = k \} $
9.1.6. Prove that PDAs that accept by empty stack and PDAs that accept by final state are equivalent. Find a transformation from a PDA accepting by empty stack to one accepting by final state and a transformation from a PDA accepting by final state to one accepting by empty stack.
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 $
9.2.2.
$ S \leftarrow AS | \epsilon $
$ A \leftarrow 0A1 | 01 | B $
$ B \leftarrow B1 | \epsilon $
9.2.3.
$ S \leftarrow ASB | BSA | \epsilon $
$ A \leftarrow aA | \epsilon $
$ B \leftarrow bB | \epsilon $
9.2.4. Write an ambiguous grammar for $ L(a^*) $.