COP4020 Programming Languages Computing LL(1) parsing table Prof. Xin Yuan.

Slides:



Advertisements
Similar presentations
A question from last class: construct the predictive parsing table for this grammar: S->i E t S e S | i E t S | a E -> B.
Advertisements

Lesson 8 CDT301 – Compiler Theory, Spring 2011 Teacher: Linus Källberg.
Top-Down Parsing.
1 Predictive parsing Recall the main idea of top-down parsing: Start at the root, grow towards leaves Pick a production and try to match input May need.
1 The Parser Its job: –Check and verify syntax based on specified syntax rules –Report errors –Build IR Good news –the process can be automated.
1 Chapter 4: Top-Down Parsing. 2 Objectives of Top-Down Parsing an attempt to find a leftmost derivation for an input string. an attempt to construct.
Top-Down parsing LL(1) parsing. Overview of Top-Down  There are only two actions 1.Replace 2.Match.
Professor Yihjia Tsai Tamkang University
Table-driven parsing Parsing performed by a finite state machine. Parsing algorithm is language-independent. FSM driven by table (s) generated automatically.
Top-Down Parsing.
Chapter 3 Chang Chi-Chung Parse tree intermediate representation The Role of the Parser Lexical Analyzer Parser Source Program Token Symbol.
– 1 – CSCE 531 Spring 2006 Lecture 7 Predictive Parsing Topics Review Top Down Parsing First Follow LL (1) Table construction Readings: 4.4 Homework: Program.
1 Syntactic Analysis and Parsing (Based on: Compilers, Principles, Techniques and Tools, by Aho, Sethi and Ullman, 1986)
Parsing Chapter 4 Parsing2 Outline Top-down v.s. Bottom-up Top-down parsing Recursive-descent parsing LL(1) parsing LL(1) parsing algorithm First.
Top-Down Parsing - recursive descent - predictive parsing
4 4 (c) parsing. Parsing A grammar describes the strings of tokens that are syntactically legal in a PL A recogniser simply accepts or rejects strings.
Chapter 5 Top-Down Parsing.
4 4 (c) parsing. Parsing A grammar describes syntactically legal strings in a language A recogniser simply accepts or rejects strings A generator produces.
Profs. Necula CS 164 Lecture Top-Down Parsing ICOM 4036 Lecture 5.
1 Compiler Construction Syntax Analysis Top-down parsing.
컴파일러 입문 제 7 장 LL 구문 분석.
Lesson 5 CDT301 – Compiler Theory, Spring 2011 Teacher: Linus Källberg.
CSI 3120, Syntactic analysis, page 1 Syntactic Analysis and Parsing Based on A. V. Aho, R. Sethi and J. D. Ullman Compilers: Principles, Techniques and.
4 4 (c) parsing. Parsing A grammar describes syntactically legal strings in a language A recogniser simply accepts or rejects strings A generator produces.
Pembangunan Kompilator.  The parse tree is created top to bottom.  Top-down parser  Recursive-Descent Parsing ▪ Backtracking is needed (If a choice.
COP4020 Programming Languages Parsing Prof. Xin Yuan.
BİL 744 Derleyici Gerçekleştirimi (Compiler Design)1 Top-Down Parsing The parse tree is created top to bottom. Top-down parser –Recursive-Descent Parsing.
Parsing Top-Down.
LL(1) Parser. What does LL signify ? The first L means that the scanning takes place from Left to right. The first L means that the scanning takes place.
Top-down Parsing Recursive Descent & LL(1) Comp 412 Copyright 2010, Keith D. Cooper & Linda Torczon, all rights reserved. Students enrolled in Comp 412.
Lecture 3: Parsing CS 540 George Mason University.
1 Context free grammars  Terminals  Nonterminals  Start symbol  productions E --> E + T E --> E – T E --> T T --> T * F T --> T / F T --> F F --> (F)
1 Nonrecursive Predictive Parsing  It is possible to build a nonrecursive predictive parser  This is done by maintaining an explicit stack.
Top-Down Parsing.
Top-Down Predictive Parsing We will look at two different ways to implement a non- backtracking top-down parser called a predictive parser. A predictive.
Parsing methods: –Top-down parsing –Bottom-up parsing –Universal.
1 Topic #4: Syntactic Analysis (Parsing) CSC 338 – Compiler Design and implementation Dr. Mohamed Ben Othman ( )
Bernd Fischer RW713: Compiler and Software Language Engineering.
UMBC  CSEE   1 Chapter 4 Chapter 4 (b) parsing.
COMP 3438 – Part II-Lecture 6 Syntax Analysis III Dr. Zili Shao Department of Computing The Hong Kong Polytechnic Univ.
Parsing COMP 3002 School of Computer Science. 2 The Structure of a Compiler syntactic analyzer code generator program text interm. rep. machine code tokenizer.
9/30/2014IT 3271 How to construct an LL(1) parsing table ? 1.S  A S b 2.S  C 3.A  a 4.C  c C 5.C  abc$ S1222 A3 C545 LL(1) Parsing Table What is the.
Compiler design Bottom-up parsing Concepts
Context free grammars Terminals Nonterminals Start symbol productions
Compilers Welcome to a journey to CS419 Lecture15: Syntax Analysis:
Table-driven parsing Parsing performed by a finite state machine.
Syntactic Analysis and Parsing
Introduction to Top Down Parser
Top-down parsing cannot be performed on left recursive grammars.
SYNTAX ANALYSIS (PARSING).
FIRST and FOLLOW Lecture 8 Mon, Feb 7, 2005.
UNIT 2 - SYNTAX ANALYSIS Role of the parser Writing grammars
Top-Down Parsing.
3.2 Language and Grammar Left Factoring Unclear productions
Lecture 7 Predictive Parsing
CS 540 George Mason University
Compiler Design 7. Top-Down Table-Driven Parsing
Top-Down Parsing Identify a leftmost derivation for an input string
Top-Down Parsing The parse tree is created top to bottom.
Chapter 4 Top Down Parser.
Predictive Parsing Lecture 9 Wed, Feb 9, 2005.
Computing Follow(A) : All Non-Terminals
Syntax Analysis - Parsing
Compiler design Syntactic analysis – part II First and follow sets
Lecture 7 Predictive Parsing
Nonrecursive Predictive Parsing
 Unique leftmost derivation  Unique rightmost derivation num  Unique leftmost derivation  Unique rightmost derivation.
Expr ( ). Expr ( ) E  T E’ E’  + T E’ | ε T  F T’ T’  * F T’ | ε F  ( E ) | id Orig. Grammar LL(1) Grammar E  E + T | T T  T.
Predictive Parsing Program
Syntactic Analysis Part II
Presentation transcript:

COP4020 Programming Languages Computing LL(1) parsing table Prof. Xin Yuan

COP4020 Spring /21/2015 Overview LL(1) parsing in action (Top-down parsing) Computing LL(1) parsing table

Using the parsing table, the predictive parsing program works like this:  A stack of grammar symbols ($ on the bottom)  A string of input tokens ($ at the end)  A parsing table, M[NT, T] of productions  Algorithm:  put ‘$ Start’ on the stack ($ is the end of input string). 1) if top == input == $ then accept 2) if top == input then pop top of the stack; advance to next input symbol; goto 1; 3) if top is nonterminal if M[top, input] is a production then replace top with the production; goto 1 else error 4) else error

 Example: (1) E->TE’ (2) E’->+TE’ (3) E’-> (4) T->FT’ (5) T’->*FT’ (6) T’-> (7) F->(E) (8) F->id id + * ( ) $ E (1) (1) E’ (2) (3) (3) T (4) (4) T’ (6) (5) (6) (6) F (8) (7) Stack input production $E id+id*id$ $E’T id+id*id$ E->TE’ $E’T’F id+id*id$ T->FT’ $E’T’id id+id*id$ F->id $E’T’ +id*id$ …... This produces leftmost derivation: E=>TE’=>FT’E’=>idT’E’=>….=>id+id*id

