200 likes | 319 Vues
This guide details the algorithm for removing Λ-productions from context-free grammars that do not include the empty string (Λ). The process includes identifying nonterminals that derive Λ, constructing new productions where necessary, and combining these productions while eliminating any Λ-productions. Examples illustrate how to modify grammars, transitioning to both Chomsky Normal Form (CNF) and Greibach Normal Form (GNF). Key steps are illustrated with clear transformations ensuring understanding of these essential operations in formal language theory.
E N D
Chapter 12: Context-Free Languages and Pushdown Automata Section 12.4 Context-Free Language Topics James L. Hein - Discrete Structures, Logic, and Computability
Remove Λ-productions Algorithm. Remove Λ-productions from grammars for langauges without Λ. 1. Find nonterminals that derive Λ. 2. For each production A → w construct all productions A → w’ where w’ is obtained from w by removing one or more occurrences of the nonterminals from Step 1. 3. Combine the original productions with those of step 2 and eliminate any Λ-productions. James L. Hein - Discrete Structures, Logic, and Computability
Example Remove Λ-productions from the grammar S → ABc A → aA | Λ B → bB | Λ. Solution. • Step 1: The nonterminals A and B derive Λ. • Step 2: From the production S → ABc we construct S → Bc | Ac | c. From the production A → aA we construct A → a. From the production B → bB we construct B → b. • Step 3: S → ABc | Bc | Ac | c A → aA | a B → bB | b. James L. Hein - Discrete Structures, Logic, and Computability
Quiz Remove Λ -productions from S → ABc | Ab | c A → ABa | Λ B → Bbc | Λ. Solution. S → ABc | Ab | c| Bc | Ac | b A → ABa | Ba | Aa | a B → Bbc | bc. James L. Hein - Discrete Structures, Logic, and Computability
Chomsky Normal Form Productions have one of the following forms • A → b (b a terminal) • A → BC • S → Λ (if Λ is in the language). Advantages: Parse trees are binary, which are easy to represent. Any string of length n > 0 can be derived in 2n – 1 steps. James L. Hein - Discrete Structures, Logic, and Computability
Transform context-free grammar to Chomsky normal form Algorithm. Transform context-free grammar to Chomsky normal form 1. Remove A → Λ (if A ≠ S) by previous algorithm. (If S → Λ is removed, add it back.) 2. Remove unit productions (i.e., A → B): If A → B or A + B, then construct productions A → w where B → w is not a unit production. Now remove all unit productions. 3. For each production whose right side has two or more symbols, replace all occurrences of each terminal a with a new nonterminal A and also add the new production A → a. 4. Replace each production B → C1…Cn with n > 2 with B → C1D where D → C2 …Cn. Repeat this step until all right sides have length two. James L. Hein - Discrete Structures, Logic, and Computability
Example Construct a Chomsky normal form for the grammar S → aSb | D D → Dc | Λ. Solution. Step 1: S → aSb | ab | D | Λ D → Dc | c. Step 2: S → aSb | ab | Dc | c | Λ D → Dc | c. Step 3: S → ASB | AB | DC | c | Λ D → DC | c A → a B → b C → c. Step 4: Replace S → ASB by S → AE and E → SB. James L. Hein - Discrete Structures, Logic, and Computability
Quiz Construct a Chomsky normal form for the grammar S → aSbb | T | Λ T → cT | d. Solution. Step 1: No change in Λ -productions. Step 2: Remove unit production S → T to obtain S → aSbb | cT | d | Λ T → cT | d. Step 3: Transform right sides of length at least two into strings of nonterminals. S → ASBB | CT | d | Λ T → CT | d A → a B → b C → c. Step 4: Transform right sides into strings of length at most two. S → AD | CT | d | Λ D → SE E→ BB T → CT | d A → a B → b C → c. James L. Hein - Discrete Structures, Logic, and Computability
Greibach Normal Form Productions have one of the following forms A → b (b a terminal) A → bD1…Dk S → Λ (if Λ is in the language). Advantage: Any string of length n > 0 can be derived in n steps. James L. Hein - Discrete Structures, Logic, and Computability
Transform context-free grammar to Greibach normal form Algorithm (idea). Transform context-free grammar to Greibach normal form. 1. Remove all left-recursion. 2. Remove Λ−productions. (If S → Λ is removed, add it back.) 3. Make substitutions to transform the grammar into the proper form. James L. Hein - Discrete Structures, Logic, and Computability
Example Put the following grammar into Greibach normal form. S → AB | Ac | d A → aA | a B→ Ab | c. Solution: Steps 1 and 2 are unnecessary for this grammar. Step 3: Replace A in S → AB | Ac | d with aA | a to obtain S → aAB | aB | aAc | ac | d. Replace A in B→ Ab | c with aA | a to obtain B→ aAb | ab | c. Add the new productions C → c and D → b to obtain the proper form: S → aAB | aB | aAC | aC | d A → aA | a B→ aAD | aD | c C → c D → b. James L. Hein - Discrete Structures, Logic, and Computability
Quiz Put the following grammar into Greibach normal form. S → BaS | B B→ cSd | a. Solution: Steps 1 and 2 are unnecessary for this grammar. Step 3: Replace B in S → BaS | B with cSd | a to obtain: S → cSdaS | aaS | cSd | a. Add the new productions A → a and D → d to obtain the proper form: S → cSDAS | aAS | cSD | a A → a D → d B→ cSD | a (Not needed in this example). James L. Hein - Discrete Structures, Logic, and Computability
Properties of Context-Free Languages When we know some properties of context-free languages they can help us argue, BWOC, that certain languages are not context-free. James L. Hein - Discrete Structures, Logic, and Computability
The Pumping Lemma If L is an infinite context-free language, then any grammar for L must be recursive, so there must be derivations of the following form where u, v, w, x, and y are terminal strings. S ➾+ uNy N ➾+ vNx (where v and x are not both Λ) N ➾+ w. These derivations lead to derivations like S ➾+ uNy ➾+ uvNxy ➾+ uv2Nx2y ➾+ uvkNxky ➾+ uvkwxky ∊L for all k ∊N. This is the basis for the Pumping Lemma: There is an integer m > 0 such that if z ∊L and | z | ≥ m, then z has the form z = uvwxy where 1 ≤ | vx | ≤ | vwx | ≤ m and uvkwxky ∊L for all k ∊N. Note: The number m depends on the grammar as we’ll see in the following example. James L. Hein - Discrete Structures, Logic, and Computability
Example Suppose we have the following grammar for {Λ, bbc} ⋃ {abcnd | n ∊N}. S → aNd | bbc | Λ N→ Nc | b. Here are a few derivations: S ➾aNd ➾abd S ➾aNd ➾aNcd ➾abcd S ➾aNd ➾aNcd ➾aNccd ➾abccd S ➾+ abckd for any k in N. For this grammar m = 4 can be used in the pumping lemma because any derivation of a string z with | z | ≥ 4 must use the nonterminal N. For example, if | z | = 8 and z = abcccccd, then the pumping lemma factors z = abcccccd = uvwxy where 1 ≤ | vx | ≤ | vwx | ≤ 4 and uvkwxky ∊L for all k ∊N. In this case let u = a, v = Λ, w = b, x = c, and y = ccccd. James L. Hein - Discrete Structures, Logic, and Computability
Example The language L = {anbncn+k | k, n ∊N} is not context-free. Proof: Assume, BWOC, that L is context-free. L is infinite, so pumping lemma applies. Choose z = ambmcm where m is the positive integer from the lemma. Then z = ambmcm = uvwxy where 1 ≤ | vx | ≤ | vwx | ≤ m and uvkwxky ∊L for all k ∊N. Observe neither v nor x can contain distinct letters. For example, if v = …a…b…, then v2 = …a…b……a…b…, which can’t appear as a substring of any string in L. So v and x must be strings of repeated occurrences of a single letter. Now since | vwx | ≤ m, there are two possible places in ambmcmwhere v and x must occur: (1) v and x occur in ambm. (2) v and x occur in bmcm. But we obtain the following contradictions because v and x are not both Λ. (1) Let k = 2 to obtain uv2wx2y = am+ibm+jcm, where i > 0 or j > 0. So uv2wx2y ∉ L (2) Let k = 0 to obtain uwy = ambm-icm–j, where i > 0 or j > 0. So we have uwy ∉ L. These contradictions imply that L is not context-free. QED. James L. Hein - Discrete Structures, Logic, and Computability
Example/Quiz Prove that the language L = {ss | s ∊ {a, b}*} is not context-free. Proof: Assume, BWOC, that L is context-free. L is infinite, so pumping lemma applies. Choose z = ambmambmwhere m is the positive integer from the lemma. Then z = ambmambm = uvwxy where 1 ≤ | vx | ≤ | vwx | ≤ m and uvkwxky ∊L for all k ∊N. Now since | vwx | ≤ m, there are three possible places in ambmambmwhere v and x must occur: (1) v and x occur in ambm(on the left of z). (2) v and x occur in bmam(in the center of z). (3) v and x occur in ambm(on the right of z). Notice that v and x can consist only of repetitions a single letter. For example, in case (1) suppose v = aibjfor some i > 0 and j > 0 and x = bnfor some n ≥ 0. Then, letting k = 0, we would obtain uwy = am–ibm–j–nambm, which cannot be in L. The argument is similar for the other cases. So v and x must consist only of repetitions of a single letter. James L. Hein - Discrete Structures, Logic, and Computability
Example/Quiz Cont’d We need to find a contradiction in each of the three cases. We’ll do it by using k = 0. This tells us that uwy ∊L. But we obtain the following contradictions because v and x are not both Λ. (1) uwy = am–ibm–jambmwhere either i > 0 or j > 0 So uwy ∉ L, (2) uwy = ambm–iam–jbmwhere either i > 0 or j > 0. So uwy ∉ L. (3) uwy = ambmam–ibm–jwhere either i > 0 or j > 0. So uwy ∉ L. Therefore L is not context-free. QED. Remark: Be careful that the choice of z is not in a context-free sublanguage of L. For example, if we chose z = (ab)m(ab)min the preceding example, we would not get any contradictions. James L. Hein - Discrete Structures, Logic, and Computability
The End of Chapter 12 - 4 James L. Hein - Discrete Structures, Logic, and Computability