1 / 24

Module 29

Module 29. Parse/Derivation Trees Leftmost derivations, rightmost derivations Ambiguous Grammars Examples Arithmetic expressions If-then-else Statements Inherently ambiguous CFL’s. Context-Free Grammars. Parse Trees Leftmost/rightmost derivations Ambiguous grammars. Parse Tree.

Download Presentation

Module 29

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Module 29 • Parse/Derivation Trees • Leftmost derivations, rightmost derivations • Ambiguous Grammars • Examples • Arithmetic expressions • If-then-else Statements • Inherently ambiguous CFL’s

  2. Context-Free Grammars Parse Trees Leftmost/rightmost derivations Ambiguous grammars

  3. Parse Tree • Parse/derivation trees are structured derivations • The structure graphically illustrates semantic information about the string • Formalization of concept we encountered in regular languages unit • Note, what we saw before were not exactly parse trees as we define them now, but they were close

  4. S S S ( S ) ( S ) l ( S ) l Parse Tree Example • Parse tree for string ( )(( )) and grammar BALG • BALG = (V, S, S, P) • V = {S}, S = {(, )}, S = S • P = S --> SS | (S) | l • One derivation of ( )(( )) • S ==> SS ==> (S)S ==> ( )S ==> ( )(S) ==> ( )((S)) ==> ( )(( )) • Parse tree

  5. Syntax: draw a unique arrow from each variable to each character that is a direct child of that variable A line instead of an arrow is ok The derived string can be read in a left to right traversal of the leaves Semantics The tree graphically illustrates the nesting structure of the string of parentheses S S S ( S ) ( S ) l ( S ) l Comments about Example *

  6. There is more than one derivation of the string ( )(( )). S ==> SS ==> (S)S ==>( )S ==> ( )(S) ==> ( )((S)) ==> ( )(( )) S ==> SS ==> (S)S ==> (S)(S) ==> ( )(S) ==> ( )((S)) ==> ( )(( )) S ==> SS ==> S(S) ==> S((S)) ==> S(( )) ==> (S)(( )) ==>( )(( )) Leftmost derivation Leftmost variable is always expanded Which one of the above is leftmost? Rightmost derivation Rightmost variable is always expanded Which one of the above is rightmost? S S S ( S ) ( S ) l ( S ) l Leftmost/Rightmost Derivations

  7. Fix a string and a grammar Any derivation corresponds to a unique parse tree Any parse tree can correspond to many different derivations Example The one parse tree corresponds to all three derivations Unique mappings For any parse tree, there is a unique leftmost/rightmost derivation that it corresponds to S S S ( S ) ( S ) l ( S ) l Comments • S ==> SS ==> (S)S ==>( )S ==> ( )(S) ==> ( )((S)) ==> ( )(( )) • S ==> SS ==> (S)S ==> (S)(S) ==> ( )(S) ==> ( )((S)) ==> ( )(( )) • S ==> SS ==> S(S) ==> S((S)) ==> S(( )) ==> (S)(( )) ==>( )(( ))

  8. Example * • S ==> SS ==> SSS ==> (S)SS ==> ( )SS ==> ( )S ==> ( ) • The above is a leftmost derivation of the string ( ) from the grammar BALG • Draw the corresponding parse tree • Draw the corresponding rightmost derivation • S ==> (S) ==> (SS) ==> (S(S)) ==> (S( )) ==> (( )) • The above is a rightmost derivation of the string (( )) from the grammar BALG • Draw the corresponding parse tree • Draw the corresponding leftmost derivation

  9. Ambiguous Grammars Examples: Arithmetic Expressions If-then-else statements Inherently ambiguous grammars

  10. Ambiguous Grammars • A grammar G is ambiguous if there exists a string x in L(G) with two or more distinct parse trees • (2 or more distinct leftmost/rightmost derivations) • Example • Grammar AG is ambiguous • String aaa in L(AG) has 2 rightmost derivations • S ==> SS ==> SSS ==> SSa ==> Saa ==> aaa • S ==> SS ==> Sa ==> SSa ==> Saa ==> aaa

  11. 2 Simple Examples • Grammar BALG is ambiguous • String ( ) in L(BALG) has >1 leftmost derivation • S ==> (S) ==> ( ) • S ==> (S) ==> (SS) ==>(S) ==>( ) • Give another leftmost derivation of ( ) from BALG • Grammar ABG is NOT ambiguous • Consider any string x in {aibi | i > 0} • There is a unique parse tree for x

  12. Legal Arithmetic Expressions • Develop a grammar MATHG = (V, S, S, P) for the language of legal arithmetic expressions • S = {0, 1, +, *, -, /, (, )} • Strings in the language include • 0 • 10 • 10*11111+100 • 10*(11111+100) • Strings not in the language include • 10+ • 11++101 • )(

  13. Grammar MATHG1 • V = {E, N} • S = {0, 1, +, *, -, /, (, )} • S = E • P: • E --> N | E+E | E*E | E/E | E-E | (E) • N --> N0 | N1 | 0 | 1

  14. E --> N | E+E | E*E | E/E | E-E | (E)N --> N0 | N1 | 0 | 1 MATHG1 is ambiguous • Come up with two distinct leftmost derivations of the string 11+0*11 • E ==> E+E ==> N+E ==> N1+E ==> 11+E ==> 11+E*E ==> 11+N*E ==> 11+0*E ==> 11+0*N ==> 11+0*N1 ==> 11+0*11 • E ==> E*E ==> E+E*E ==> N+E*E ==> N1+E*E ==> 11+E*E ==> 11+N*E ==> 11+0*E ==> 11+0*N ==> 11+0*N1 ==>11+0*11 • Draw the corresponding parse trees

  15. E ==> E+E ==> N+E ==> N1+E ==> 11+E ==> 11+E*E ==> 11+N*E ==> 11+0*E ==> 11+0*N ==> 11+0*N1 ==> 11+0*11 E ==> E*E ==> E+E*E ==> N+E*E ==> N1+E*E ==> 11+E*E ==> 11+N*E ==> 11+0*E ==> 11+0*N ==> 11+0*N1 ==>11+0*11 E E * E + E E E + N E N * E N 1 N N N 1 N N N 0 1 1 0 N 1 1 1 1 Corresponding Parse Trees E E

  16. E E E E * E + E E E + N E N * E N 1 N N N 1 N N N 0 1 1 0 N 1 1 1 1 Parse Tree Meanings Note how the parse trees captures the semantic meaning of string 11+0*11. More specifically, what number does the first parse tree represent? What number does the second parse tree represent?

  17. Implications • Two interpretations of string 11+0*11 • 11+(0*11) = 11 • (11+0)*11 = 1001 • What if a line in a program is • MSU_Tuition = 11+0*11; • What is MSU_Tuition? • Depends on how the expression 11+0*11 is parsed. • This is not good. • Ambiguity in grammars is undesirable, particularly if the grammar is used to develop a compiler for a programming language like C++. • In this case, there is an unambiguous grammar for the language of arithmetic expressions

  18. If-Then-Else Statements • A grammar ITEG = (V, S, S, P) for the language of legal If-Then-Else statements • V = (S, BOOL) • S = {D<85, D>50, grade=3.5, grade=3.0, if, then, else} • S = S • P: • S --> if BOOL then S else S | if BOOL then S |grade=3.5 | grade=3.0 • BOOL --> D<85 | D>50

  19. S --> if BOOL then S |grade=3.5 | grade=3.0 | if BOOL then S else S BOOL --> D<85 | D>50 ITEG is ambiguous • Come up with two distinct leftmost derivations of the string • if D<85 then if D>50 then grade=3.5 else grade=3.0 • S ==>if BOOL then S else S ==> if D<85 then S else S ==> if D<85 then if BOOL then S else S ==> if D<85 then if D>50 then S else S ==> if D<85 then if D>50 then grade=3.5 else S ==> if D<85 then if D>50 then grade=3.5 else grade=3.0 • S ==>if BOOL then S ==> if D<85 then S ==> if D<85 then if BOOL then S else S ==> if D<85 then if D>50 then S else S ==> if D<85 then if D>50 then grade=3.5 else S ==> if D<85 then if D>50 then grade=3.5 else grade=3.0 • Draw the corresponding parse trees

  20. S ==>if BOOL then S else S ==> if D<85 then S else S ==> if D<85 then if BOOL then S else S ==> if D<85 then if D>50 then S else S ==> if D<85 then if D>50 then grade=3.5 else S ==> if D<85 then if D>50 then grade=3.5 else grade=3.0 S ==>if BOOL then S ==> if D<85 then S ==> if D<85 then if BOOL then S else S ==> if D<85 then if D>50 then S else S ==> if D<85 then if D>50 then grade=3.5 else S ==> if D<85 then if D>50 then grade=3.5 else grade=3.0 if S if B then S else B then S S D<85 if grade=3.0 D<85 if else B then S B then S D>50 D>50 grade=3.5 grade=3.5 grade=3.0 Corresponding Parse Trees S S

  21. Parse Tree Meanings S S if B then S if S B then S else S D<85 if else B then S D<85 if grade=3.0 B then S D>50 grade=3.5 grade=3.0 D>50 grade=3.5 If you receive a 90 on type D points, what is your grade? By parse tree 1 By parse tree 2

  22. Implications • Two interpretations of string • if D<85 then if D>50 then grade=3.5 else grade=3.0 • Issue is which if-then does the last ELSE attach to? • This phenomenon is known as the “dangling else” • Answer: Typically, else binds to NEAREST if-then • In this case, there is an unambiguous grammar for handling if-then’s as well as if-then-else’s

  23. Inherently ambiguous CFL’s • A CFL L is inherently ambiguous iff for all CFG’s G such that L(G) = L, G is ambiguous • Examples so far • None of the CFL’s we’ve seen so far are inherently ambiguous • While the CFG’s we’ve seen ambiguous, there do exist unambiguous CFG’s for those CFL’s. • Later result • There exist inherently ambiguous CFL’s • Example: {aibjck | i=j or j=k or i=j=k} • Note i=j=k is unnecessary, but I added it here for clarity

  24. Summary • Parse trees illustrate “semantic” information about strings • Ambiguous grammars are undesirable • This means there are multiple parse trees for some string • These strings can be interpreted in multiple ways • There are some heuristics people use for taking an ambiguous grammar and making it unambiguous, but this is not the focus of this course • There are some inherently ambiguous CFL’s • Thus, the above heuristics do not always work

More Related