CFG1 CSC 4181Compiler Construction Context-Free Grammars Using grammars in parsers.

Slides:



Advertisements
Similar presentations
Lecture # 8 Chapter # 4: Syntax Analysis. Practice Context Free Grammars a) CFG generating alternating sequence of 0’s and 1’s b) CFG in which no consecutive.
Advertisements

1 Parsing The scanner recognizes words The parser recognizes syntactic units Parser operations: Check and verify syntax based on specified syntax rules.
Session 14 (DM62) / 15 (DM63) Recursive Descendent Parsing.
Chapter 3: Formal Translation Models
COP4020 Programming Languages
1 Chapter 3 Context-Free Grammars and Parsing. 2 Parsing: Syntax Analysis decides which part of the incoming token stream should be grouped together.
S YNTAX. Outline Programming Language Specification Lexical Structure of PLs Syntactic Structure of PLs Context-Free Grammar / BNF Parse Trees Abstract.
EECS 6083 Intro to Parsing Context Free Grammars
Chapter 2 Syntax A language that is simple to parse for the compiler is also simple to parse for the human programmer. N. Wirth.
1 Syntax and Semantics The Purpose of Syntax Problem of Describing Syntax Formal Methods of Describing Syntax Derivations and Parse Trees Sebesta Chapter.
CPSC 388 – Compiler Design and Construction Parsers – Context Free Grammars.
Compiler Principle and Technology Prof. Dongming LU Mar. 7th, 2014.
BİL 744 Derleyici Gerçekleştirimi (Compiler Design)1 Syntax Analyzer Syntax Analyzer creates the syntactic structure of the given source program. This.
Introduction to Parsing Copyright 2003, Keith D. Cooper, Ken Kennedy & Linda Torczon, all rights reserved. Students enrolled in Comp 412 at Rice University.
Parsing Jaruloj Chongstitvatana Department of Mathematics and Computer Science Chulalongkorn University.
Classification of grammars Definition: A grammar G is said to be 1)Right-linear if each production in P is of the form A  xB or A  x where A and B are.
Context-Free Grammars
Chapter 5 Context-Free Grammars
Context-Free Grammars and Parsing
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 2 Syntax A language that is simple to parse.
Grammars CPSC 5135.
PART I: overview material
Lecture # 9 Chap 4: Ambiguous Grammar. 2 Chomsky Hierarchy: Language Classification A grammar G is said to be – Regular if it is right linear where each.
1 Syntax In Text: Chapter 3. 2 Chapter 3: Syntax and Semantics Outline Syntax: Recognizer vs. generator BNF EBNF.
11 Chapter 4 Grammars and Parsing Grammar Grammars, or more precisely, context-free grammars, are the formalism for describing the structure of.
CMSC 330: Organization of Programming Languages Context-Free Grammars.
Syntax Context-Free Grammars, Syntax Trees. CFG for Arithmetic Expressions E::= E op E| (E) | num op ::= + | * num ::= 0 | 1 | 2 | … Backus-Naur Form.
Bernd Fischer RW713: Compiler and Software Language Engineering.
CPS 506 Comparative Programming Languages Syntax Specification.
Syntax and Semantics Structure of programming languages.
Context Free Grammars CFGs –Add recursion to regular expressions Nested constructions –Notation expression  identifier | number | - expression | ( expression.
Syntax The Structure of a Language. Lexical Structure The structure of the tokens of a programming language The scanner takes a sequence of characters.
A Programming Languages Syntax Analysis (1)
Chapter 3 Context-Free Grammars and Parsing. The Parsing Process sequence of tokens syntax tree parser Duties of parser: Determine correct syntax Build.
Syntax Analysis - Parsing Compiler Design Lecture (01/28/98) Computer Science Rensselaer Polytechnic.
Grammars Hopcroft, Motawi, Ullman, Chap 5. Grammars Describes underlying rules (syntax) of programming languages Compilers (parsers) are based on such.
Grammars CS 130: Theory of Computation HMU textbook, Chap 5.
Unit-3 Parsing Theory (Syntax Analyzer) PREPARED BY: PROF. HARISH I RATHOD COMPUTER ENGINEERING DEPARTMENT GUJARAT POWER ENGINEERING & RESEARCH INSTITUTE.
Chapter 3 Context-Free Grammars and Parsing
Compiler Principle and Technology Prof. Dongming LU Mar. 18th, 2015.
Introduction Finite Automata accept all regular languages and only regular languages Even very simple languages are non regular (  = {a,b}): - {a n b.
Syntax Analyzer (Parser)
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 2 Syntax A language that is simple to parse.
1 Pertemuan 7 & 8 Syntax Analysis (Parsing) Matakuliah: T0174 / Teknik Kompilasi Tahun: 2005 Versi: 1/6.
Programming Languages and Design Lecture 2 Syntax Specifications of Programming Languages Instructor: Li Ma Department of Computer Science Texas Southern.
1 February 23, February 23, 2016February 23, 2016February 23, 2016 Azusa, CA Sheldon X. Liang Ph. D. Computer Science at Azusa Pacific University.
Chapter 4: Syntax analysis Syntax analysis is done by the parser. –Detects whether the program is written following the grammar rules and reports syntax.
C H A P T E R T W O Syntax and Semantic. 2 Introduction Who must use language definitions? Other language designers Implementors Programmers (the users.
Spring 16 CSCI 4430, A Milanova 1 Announcements HW1 will be out this evening Due Monday, 2/8 Submit in HW Server AND at start of class on 2/8 A review.
Compiler Construction Lecture Five: Parsing - Part Two CSC 2103: Compiler Construction Lecture Five: Parsing - Part Two Joyce Nakatumba-Nabende 1.
Syntax Analysis By Noor Dhia Syntax analysis:- Syntax analysis or parsing is the most important phase of a compiler. The syntax analyzer considers.
Structure of programming languages
Compiler Chapter 5. Context-free Grammar Dept. of Computer Engineering, Hansung University, Sung-Dong Kim.
Chapter 3 – Describing Syntax CSCE 343. Syntax vs. Semantics Syntax: The form or structure of the expressions, statements, and program units. Semantics:
Syntax(1). 2 Syntax  The syntax of a programming language is a precise description of all its grammatically correct programs.  Levels of syntax Lexical.
Chapter 3: Describing Syntax and Semantics
Chapter 3 – Describing Syntax
Chapter 3 Context-Free Grammar and Parsing
Syntax (1).
Context-Free Grammars
Compiler Construction
Compiler Construction (CS-636)
Context-Free Grammars
Context-Free Grammars
CSC 4181Compiler Construction Context-Free Grammars
CSC 4181 Compiler Construction Context-Free Grammars
Context-Free Grammars
Context-Free Grammars
COMPILER CONSTRUCTION
Presentation transcript:

CFG1 CSC 4181Compiler Construction Context-Free Grammars Using grammars in parsers

CFG2 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

CFG3 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  and β are strings over V UT, and S is the start symbol. Example G= ({S, A, B, C}, {a, b, c}, P, S) P= {S  SABC,BA  AB, CB  BC,CA  AC, SA  a, aA  aa, aB  ab, bB  bb, bC  bc, cC  cc}

CFG4 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 UT )*, and S is the start symbol. Any string in (V U T)* is called a sentential form.

CFG5 Examples E  E O E E  (E) E  id O  + O  - O  * O  / S  SS S  (S)S S  () S 

CFG6 Backus-Naur Form (BNF) Nonterminals are in. Terminals are any other symbols. ::= means . | means or. Examples: ::= | ( ) | ID ::= + | - | * | / ::= | ( ) | () |

CFG7 Derivation A sequence of replacement of a substring in a sentential form. Definition Let G = (V, T, P, S ) be a CFG, , ,  be 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.

CFG8 Examples S  SS | (S)S | () | S  SS  (S)SS  (S)S(S)S  (S)S(())S  ((S)S)S(())S  ((S)())S(())S  ((())())S(())S  ((())()) (())S  ((())())(()) E  E O E | (E) | id O  + | - | * | / E  E O E  (E) O E  (E O E) O E  * ((E O E) O E) O E  ((id O E)) O E) O E  ((id + E)) O E) O E  ((id + id)) O E) O E  * ((id + id)) * id) + id