(1) E->TE’ (2) E’->+TE’ (3) E’-> (4) T->FT’ (5) T’->*FT’ (6) T’-> (7) F->(E) (8) F->id id + * ( ) $ E (1) (1) E’ (2) (3) (3) T (4) (4) T’ (6) (5) (6) (6) F (8) (7) How to compute the parsing table for LL(1) grammar? Key: We need to make choice for every production When can E be expanded with production E->TE’? Intuitively, any token that can be the first token by expanding TE’. This should include all first token by expanding T, what are they? What if T can derive empty string ( ), we should also include the first token that can be derived from E’ What if E’ can also derive empty string? We should all possible tokens that can potentially follow E? When should E’ be expanded with production E’-> ?

(1) E->TE’ (2) E’->+TE’ (3) E’-> (4) T->FT’ (5) T’->*FT’ (6) T’-> (7) F->(E) (8) F->id id + * ( ) $ E (1) (1) E’ (2) (3) (3) T (4) (4) T’ (6) (5) (6) (6) F (8) (7) How to compute the parsing table for LL(1) grammar? Intuition: We need to make choice for every production Case 1 (easy): E’->+TE’: expand for all tokens that can be the first token after expanding the right hand side of the production (expanding +TE’) Case 1 (harder): E->TE’: expand for all tokens that can be the first token after expanding TE’ We call this First set. Case 2: E’-> : no first token? Whenever we see a token that can potential follow E’ in a sentential form. (Follow set)

