context free
play

Context-free A derivation tree or parse tree in G Grammars and - PowerPoint PPT Presentation

Context-free A derivation tree or parse tree in G Grammars and Languages Example strings in L(G) Another string in L(G) (start or sentence) (rules) 1 2 n e o l p i t m a (only; produces or may be


  1. Context-free A derivation tree or parse tree in G Grammars and Languages Example strings in L(G) Another string in L(G) (“start” or “sentence”) (“rules”) 1 2 n e o l p i t m a (only; “produces” or “may be rewritten as”) t a o x N E : ε i.e., “context-free” (reflexive, transitive closure of ⇒ ; “0 or more steps”) k ≥ 0 0 1 ⋮ = = = 0 1 Note that L(G) is non-regular 3 4

  2. E E x x a a m m p p l l e e We’ll see later that L two ={ww|w ∈ Σ *} is not context free. At first : glance, you might think that adding a new start symbol S’ and a rule S’ → SS to G 2 would generate L two , but it doesn’t; it generates all strings in L two plus many others, since derivations from the two S’s are not coordinated . (Why not? It’s context-free ; what happens to one S can’t influence the other.) 5 6 A grammar A tree Trees, Derivations and Ambiguity 3 derivations correspond to same tree (same rules being used in the same places, just written in different orders in the linear derivation) 1) E => P+E => a+E => a+P => a+a 2) E => P+E => P+P => a+P => a+a 3) E => P+E => P+P => P+a => a+a But only one leftmost derivation corresponds to it (and vice versa). (more in HW?) 7 8

  3. Another grammar for the same language: E → E+E | E*E | (E) | a Fig 2.6: Two parse trees for a+a ! a in grammar G 5 Fig 2.6: Two parse trees for a+a ! a in grammar G 5 This grammar is ambiguous: there is a string in L(G 5 ) with two different parse trees, or, equivalently, with 2 different leftmost derivations. Note the pragmatic difference: in general, (a+a)*a != a+(a*a); which is “right”? 9 10 The “E, P” grammar again This grammar is un ambiguous. (Why? Very informally, the 3 E rules generate P((‘+’ ∪ ’*’)P) * and only via a parse tree that “hangs to the right”, as shown.) But it has another undesirable feature: Parse tree structure does not reflect the usual precedence of * over +. E.g., tree at lower right suggests “a * a + a == a * (a + a)” A more complex grammar, again the same language. This one is unambiguous and its parse trees reflect usual precedence/associativity of plus and times. 11 12

  4. Can we always tweak the grammar to make it unambiguous? G Some closure results No! Language L is a CFL; grammar at left. Easy to see this G is ambiguous–strings of the form a n b n c n can come from the i=j (AC) or j=k (DB) for CFLs path. Hard to prove, but true, that every G for this L is also ambiguous. Intuitively, a grammar can only match a’s & b’s or b’s & c’s, not both. As a related point, { a n b n c n | n>0 } is not CFL. G is ambiguous L is inherently ambiguous , meaning every G for L is ambiguous 13 14 Proof: Closure under Concatenation Theorem: The set of context-free languages is closed under ∪ , •, and * V 2 Corollary: All regular languages are CFLs Proof Sketch: Directly give simple CFLs for ∅ , { ε }, and {a} for each a ∈ Σ . Combine them using the above theorem. (Aside: We’ll later prove that CFLs are not closed under G 2 G 1 intersection or complementation.) G G G 15 16

  5. G Then, for some x, y ε Σ * G G A key issue in this direction of the proof is that, since V 1 ∩ V 2 = ∅ , there is no “crosstalk” between the two sub-grammars: any derivation in G from S 1 is also a derivation in G 1 , and likewise S 2 /G 2 , so derivation (*) above in G can be split into (**) in G 1 & G 2 . 17

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend