Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
lfa:2022:lab09-cfl [2022/12/04 20:13] alexandra.udrescu01 |
lfa:2022:lab09-cfl [2022/12/17 11:05] (current) alexandra.udrescu01 |
||
---|---|---|---|
Line 10: | Line 10: | ||
<hidden> | <hidden> | ||
<note important> | <note important> | ||
- | + | $ S \leftarrow ASA | BSB | A | B | \epsilon $ | |
- | S $ \leftarrow $ A S A | B S B | A | B | $ \varepsilon $ | + | |
</note> | </note> | ||
+ | {{ :lfa:2022:lfa2022_lab9_1_1.png?400 |}} | ||
</hidden> | </hidden> | ||
+ | |||
+ | |||
**9.1.2.** $ L = \{ A^{m} B^{m+n} C^{n} \ | \: n, m \geq 0 \} $ | **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 $ | + | <hidden> |
+ | <note important> | ||
+ | $ S \leftarrow XY $ \\ | ||
+ | $ X \leftarrow AXB | \epsilon $ \\ | ||
+ | $ Y \leftarrow BYC | \epsilon $ | ||
</note> | </note> | ||
+ | {{ :lfa:2022:lfa2022_lab9_1_4.png?400 |}} | ||
</hidden> | </hidden> | ||
+ | |||
+ | |||
**9.1.3.** $ L = \{w \in \{a, b\}^* | \#_a(w) = \#_b(w) \} $ | **9.1.3.** $ L = \{w \in \{a, b\}^* | \#_a(w) = \#_b(w) \} $ | ||
+ | |||
+ | |||
<hidden> | <hidden> | ||
<note warning> | <note warning> | ||
- | S $ \leftarrow $ a B S | b a S | $ \varepsilon $ | + | Try #1:\\ |
+ | $ S \leftarrow abS | baS | \epsilon $ \\ | ||
+ | incomplete because of: “aabb” \\ | ||
+ | Try #2:\\ | ||
+ | $ S \leftarrow aSb | bSa | SS | \epsilon $ \\ | ||
+ | incomplete because of: “abab” | ||
+ | </note> | ||
- | ambiguuous because of: “ababab” | + | **Solution 1:** |
+ | We can either generate one ''a'' followed by one ''b'', as well as one ''b'' followed by one ''a''. At the same time, other sequences of equal number of a and b can appear freely, hence one solution is: | ||
+ | $math[S \leftarrow aSbS \mid bSaS \mid \epsilon] | ||
+ | /* | ||
+ | **Solution 2:** | ||
- | S $ \leftarrow $ a S b | b S a | S S | $ \varepsilon $ | + | <note important> |
- | + | **Idea:** A = rule that promises that exactly one letter 'a' is extra; B = rule that promises that exactly one letter 'b' is extra \\ | |
- | ambiguuous because of: “abab” | + | $ S \leftarrow aBS | bAS | \epsilon $ \\ |
+ | $ A \leftarrow a | bAA $ \\ | ||
+ | $ B \leftarrow b | aBB $ | ||
</note> | </note> | ||
+ | {{ :lfa:2022:lfa2022_lab9_1_3.png?300 |}} | ||
- | <note important> | + | We can easily check by induction (over the length of the derivation sequence) that $math[A \Rightarrow^* w] iff $math[\#_A(w) = 1 + \#_B(w)]. |
+ | The basis case (length 1) is straightforward as $math[A \Rightarrow a]. Now suppose $math[A \Rightarrow bAA \Rightarrow^* bw_1w_2]. By induction hypothesis: $math[\#_A(bw_1w_2) = \#_A(w_1) + \#_A(w_2) = \#_B(w_1) + 1 + \#_B(w_2) + 1 = \#_B(bw_1w_2)+1]. | ||
+ | */ | ||
+ | </hidden> | ||
- | **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) \} $ | **9.1.4.** $ L = \{w \in \{a, b\}^* | \#_a(w) \neq \#_b(w) \} $ | ||
+ | |||
<hidden> | <hidden> | ||
+ | /* | ||
+ | Solution 1: | ||
<note important> | <note important> | ||
- | S $ \leftarrow $ A | B | + | $ S \leftarrow A | B $ \\ |
+ | $ A \leftarrow G |GA $ \\ | ||
+ | $ B \leftarrow H | HB $ \\ | ||
+ | $ G \leftarrow Ea $ \\ | ||
+ | $ H \leftarrow Eb $ \\ | ||
+ | $ E \leftarrow aME | bNE | \epsilon $ \\ | ||
+ | $ M \leftarrow b | aMM $ \\ | ||
+ | $ N \leftarrow a | bNN $ \\ | ||
+ | Non-terminal E generates words with the same number of 'a' and 'b', as it was presented in the previous exercise. \\ | ||
+ | Non-terminal A generates words that have more "a", while B generates words with fewer "a". \\ Then S generates words with either more, or fewer 'a' than 'b'. | ||
+ | </note> | ||
+ | {{ :lfa:2022:lfa2022_lab9_1_4.png?400 |}} | ||
- | A $ \leftarrow $ G |G G | + | Solution 2: |
+ | */ | ||
+ | Start with a grammar that generates $math[L_= = \{w \in \{a, b\}^* | \#_a(w) = \#_b(w) \}], for instance $math[S \leftarrow aSbS | bSaS | \epsilon]. Next, we generate two grammars, one for $math[L_> = \{w \in \{a, b\}^* | \#_a(w) > \#_b(w) \}], and another for $math[L_< = \{w \in \{a, b\}^* | \#_a(w) < \#_b(w) \}], and we can combine them into our response. We illustrate writing a rule for the former. | ||
- | B $ \leftarrow $ H | H H | + | The language $math[L_>] can be described by the following language operations: $math[L_> = L_=(\{a\}L_=)^+]. Note that $math[\epsilon] is member of $math[L_=]. If $math[S] is the start symbol for $math[L_=], then our grammar is: $math[S_> \leftarrow SaST, T \leftarrow aST | \epsilon]. |
- | G $ \leftarrow $ E a | + | </hidden> |
- | H $ \leftarrow $ E b | ||
- | E $ \leftarrow $ a M E | b N E | $ \varepsilon $ | ||
- | M $ \leftarrow $ b | a M M | + | **9.1.5.** $ L = \{a^ib^jc^k | i = j \lor j = k \} $ \\ |
- | N $ \leftarrow $ a | b N N | ||
- | </note> | ||
- | </hidden> | ||
- | |||
- | **9.1.5.** $ L = \{a^ib^jc^k | i = j \lor j = k \} $ \\ | ||
<hidden> | <hidden> | ||
Line 87: | Line 108: | ||
$ S \leftarrow X | Y $ \\ | $ S \leftarrow X | Y $ \\ | ||
$ X \leftarrow ZC $ \\ | $ X \leftarrow ZC $ \\ | ||
- | $ Z \leftarrow aZb | \varepsilon $ \\ | + | $ Z \leftarrow aZb | \epsilon $ \\ |
- | $ C \leftarrow cC | \varepsilon $ \\ | + | $ C \leftarrow cC | \epsilon $ \\ |
$ Y \leftarrow AT $ \\ | $ Y \leftarrow AT $ \\ | ||
- | $ A \leftarrow aA | \varepsilon $ \\ | + | $ A \leftarrow aA | \epsilon $ \\ |
- | $ T \leftarrow bTc | \varepsilon $ | + | $ T \leftarrow bTc | \epsilon $ \\ |
</note> | </note> | ||
+ | {{ :lfa:2022:lfa2022_lab9_1_5.png?600 |}} | ||
</hidden> | </hidden> | ||
+ | |||
+ | |||
===== 9.2. Ambiguous grammars ===== | ===== 9.2. Ambiguous grammars ===== | ||
Line 104: | Line 128: | ||
$ A \leftarrow aA | B $ \\ | $ A \leftarrow aA | B $ \\ | ||
$ B \leftarrow bB | \epsilon $ | $ B \leftarrow bB | \epsilon $ | ||
+ | |||
+ | |||
<hidden> | <hidden> | ||
Line 115: | Line 141: | ||
Repaired, unambiguous grammar: | Repaired, unambiguous grammar: | ||
- | $ S \leftarrow A $ \\ | + | $ S \leftarrow A $ \\ |
$ A \leftarrow aA | B $ \\ | $ A \leftarrow aA | B $ \\ | ||
- | $ B \leftarrow bB | \epsilon $ | + | $ B \leftarrow bB | \epsilon $ |
</note> | </note> | ||
</hidden> | </hidden> | ||
+ | |||
+ | |||
**9.2.2.** | **9.2.2.** | ||
Line 128: | Line 156: | ||
$ A \leftarrow 0A1 | 01 | B $\\ | $ A \leftarrow 0A1 | 01 | B $\\ | ||
$ B \leftarrow B1 | \epsilon $ | $ B \leftarrow B1 | \epsilon $ | ||
+ | |||
Line 137: | Line 166: | ||
Repaired: \\ | Repaired: \\ | ||
- | $ S \leftarrow AS | \epsilon $ \\ | + | $ S \leftarrow 1BS' | S' $ \\ |
- | $ A \leftarrow 0A’1B $ \\ | + | $ S' \leftarrow ABS' | \epsilon $ \\ |
- | $ A’ \leftarrow 0A’1 | \epsilon $ \\ | + | $ A \leftarrow 0A1 | 01 $ \\ |
$ B \leftarrow B1 | \epsilon $ | $ B \leftarrow B1 | \epsilon $ | ||
</note></hidden> | </note></hidden> | ||
+ | |||
+ | |||
**9.2.3.** | **9.2.3.** | ||
Line 150: | Line 181: | ||
$ A \leftarrow aA | \epsilon $\\ | $ A \leftarrow aA | \epsilon $\\ | ||
$ B \leftarrow bB | \epsilon $ | $ B \leftarrow bB | \epsilon $ | ||
+ | |||
Line 158: | Line 190: | ||
* S ⇒ ASB ⇒ SB ⇒ B ⇒ $ \epsilon $ | * S ⇒ ASB ⇒ SB ⇒ B ⇒ $ \epsilon $ | ||
+ | The grammar actually generates the language {a,b}*: | ||
+ | |||
+ | $ S \Rightarrow ASB \Rightarrow aASB \Rightarrow aSB \Rightarrow aS $ \\ | ||
+ | $ S \Rightarrow BSA \Rightarrow bBSA \Rightarrow bSA \Rightarrow bS $ | ||
Repaired: \\ | Repaired: \\ | ||
- | $ S \leftarrow aSb | bSa | b | a | \epsilon $ | + | $ S \leftarrow aS | bS | \epsilon $ |
</note> | </note> | ||
</hidden> | </hidden> | ||
+ | |||
**9.2.4.** Write an ambiguous grammar for $ L(a^*) $. | **9.2.4.** Write an ambiguous grammar for $ L(a^*) $. | ||
+ | |||
+ | |||
+ | |||
+ | <hidden><note important> | ||
+ | $ S \leftarrow aS | aaS | \epsilon $\\ | ||
+ | Ambiguuous: yes\\ | ||
+ | * S => aS => aaS => aa | ||
+ | * S => aaS => aa | ||
+ | </note></hidden> | ||