CFG9 Leftmost DerivationRightmost Derivation Each step of the derivation is a replacement of the leftmost nonterminals in a sentential form. E  E O E  (E) O E  (E O E) O E  (id O E) O E  (id + E) O E  (id + id) O E  (id + id) * E  (id + id) * id Each step of the derivation is a replacement of the rightmost nonterminals in a sentential form. E  E O E  E O id  E * id  (E) * id  (E O E) * id  (E O id) * id  (E + id) * id  (id + id) * id

CFG10 Language Derived from Grammar Let G = (V, T, P, S ) be a CFG. A string w in T * is derived from G if S *  G w. A language generated by G, denoted by L(G), is a set of strings derived from G. L(G) = {w| S *  G w}.

CFG11 Right/Left Recursive A grammar is a left recursive if its production rules can generate a derivation of the form A  * A X. Examples: E  E O id | (E) | id E  F + id | (E) | id F  E * id | id E  F + id  E * id + id A grammar is a right recursive if its production rules can generate a derivation of the form A  * X A. Examples: E  id O E | (E) | id E  id + F | (E) | id F  id * E | id E  id + F  id + id * E

CFG12 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 + id E F *

CFG13 Parse Trees and Derivations E  E + E(1)  id + E (2)  id + E * E(3)  id + id * E(4)  id + id * id(5) E  E + E(1)  E + E * E(2)  E + E * id(3)  E + id * id(4)  id + id * id(5) Preorder numbering Reverse or postorder numbering + E 1 E 2 E 5 E 3 * E 4 id + E 1 E 5 E 3 E 2 * E 4 id

