csc 4181 compiler construction context free grammars
play

CSC 4181 Compiler Construction Context-Free Grammars Using grammars - PDF document

CSC 4181 Compiler Construction Context-Free Grammars Using grammars in parsers CFG 1 1 Parsing Process Call the scanner to get tokens Build a parse tree from the stream of tokens A parse tree shows the syntactic structure of the


  1. CSC 4181 Compiler Construction Context-Free Grammars Using grammars in parsers CFG 1 1 Parsing Process  Call the scanner to get tokens  Build a parse tree from the stream of tokens  A parse tree shows the syntactic structure of the source program.  Add information about identifiers in the symbol table  Report error, when found, and recover from thee error CFG 2 2 1

  2. Context-Free Grammar  a tuple ( V, T, P, S ) where  V is a finite set of nonterminals, containing S �  T is a finite set of terminals,  P is a set of production rules in the form of  β where  is in V and β is in ( V U T )* , and  S is the start symbol.  Any string in (V U T)* is called a sentential form � CFG 3 3 Examples E  E O E S  SS E  � S  (S)S (E) E  id S  () O  � S  �  + O  � - O  � * � O  � / CFG 4 4 2

  3. Backus-Naur Form (BNF)  Nonterminals are in < > .  Terminals are any other symbols.  ::= means  �  | means or.  Examples: < E> ::= < E> < O> < E> | (< E> ) | ID < O> ::= + | - | * | / < S> ::= < S> < S> | (< S> )< S> | () |  CFG 5 5 Derivation  A sequence of replacement of a substring in a sentential form. Definition ( V , T , P , S ) be a CFG,  ,  ,  be  Let G � � � strings in ( V U T ) * and A is in V �  A  �  G �  if A �  is in P �   � G denotes a derivation in zero step or more. CFG 6 6 3

  4. Examples S  SS | (S)S | () |  E  E O E | (E) | id O  + | - | * | / S  SS E  (S)SS  E O E  (S)S(S)S  (E) O E  (S)S(())S  (E O E) O E  ((S)S)S(())S  ((E O E) O E) O E  ((S)())S(())S  ((id O E)) O E) O E  ((())())S(())S  ((id + E)) O E) O E  ((())()) (())S  ((id + id)) O E) O E  ((())())(())  ((id + id)) * id) + id CFG 7 7 Leftmost Derivation Rightmost Derivation  Each step of the derivation  Each step of the derivation is a replacement of the is a replacement of the leftmost nonterminals in a rightmost nonterminals in sentential form. a sentential form. E E  E O E  E O E  ( E ) O E  E O id  ( E O E) O E  E * id  (id O E) O E  ( E ) * id  (id + E ) O E  (E O E ) * id  (id + id) O E  (E O id) * id  (id + id) * E  ( E + id) * id  (id + id) * id  (id + id) * id CFG 8 8 4

  5. Right/Left Recursive  A grammar is a left  A grammar is a right recursive if its recursive if its production rules can production rules can generate a derivation generate a derivation of the form A  * A X. of the form A  * X A.  Examples:  Examples:  E  E O id | (E) | id  E  id O E | (E) | id  E  F + id | (E) | id  E  id + F | (E) | id F  E * id | id F  id * E | id  E  F + id  E  id + F  E * id + id  id + id * E CFG 9 9 Parse Tree  A labeled tree in which  the interior nodes are labeled by nonterminals  leaf nodes are labeled by terminals  the children of an interior node represent a replacement of the associated nonterminal in a derivation  corresponding to a derivation E � F id id E � id CFG 10 10 5

  6. Parse Trees and Derivations E � E  E + E (1) E �  id + E E � (2) �  id + E * E E � E � (3) id �  id + id * E (4) id id  id + id * id Preorder numbering (5) E  E + E E � (1)  E + E * E E � (2) E � �  E + E * id (3) E � E � id �  E + id * id (4) id id  id + id * id (5) Reverse or postorder numbering CFG 11 11 Grammar: Example <St> ::=  | s; | s; <St> | { <St> } <St> List of statements: <St>  No statement  { <St> } <St>  One statement:  { { <St> } <St> } <St>  { { s; <St> } <St> } <St>  s;  { { s; { <St> } <St> } <St> } <St>  More than one  { { s; { s; <St> } <St> } <St> } <St> statement:  { { s; { s; s; } <St> } <St> } <St>  s; s; s;  { { s; { s; s; } s; <St> } <St> } <St>  A statement can be a  { { s; { s; s; } s; { <St> } <St> } <St> } <St> block of statements.  { { s; { s; s; } s; { } <St> } <St> } <St>  { { s; { s; s; } s; { } } <St>} <St>  { s; s; s;}  { { s; { s; s;} s; { } } s; } <St> Is the following correct?  { { s; { s; s;} s; { } } s; } { { s; { s; s;} s; { } } s; } CFG 12 12 6

  7. Abstract Syntax Tree  Representation of actual source tokens  Interior nodes represent operators.  Leaf nodes represent operands. CFG 13 13 Abstract Syntax Tree for Expression E � � E E � id1 E E � id1 id2 id3 id2 id3 CFG 14 14 7

  8. Abstract Syntax Tree for If Statement st ifStatement if elsePart st � � exp if true st return else st true return CFG 15 15 Ambiguous Grammar  A grammar is ambiguous if it can generate two different parse trees for one string.  Ambiguous grammars can cause inconsistency in parsing. CFG 16 16 8

  9. Example: Ambiguous Grammar E  � E + E E  � E - E E  � E * E E  E / E E  id E E + E * E E E E E E E id3 * id1 + id2 id3 id1 id2 CFG 17 17 Ambiguity in Expressions  Which operation is to be done first?  solved by precedence  An operator with higher precedence is done before one with lower precedence.  An operator with higher precedence is placed in a rule (logically) further from the start symbol.  solved by associativity  If an operator is right-associative (or left-associative), an operand in between 2 operators is associated to the operator to the right (left).  Right-associated : W + (X + (Y + Z))  Left-associated : ((W + X) + Y) + Z CFG 18 18 9

  10. Precedence E  � E E + E E E  E - E + E * E E E E  E * E E E E E id3 E  E / E * + id1 E  id id1 id2 id2 id3 E  � E + E E E  E - E E + E E  F F F F  � F * F  F / F F * F id1 F �  id F � id2 id3 CFG 19 19 Precedence (cont’d) E  � E + E | E - E | F E F  F * F | F / F | X F X  � ( E ) | id F * F X F * F X X ( E ) (id1 + id2) * id3 * id4 id4 id3 E + E F F X X id1 id2 CFG 20 20 10

  11. Associativity E  Left-associative operators F E  � E + F | E - F | F X F / F  � F * X | F / X | X X  � * X id4 ( E ) | id F X id3 ( E ) (id1 + id2) * id3 / id4 + E F = (((id1 + id2) * id3) / id4) F X X id2 id1 CFG 21 21 Ambiguity in Dangling Else St  � IfSt | ... IfSt  � if ( E ) St | if ( E ) St else St E  � { if (0) 0 | 1 | … { if (1) St } else St } { if (0) { if (1) St else St } } IfSt IfSt � � if E St else St if � E � St 0 IfSt IfSt 0 � � if E St if � E � St else St 1 1 CFG 22 22 11

  12. Disambiguating Rules for Dangling Else St  MatchedSt | UnmatchedSt UnmatchedSt  if (E) St | St if (E) MatchedSt else UnmatchedSt MatchedSt  � UnmatchedSt if (E) MatchedSt else MatchedSt| ... E  if � E � St 0 | 1 MatchedSt  if (0) if (1) St else St = if (0) if � E � MatchedSt else MatchedSt if (1) St else St CFG 23 23 Extended Backus-Naur Form (EBNF)  Kleene’s Star/ Kleene’s Closure  Seq ::= St { ; St}  Seq ::= { St ;} St  Optional Part  IfSt ::= if ( E ) St [else St]  E ::= F [+ E ] | F [- E] CFG 24 24 12

  13. Syntax Diagrams  Graphical representation of EBNF rules IfSt  nonterminals: id  terminals:  sequences and choices:  Examples � � E  X ::= (E) | id id St  Seq ::= { St ;} St � St F �  E ::= F [+ E ] E CFG 25 25 13

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