Download presentation

Presentation is loading. Please wait.

Published byMaci Hackney Modified over 2 years ago

1
David Evans http://www.cs.virginia.edu/evans cs302: Theory of Computation University of Virginia Computer Science Lecture 11: Parsimonious Parsing

2
2 Lecture 11: Parsimonious Parsing Menu Fix proof from last class Interpretive Dance! Parsimonious Parsing (Parsimoniously) PS3 Comments Available Today PS3 will be returned Tuesday

3
3 Lecture 11: Parsimonious Parsing Closure Properties of CFLs If A and B are context free languages then: A R is a context-free language TRUE A * is a context-free language TRUE A is a context-free language (complement)? A B is a context-free language TRUE A B is a context-free language ?

4
4 Lecture 11: Parsimonious Parsing Complementing Non-CFLs L ww = {ww | w Σ* } is not a CFL. Is its complement? Yes. This CFG recognizes is: S 0S0 | 1S1 | 0X1 | 1X0 X 0X0 | 1X1 | 0X1 | 1X0 | 0 | 1 | ε Bogus Proof! S 0X1 01X01 0101 L ww What is the actual language?

5
5 Lecture 11: Parsimonious Parsing CFG for L ww (L ww ) S S Odd | S Even All odd length strings are in L ww S Odd 0R | 1R | 0 | 1 R 0S Odd | 1S Odd S Even XY | YX X ZXZ | 0 Y ZYZ | 1 Z 0 | 1 How can we prove this is correct?

6
6 Lecture 11: Parsimonious Parsing S odd generates all odd-length strings S Odd 0R | 1R | 0 | 1 R 0S Odd | 1S Odd Proof by induction on the length of the string. Basis. S Odd generates all odd-length strings of length 1. There are two possible strings: 0 and 1. They are produces from the 3 rd and 4 th rules. Induction. Assume S Odd generates all odd-length strings of length n for n = 2k+1, k 0. Show it can generate all odd-length string of length n+2.

7
7 Lecture 11: Parsimonious Parsing S Odd generates all odd-length strings S Odd 0R | 1R | 0 | 1 R 0S Odd | 1S Odd Induction. Assume S Odd generates all odd-length strings of length n for n = 2k+1, k 0. Show it can generate all odd-length string of length n+2. All n+2 length strings are of the form abt where t is an n - length string and a {0, 1}, b {0, 1}. There is some derivation from S Odd * t (by the induction hypothesis). We can generate all four possibilities for a and b : 00t : S Odd 0R 00S Odd * 00t 01t : S Odd 0R 01S Odd * 01t 10t : S Odd 1R 10S Odd * 10t 11t : S Odd 1R 11S Odd * 01t

8
8 Lecture 11: Parsimonious Parsing CFG for L ww (L ww ) S S Odd | S Even S Odd 0R | 1R | 0 | 1 R 0S Odd | 1S Odd S Even XY | YX X ZXZ | 0 Y ZYZ | 1 Z 0 | 1 ? Proof-by-leaving-as-“Challenge Problem” (note: you cannot use this proof technique in your answers)

9
9 Lecture 11: Parsimonious Parsing Even Strings Show S Even generates the set of all even-length strings that are not in L ww. Proof by induction on the length of the string. Basis. S Even generates all even-length strings of length 0 that are not in L ww. The only length 0 string is ε. ε is in L ww since ε = εε, so ε should not be generated by S Even. Since S Even does not contain any right sides that go to ε, this is correct. S Even XY | YX X ZXZ | 0 Y ZYZ | 1 Z 0 | 1

10
10 Lecture 11: Parsimonious Parsing Closure Properties of CFLs If A and B are context free languages then: A R is a context-free language TRUE A * is a context-free language TRUE A is not necessarily a context-free language (complement) A B is a context-free language TRUE A B is a context-free language ? Left for you to solve (possibly on Exam 1)

11
11 Lecture 11: Parsimonious Parsing Where is English? Regular Languages Context-Free Languages Violates Pumping Lemma For RLs Violates Pumping Lemma For CFLs Described by DFA, NFA, RegExp, RegGram Described by CFG, NDPDA 0n1n0n1n 0n1n2n0n1n2n 0n0n w A ww Deterministic CFLs

12
12 Lecture 11: Parsimonious Parsing English Regular Languages The cat likes fish. The cat the dog chased likes fish. The cat the dog the rat bit chased likes fish. … This is a pumping lemma proof!

13
13 Lecture 11: Parsimonious Parsing Chomsky’s Answer (Syntactic Structures, 1957) = DFA = CFG

14
14 Lecture 11: Parsimonious Parsing Current Answer Most linguists argue that most natural languages are not context- free But, it is hard to really answer this question: e.g., “The cat the dog the rat bit chased likes fish.” English?

15
15 Lecture 11: Parsimonious Parsing Where is Java? Regular Languages Context-Free Languages Violates Pumping Lemma For RLs Violates Pumping Lemma For CFLs Described by DFA, NFA, RegExp, RegGram Described by CFG, NDPDA 0n1n0n1n 0n1n2n0n1n2n 0n0n w A ww Deterministic CFLs

16
16 Lecture 11: Parsimonious Parsing Interpretive Dance

