Download presentation
Presentation is loading. Please wait.
Published byJared Mason Modified over 8 years ago
1
CS 154 Formal Languages and Computability March 17 Class Meeting Department of Computer Science San Jose State University Spring 2016 Instructor: Ron Mak www.cs.sjsu.edu/~mak
2
Computer Science Dept. Spring 2016: March 17 CS 154: Formal Languages and Computability © R. Mak Pumping Lemma for Context-Free Languages Yes, there is one for context-free languages, too. Like the one for regular languages, use the pumping lemma to prove that a language is not context-free. Unfortunately, it’s even harder to use than the one for regular languages. 2
3
Computer Science Dept. Spring 2016: March 17 CS 154: Formal Languages and Computability © R. Mak Context-Free Pumping Lemma, cont’d If L is an infinite context-free language, then there exists some positive integer m such that for any string w in L with |w| ≥ m We can decompose w = uvxyz with |vxy| ≤ m and |vy| ≥ 1 (i.e., vy is nonempty) such that uv i xy i z is also in L, with i = 0, 1, 2, … In other words, strings in a context-free language can be pumped, and the pumped strings are also in the language. 3
4
Computer Science Dept. Spring 2016: March 17 CS 154: Formal Languages and Computability © R. Mak Context-Free Pumping Lemma, cont’d S and A are variables in context-free grammar L. Variable A can be repeated i times during the derivation of a sufficiently long string in L, i = 0, 1, 2, …, we pump substrings v and y. Example: 4 S A A uv x yz Note that |v| and |y| are not necessarily equal. S A A A uv x yzvy
5
Computer Science Dept. Spring 2016: March 17 CS 154: Formal Languages and Computability © R. Mak Context-Free Pumping Lemma, cont’d Again, by using proof by contradiction, the pumping lemma for context-free languages enables us to prove that a given language is not context-free. We only have to find one string that violates the pumping lemma. This can be harder to do than the regular language pumping lemma. We only have a bound on the length of substring vxy. We don’t know the length of the prefix substring u. 5
6
Computer Science Dept. Spring 2016: March 17 CS 154: Formal Languages and Computability © R. Mak Example Pumping Lemma Proof #1 Prove that is not context-free. Choose the string w = a m b m a m b m which is in L. The substring vxy can lie anywhere in w. Example: In all cases, choose i = 0 to remove v and y. The resulting string is not in L. 6 If L is a regular language, then for any w in L with |w| ≥ m, we can decompose w = uvxyz with |vxy| ≤ m and |vy| ≥ 1 such that uv i xy i z is also in L. b Formal Languages and Automata, 5 th ed. Peter Linz Jones & Bartlett, 2012
7
Computer Science Dept. Spring 2016: March 17 CS 154: Formal Languages and Computability © R. Mak Example Pumping Lemma Proof #2 Prove that is not context-free. Choose the string w = a m! which is in L. Therefore, no matter what the decomposition is, v = a j and y = a k. When i = 0, w 0 = uxz has length m! – (j + k). But since j + k ≤ m m! – (j + k) ≥ m! – m = m[(m – 1)! – 1] > (m – 1)! Therefore, m! – (j + k) is between (m – 1)! and m! and so w cannot be in L. 7 If L is a regular language, then for any w in L with |w| ≥ m, we can decompose w = uvxyz with |vxy| ≤ m and |vy| ≥ 1 such that uv i xy i z is also in L. In order for w 0 to be in L, its length m! – (j + k) must equal some factorial.
8
Computer Science Dept. Spring 2016: March 17 CS 154: Formal Languages and Computability © R. Mak Example Pumping Lemma Proof #3 Prove that, r is a substring of s, and @ is a string symbol} is not context-free. Choose string w = a m b m @a m b m which is in L. If either v or y contains @, then when i = 0, uxz would not contain @ and thus cannot be in L. If both v and y are left of the @, uv 2 xy 2 z cannot be in L because the left side would have a longer length and can’t be a substring of the right side. 8 If L is a regular language, then for any w in L with |w| ≥ m, we can decompose w = uvxyz with |vxy| ≤ m and |vy| ≥ 1 such that uv i xy i z is also in L.
9
Computer Science Dept. Spring 2016: March 17 CS 154: Formal Languages and Computability © R. Mak Example Pumping Lemma Proof #3, cont’d If both v and y are right of the @, uv 0 xy 0 z cannot be in L again because the left side would have a longer length and can’t be a substring of the right side. If v and y straddle the @, then v consists of b ’s and y consists of a ’s since |vwy| ≤ m. But then pumping would increase the number of b ’s to the left of @ and increase the number of a ’s to the right of @, and the resulting string cannot be in L. 9 If L is a regular language, then for any w in L with |w| ≥ m, we can decompose w = uvxyz with |vxy| ≤ m and |vy| ≥ 1 such that uv i xy i z is also in L.
10
Computer Science Dept. Spring 2016: March 17 CS 154: Formal Languages and Computability © R. Mak Assignment #5 Use the pumping lemma for context-free languages to prove that each of the following languages is not context-free. L 1 = {a n b 2n a n : n ≥ 0} L 2 = {a n : n is a perfect square} L 3 = {a n : n is prime} Submit into Canvas: Assignment #5 Due Wednesday, March 23. 10
11
Computer Science Dept. Spring 2016: March 17 CS 154: Formal Languages and Computability © R. Mak Context-Free Closure Properties The family of context-free languages is closed under union, concatenation, and star-closure. The family of context-free languages is not closed under intersection and complementation. If L 1 is a context-free language and L 2 is a regular language, then is context-free. Closure under regular intersection. 11
12
Computer Science Dept. Spring 2016: March 17 CS 154: Formal Languages and Computability © R. Mak Regular Intersection Example Show that is context-free. Let which is context-free. Let L 2 = {a 100 b 100 } which is finite and regular. Then, is regular because regular languages are closed under complementation. Then is context free by regular intersection. 12
13
Computer Science Dept. Spring 2016: March 17 CS 154: Formal Languages and Computability © R. Mak Context-Free Decidable Properties There is an algorithm to decide whether or not a given string w can be derived from a context- free grammar G. Membership Is w in L(G) ? There is an algorithm to decide whether or not L(G) is empty for a context-free grammar G. There is an algorithm to decide whether or not L(G) is infinite for a context-free grammar G. 13
14
Computer Science Dept. Spring 2016: March 17 CS 154: Formal Languages and Computability © R. Mak Assignment #4: JavaCC for Super Calculator 14 TOKEN : { | | | > | | "> | ="> |
15
Computer Science Dept. Spring 2016: March 17 CS 154: Formal Languages and Computability © R. Mak Assignment #4, cont’d 15 | )+> | )+ "." ( )+> | )+ ( )? ( )+> | )+ "." ( )+ ( )? ( )+> | }
16
Computer Science Dept. Spring 2016: March 17 CS 154: Formal Languages and Computability © R. Mak Assignment #4, cont’d 16 double expression() throws NumberFormatException : { double v, value; } { value = simpleExpr() ( v = simpleExpr() { value = value == v ? 1 : 0; } | v = simpleExpr() { value = value != v ? 1 : 0; } | v = simpleExpr() { value = value < v ? 1 : 0; } | v = simpleExpr() { value = value <= v ? 1 : 0; } | v = simpleExpr() { value = value > v ? 1 : 0; } | v = simpleExpr() { value = value >= v ? 1 : 0; } )? { return value; } }
17
Computer Science Dept. Spring 2016: March 17 CS 154: Formal Languages and Computability © R. Mak Assignment #4, cont’d 17 double simpleExpr() throws NumberFormatException : { double v, value; } { value = term() ( v = term() { value += v; } | v = term() { value -= v; } | v = term() { value = (value != 0) || (v != 0) ? 1 : 0; } )* { return value; } } double term() throws NumberFormatException : { double v, value; } { value = power() ( v = power() { value *= v; } | v = power() { value /= v; } | v = power() { value = (value != 0) && (v != 0) ? 1 : 0; } )* { return value; } }
18
Computer Science Dept. Spring 2016: March 17 CS 154: Formal Languages and Computability © R. Mak Assignment #4, cont’d 18 double power() throws NumberFormatException : { double v, value; } { value = factor() ( v = factor() { value = Math.pow(value, v); } )* { return value; } } double factor() throws NumberFormatException : { double value; } { value = primary() { return value; } | value = factor() { return -value; } | value = factor() { return value != 0 ? 0 : 1; } | value = expression() { return value; } }
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.