CFG14 Grammar: Example List of parameters in: Function definition function sub(a,b,c) Function call sub(a,1,2)  function id ( )  id, | id  id ( ) , |  id | const  function id ( ) , id | id  id ( ) , |  id | const  id,  id, id,  …  ( id, )* id , id , id, id  …  id (, id )*

CFG15 Grammar: Example List of parameters If zero parameter is allowed, then ?  function id ( )| function id ( )  id, | id  id ( ) | id ( ) , |  id | const  function id ( )  id, | id |  id ( ) , |  id | const Work ? NO! Generate id, id, id,

CFG16 Grammar: Example List of statements: No statement One statement: s; More than one statement: s; s; s; A statement can be a block of statements. {s; s; s;} Is the following correct? { {s; {s; s;} s; {}} s; } ::= | s; | s; | { }  { }  { { } }  { { } s; }  { { s; } s;}  { { s; { } } s;}  { { s; { } s; } s;}  { { s; { } s; { } } s;}  { { s; { s; } s; {} } s;}  { { s; { s; s;} s; {} } s;}

CFG17 Abstract Syntax Tree Representation of actual source tokens Interior nodes represent operators. Leaf nodes represent operands.

CFG18 Abstract Syntax Tree for Expression + E E E E * E id3id2 id1 + id3 * id2

CFG19 Abstract Syntax Tree for If Statement st ifStatement )exp true ( if elsest elsePart return if truestreturn

CFG20 Ambiguous Grammar A grammar is ambiguous if it can generate two different parse trees for one string. Ambiguous grammars can cause inconsistency in parsing.

CFG21 Example: Ambiguous Grammar E  E + E E  E - E E  E * E E  E / E E  id + E E E E * E id3id2 id1 * E E id2 E E + E id1 id3

CFG22 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

CFG23 Precedence E  E + E E  E - E E  E * E E  E / E E  id E  E + E E  E - E E  F F  F * F F  F / F F  id + E E E E * E id3id2 id1 * E E id2 E E + E id1 id3 E + E E *F id2 id1 F F F

CFG24 Precedence (cont’d) E  E + E | E - E | F F  F * F | F / F | X X  ( E ) | id (id1 + id2) * id3 * id4 * F X F +E id4 id3 E X E X E F )( *FF id1 X F id2 X F

CFG25 Associativity Left-associative operators E  E + F | E - F | F F  F * X | F / X | X X  ( E ) | id (id1 + id2) * id3 / id4 = (((id1 + id2) * id3) / id4) / F X + E id3 X E E F )( * F X id1 X F id4 X F id2

CFG26 Ambiguity in Dangling Else St  IfSt |... IfSt  if ( E ) St | if ( E ) St else St E  0 | 1 | … IfSt )if(elseESt IfSt )if(ESt IfSt )if(elseESt IfSt )if(ESt 1 { if (0) { if (1) St } else St } { if (0) { if (1) St else St } }

CFG27 Disambiguating Rules for Dangling Else St  MatchedSt | UnmatchedSt UnmatchedSt  if (E) St | if (E) MatchedSt else UnmatchedSt MatchedSt  if (E) MatchedSt else MatchedSt|... E  0 | 1 if (0) if (1) St else St = if (0) if (1) St else St UnmatchedSt )if(E MatchedSt )if(elseEMatchedSt St

CFG28 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]

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