For a production that can derive a string of tokens, find all possible first tokens.  A production N -> X Y Z should be expanded when the token can be the first of X Y Z (after derivation): First(X Y Z). For a production that can derive empty string, find all possible tokens that can follow the nonterminal.  When should we expand with E’-> ? Anything token that can potentially follow E’: Follow(E’).

First set and follow set  First( ): Here, is a string of symbols. The set of terminals that begin strings derived from a. If a is empty string or generates empty string, then empty string is in First( ).  Follow(A): Here, A is a nonterminal symbol. Follow(A) is the set of terminals that can immediately follow A in a sentential form.  Example: S->iEtS | iEtSeS|a E->b First(a) = ?, First(iEtS) = ?, First(S) = ? Follow(E) = ? Follow(S) = ?

Compute FIRST(X)  If a is a terminal then FIRST(a) = {a} (Case 1)  If X->, add to FIRST(X). (Case 2)  If and add every none in FIRST( ) to FIRST(X). If, add to FIRST(X). (Case 3)  FIRST( ): similar to the third case. E->TE’ FIRST(E) = ? E’->+TE’| FIRST(E’)= ? T->FT’ FIRST(T) = ? T’->*FT’ | FIRST(T’) = ? F->(E) | id FIRST(F) = ?

Computing first set COP4020 Spring /21/2015 E->TE’ FIRST(E) = {(, id} E’->+TE’| FIRST(E’)={+, } T->FT’ FIRST(T) = {(, id} T’->*FT’ | FIRST(T’) = {*, } F->(E) | id FIRST(F) = {(, id}

Compute Follow(A)  If S is the start symbol, add $ to Follow(S).  If A-> B, add First( )-{ } to Follow(B).  If A-> B or A-> B and =>, add Follow(A) to Follow(B).  Note: you are looking at the right hand side of productions!!! E->TE’ First(E) = {(, id}, Follow(E)={), $} E’->+TE’| First(E’)={+, e}, Follow(E’) = {), $} T->FT’ First(T) = {(, id}, Follow(T) = {+, ), $} T’->*FT’ | First(T’) = {*, e}, Follow(T’) = {+, ), $} F->(E) | id First(F) = {(, id}, Follow(F) = {*, +, ), $}

How to construct the parsing table?  With first(a) and follow(A), we can build the parsing table. For each production A-> : Add A-> to M[A, t] for each t in First( ). If First( ) contains empty string  Add A-> to M[A, t] for each t in Follow(A)  if $ is in Follow(A), add A-> to M[A, $] Make each undefined entry of M error. Construct parsing table for the following grammar: E->TE’ First(E) = {(, id}, Follow(E)={), $} E’->+TE’| First(E’)={+, e}, Follow(E’) = {), $} T->FT’ First(T) = {(, id}, Follow(T) = {+, ), $} T’->*FT’ | First(T’) = {*, e}, Follow(T’) = {+, ), $} F->(E) | id First(F) = {(, id}, Follow(F) = {*, +, ), $}

LL(1) grammar:  A grammar whose parsing table has no multiply-defined entries is a LL(1) grammar. use one input symbol of lookahead at each step to make a parsing decision.  No ambiguous or left-recursive grammar can be LL(1)  A grammar is LL(1) iff for each set of A productions, where  The following conditions hold: