Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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 ​$
-\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 $ 
  
-$ \leftarrow $ B Y C | $ \varepsilon ​$+<​hidden>​ 
 +<note important>​ 
 +\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>
-$ \leftarrow $ a B S | b a S \varepsilon ​         +Try #1:\\ 
 +\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 ​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>​
-$ \leftarrow $ A | B+\leftarrow ​A | B $ \\ 
 +$ A \leftarrow G |GA $ \\ 
 +\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 |}}
  
-$ \leftarrow $ |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.
  
-$ \leftarrow ​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 $    
  
-$ \leftarrow $ b | 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' ​$ \\ 
-\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>​