17
17 Lecture 11: Parsimonious Parsing Where is Java? Regular Languages Context-Free Languages Violates Pumping Lemma For RLs Violates Pumping Lemma For CFLs Described by DFA, NFA, RegExp, RegGram Described by CFG, NDPDA 0n1n0n1n 0n1n2n0n1n2n 0n0n w A ww Deterministic CFLs

18
18 Lecture 11: Parsimonious Parsing What is the Java Language? public class Test { public static void main(String [] a) { println("Hello World!"); } Test.java:3: cannot resolve symbol symbol : method println (java.lang.String) // C:\users\luser\Test.java public class Test { public static void main(String [] a) { println ("Hello Universe!"); } Test.java:1: illegal unicode escape // C:\users\luser\Test.java In the Java Language Not in the Java Language

19
19 Lecture 11: Parsimonious Parsing // C:\users\luser\Test.java public class Test { public static void main(String [] a) { println ("Hello Universe!"); } > javac Test.java Test.java:1: illegal unicode escape // C:\users\luser\Test.java ^ Test.java:6: 'class' or 'interface' expected } ^ Test.java:7: 'class' or 'interface' expected ^ Test.java:4: cannot resolve symbol symbol : method println (java.lang.String) location: class Test println ("Hello World"); ^ 4 errors Parsing errors Scanning error Static semantic errors

20
20 Lecture 11: Parsimonious Parsing Defining the Java Language { w | w can be generated by the CFG for Java in the Java Language Specification } { w | a correct Java compiler can build a parse tree for w }

21
21 Lecture 11: Parsimonious Parsing Parsing S S + M | M M M * T | T T (S) | number 3 + 2 * 1 S S M + MT * 1 T 2 M T 3 Derivation Parsing Programming languages are (should be) designed to make parsing easy, efficient, and unambiguous.

22
22 Lecture 11: Parsimonious Parsing Unambiguous S S + S | S * S | (S) | number 3 + 2 * 1 S S S + S * 1 2 3 S S S S * 1 S S + 3 2

23
23 Lecture 11: Parsimonious Parsing Ambiguity How can one determine if a CFG is ambiguous? Super-duper-challenge problem: create a program that solve the “is this CFG ambiguous” problem: Input: CFG Output: “Yes” (ambiguous)/“No” (unambiguous) Warning: Undecidable Problem Alert! (Not only can you not do this, it is impossible for any program to do this.) (We will cover undecidable problems after Spring Break)

24
24 Lecture 11: Parsimonious Parsing Parsing S S + M | M M M * T | T T (S) | number 3 + 2 * 1 S S M + MT * 1 T 2 M T 3 Derivation Parsing Programming languages are (should be) designed to make parsing easy, efficient, and unambiguous.

25
25 Lecture 11: Parsimonious Parsing “Easy” and “Efficient” “Easy” - we can automate the process of building a parser from a description of a grammar “Efficient” – the resulting parser can build a parse tree quickly (linear time in the length of the input)

26
26 Lecture 11: Parsimonious Parsing Recursive Descent Parsing S S + M | M M M * T | T T (S) | number Parse() { S(); } S() { try { S(); expect(“+”); M(); } catch { backup(); } try { M(); } catch {backup(); } error(); } M() { try { M(); expect(“*”); T(); } catch … try { T(); } catch { backup(); } error (); } T() { try { expect(“(“); S(); expect(“)”); } catch …; try { number(); } catch …; } Advantages: Easy to produce and understand Can be done for any CFG Problems: Inefficient (might not even finish) “Nondeterministic”

27
27 Lecture 11: Parsimonious Parsing LL(k) (Lookahead-Left) A CFG is an LL(k) grammar if it can be parser deterministically with tokens lookahead S S + M | M M M * T | T T (S) | number 1 + S S + M S M S S + M 2 LL(1) grammar

28
28 Lecture 11: Parsimonious Parsing Look-ahead Parser Parse() { S(); } S() { if (lookahead(1, “+”)) { S(); eat(“+”); M(); } else { M();} M() { if (lookahead(1, “*”)) { M(); eat(“*”); T(); } else { T(); } } T() { if (lookahead(0, “(“)) { eat(“(“); S(); eat(“)”); } else { number();} S S + M | M M M * T | T T (S) | number

29
29 Lecture 11: Parsimonious Parsing JavaCC Input: Grammar specification Output: A Java program that is a recursive descent parser for the specified grammar https://javacc.dev.java.net/ Doesn’t work for all CFGs: only for LL(k) grammars

30
30 Lecture 11: Parsimonious Parsing Language Classes Regular Languages Context-Free Languages Violates Pumping Lemma For RLs Violates Pumping Lemma For CFLs Described by DFA, NFA, RegExp, RegGram Described by CFG, NDPDA 0n1n0n1n 0n1n2n0n1n2n 0n0n w ww Deterministic CFLs LL(k) Languages Described by LL(k) Grammar Java Python Scheme

31
31 Lecture 11: Parsimonious Parsing Next Week Monday (2): Office Hours (Qi Mi in 226D) Monday (5:30): TA help session Tuesday’s class (Pieter Hooimeyer): starting to get outside the yellow circle: using grammars to solve security problems Wednesday (9:30am): Office Hours (Qi Mi in 226D) Wednesday (6pm): TAs’ Exam Review Thursday: exam in class

Similar presentations

© 2017 SlidePlayer.com Inc.

All rights reserved.

Ads by Google