235
Syntax Analysis - Part 1 © Harry H. Porter, 2005 1 Outline Context-Free Grammars (CFGs) Parsing Top-Down Recursive Descent Table-Driven Bottom-Up LR Parsing Algorithm How to Build LR Tables Parser Generators Grammar Issues for Programming Languages Syntax Analysis

Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

  • Upload
    ngodieu

  • View
    220

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 1

OutlineContext-Free Grammars (CFGs)Parsing

Top-DownRecursive DescentTable-Driven

Bottom-UpLR Parsing AlgorithmHow to Build LR TablesParser Generators

Grammar Issues for Programming Languages

Syntax Analysis

Page 2: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 2

Top-Down Parsing• LL Grammars - A subclass of all CFGs• Recursive-Descent Parsers - Programmed “by hand”• Non-Recursive Predictive Parsers - Table Driven• Simple, Easy to Build, Better Error Handling

Bottom-Up Parsing• LR Grammars - A larger subclass of CFGs• Complex Parsing Algorithms - Table Driven• Table Construction Techniques• Parser Generators use this technique• Faster Parsing, Larger Set of Grammars• Complex• Error Reporting is Tricky

Page 3: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 3

Output of Parser?

Succeed is string is recognized ... and fail if syntax errors

Syntax Errors?Good, descriptive, helpful message!Recover and continue parsing!

Build a “Parse Tree” (also called “derivation tree”)

Build Abstract Syntax Tree (AST)In memory (with objects, pointers)Output to a file

Execute Semantic ActionsBuild ASTType CheckingGenerate CodeDon’t build a tree at all!

*

y 1

x +

Page 4: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 4

Errors in ProgramsLexical if x<1 thenn y = 5:

“Typos”

Syntactic if ((x<1) & (y>5))) ... { ... { ... ... }

Semantic if (x+5) then ...

Type ErrorsUndefined IDs, etc.

Logical Errors if (i<9) then ...

Should be <= not <BugsCompiler cannot detect Logical Errors

Page 5: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 5

CompilerAlways haltsAny checks guaranteed to terminate“Decidable”

Other Program Checking TechniquesDebuggingTestingCorrectness Proofs

“Partially Decidable”Okay? ⇒ The test terminates.Not Okay? ⇒ The test may not terminate!You may need to run some programs to see if they are okay.

Page 6: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 6

RequirementsDetect All Errors (Except Logical!)Messages should be helpful.

Difficult to produce clear messages!Example:

Syntax Error Example:

Line 23: Unmatched Paren if ((x == 1) then ^

Compiler Should Recover Keep going to find more errors

Example: x := (a + 5)) * (b + 7));

We’re in the middle of a statementSkip tokens until we see a “;”Resume ParsingMisses a second error... Oh, well...Checks most of the source

Error detected here

This error missed

Page 7: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 7

Difficult to generate clear and accurate error messages.

Example function foo () { ... if (...) { ... } else { ...

... }

<eof>

Example var myVarr: Integer; ... x := myVar; ...

Missing } here

Not detected until here

Misspelled ID here

Detected here as“Undeclared ID”

Page 8: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 8

For Mature LanguagesCatalog common errorsStatistical studiesTailor compiler to handle common errors well

Statement terminators versus separatorsTerminators: C, Java, PCAT {A;B;C;} Separators: Pascal, Smalltalk, Haskell

Pascal Examples begin var t: Integer; t := x; x := y; y := t end

if (...) then x := 1 else y := 2; z := 3;

function foo (x: Integer; y: Integer)...

Tend to put a comma here

Tend to insert a ; here

Tend to insert a ; here

Page 9: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 9

Error-Correcting Compilers• Issue an error message• Fix the problem• Produce an executable

Example

Error on line 23: “myVarr” undefined. “myVar” was used.

Is this a good idea???Compiler guesses the programmer’s intentA shifting notion of what constitutes a correct / legal / valid programMay encourage programmers to get sloppyDeclarations provide redundancy

⇒ Increased reliability

Page 10: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 10

Error AvalancheOne error generates a cascade of messages

Example x := 5 while ( a == b ) do ^ Expecting ; ^ Expecting ; ^ Expecting ;

The real messages may be buried under the avalanche.Missing #include or import will also cause an avalanche.

Approaches:Only print 1 message per token [ or per line of source ]Only print a particular message once

Error: Variable “myVarr” is undeclared All future notices for this ID have been suppressed

Abort the compiler after 50 errors.

Page 11: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 11

Error Recovery Approaches: Panic Mode

Discard tokens until we see a “synchronizing” token.

• Simple to implement• Commonly used• The key...

Good set of synchronizing tokensKnowing what to do then

• May skip over large sections of source

ExampleSkip to next occurrence of } end ; Resume by parsing the next statement

Page 12: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 12

Error Recovery Approaches: Phrase-Level Recovery

Compiler corrects the programby deleting or inserting tokens ...so it can proceed to parse from where it was.

• The key...Don’t get into an infinite loop

...constantly inserting tokens

...and never scanning the actual source

Examplewhile (x = 4) y := a+b; ...

Insert do to “fix” the statement.

Page 13: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 13

Error Recovery Approaches: Error Productions

Augment the CFG with “Error Productions”

Now the CFG accepts anything!

If “error productions” are used...Their actions:

{ print (“Error...”) }

Used with...• LR (Bottom-up) parsing• Parser Generators

Theoretical Approach

Find the minimum change to the source to yield a valid program(Insert tokens, delete tokens, swap adjacent tokens)

Impractical algorithms - too time consuming

Error Recovery Approaches: Global Correction

Page 14: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 14

CFG: Context Free Grammars

Example Rule:Stmt → if Expr then Stmt else Stmt

TerminalsKeywords

else “else” Token Classes

ID INTEGER REALPunctuation

; “;” ;

Non-terminalsAny symbol appearing on the lefthand side of any rule

Start SymbolUsually the non-terminal on the lefthand side of the first rule

Rules (or “Productions”)BNF: Backus-Naur Form / Backus-Normal Form

Stmt ::= if Expr then Stmt else Stmt

Page 15: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 15

Rule Alternatives

E → E + E E → ( E ) E → - E E → ID

E → E + E → ( E ) → - E → ID

E → E + E | ( E ) | - E | ID

E → E + E | ( E ) | - E | ID

All Notations are Equivalent

Page 16: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 16

Notational ConventionsTerminals

a b c ...

NonterminalsA B C ...SExpr

Grammar Symbols (Terminals or Nonterminals)X Y Z U V W ...

Strings of Symbolsα β γ ...

Strings of Terminalsx y z u v w ...

ExamplesA → α B

A rule whose righthand side ends with a nonterminalA → x α

A rule whose righthand side begins with a string of terminals (call it “x”)

A sequence of zeroOr more terminalsAnd nonterminals

Including ε

Page 17: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 17

Derivations

A “Derivation” of “(id*id)”

E ⇒ (E) ⇒ (E*E) ⇒ (id*E) ⇒ (id*id)

“Sentential Forms”

A sequence of terminals and nonterminals in a derivation (id*E)

1. E → E + E 2. → E * E 3. → ( E ) 4. → - E 5. → ID

Page 18: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 18

Derives in one step ⇒If A → β is a rule, then we can writeαAγ ⇒ αβγ

Any sentential form containing a nonterminal (call it A)... such that A matches the nonterminal in some rule.

Derives in zero-or-more steps ⇒*

E ⇒* (id*id)

If α ⇒* β and β ⇒ γ, then α ⇒* γ

Derives in one-or-more steps ⇒+

Page 19: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 19

GivenG A grammarS The Start Symbol

DefineL(G) The language generated

L(G) = { w | S ⇒+ w}

“Equivalence” of CFG’sIf two CFG’s generate the same language, we say they are “equivalent.”

G1 ≈ G2 whenever L(G1) = L(G2)

In making a derivation...Choose which nonterminal to expandChoose which rule to apply

Page 20: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 20

Leftmost DerivationsIn a derivation... always expand the leftmost nonterminal. E ⇒ E+E ⇒ (E)+E ⇒ (E*E)+E ⇒ (id*E)+E ⇒ (id*id)+E ⇒ (id*id)+id

Let ⇒LM denote a step in a leftmost derivation (⇒LM* means zero-or-more steps )

At each step in a leftmost derivation, we havewAγ ⇒LM wβγ where A → β is a rule

(Recall that w is a string of terminals.)

Each sentential form in a leftmost derivation is called a “left-sentential form.”

If S ⇒LM* α then we say α is a “left-sentential form.”

1. E → E + E 2. → E * E 3. → ( E ) 4. → - E 5. → ID

Page 21: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 21

Rightmost DerivationsIn a derivation... always expand the rightmost nonterminal. E ⇒ E+E ⇒ E+id ⇒ (E)+id ⇒ (E*E)+id ⇒ (E*id)+id ⇒ (id*id)+id

Let ⇒RM denote a step in a rightmost derivation (⇒RM* means zero-or-more steps )

At each step in a rightmost derivation, we have αAw ⇒RM αβw where A → β is a rule

(Recall that w is a string of terminals.)

Each sentential form in a rightmost derivation is called a “right-sentential form.”

If S ⇒RM* α then we say α is a “right-sentential form.”

1. E → E + E 2. → E * E 3. → ( E ) 4. → - E 5. → ID

Page 22: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 22

Bottom-Up ParsingBottom-up parsers discover rightmost derivations!Parser moves from input string back to S.Follow S ⇒RM* w in reverse.

At each step in a rightmost derivation, we have αAw ⇒RM αβw where A → β is a rule

String of terminals (i.e., the rest of the input,which we have not yet seen)

Page 23: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 23

Parse TreesTwo choices at each step in a derivation...

• Which non-terminal to expand• Which rule to use in replacing it

The parse tree remembers only this

Leftmost Derivation: E ⇒ E+E ⇒ (E)+E ⇒ (E*E)+E ⇒ (id*E)+E ⇒ (id*id)+E ⇒ (id*id)+id

E

E

EE

EE

id id

id

+

*

) ( 1. E → E + E 2. → E * E 3. → ( E ) 4. → - E 5. → ID

Page 24: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 24

Parse TreesTwo choices at each step in a derivation...

• Which non-terminal to expand• Which rule to use in replacing it

The parse tree remembers only this

E

E

EE

EE

id id

id

+

*

) (

Rightmost Derivation: E ⇒ E+E ⇒ E+id ⇒ (E)+id ⇒ (E*E)+id ⇒ (E*id)+id ⇒ (id*id)+id

1. E → E + E 2. → E * E 3. → ( E ) 4. → - E 5. → ID

Page 25: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 25

Parse TreesTwo choices at each step in a derivation...

• Which non-terminal to expand• Which rule to use in replacing it

The parse tree remembers only this

Leftmost Derivation: E ⇒ E+E ⇒ (E)+E ⇒ (E*E)+E ⇒ (id*E)+E ⇒ (id*id)+E ⇒ (id*id)+id

Rightmost Derivation: E ⇒ E+E ⇒ E+id ⇒ (E)+id ⇒ (E*E)+id ⇒ (E*id)+id ⇒ (id*id)+id

E

E

EE

EE

id id

id

+

*

) ( 1. E → E + E 2. → E * E 3. → ( E ) 4. → - E 5. → ID

Page 26: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 26

Given a leftmost derivation, we can build a parse tree.Given a rightmost derivation, we can build a parse tree.

Every parse tree corresponds to...• A single, unique leftmost derivation• A single, unique rightmost derivation

Ambiguity:However, one input string may have several parse trees!!!

Therefore:• Several leftmost derivations• Several rightmost derivations

Rightmost Derivation of(id*id)+id

Lefttmost Derivation of(id*id)+id

Same Parse Tree

Page 27: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 27

Ambuiguous Grammars

Leftmost Derivation #1 E ⇒ E+E ⇒ id+E ⇒ id+E*E ⇒ id+id*E ⇒ id+id*id

Leftmost Derivation #2 E ⇒ E*E ⇒ E+E*E ⇒ id+E*E ⇒ id+id*E ⇒ id+id*id

1. E → E + E 2. → E * E 3. → ( E ) 4. → - E 5. → ID

E

EE

EE

id id

id

*

+

E

EE

E E

id id

id

+

* Input: id+id*id

Page 28: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 28

Ambiguous GrammarMore than one Parse Tree for some sentence.

The grammar for a programming language may be ambiguousNeed to modify it for parsing.

Also: Grammar may be left recursive.Need to modify it for parsing.

Page 29: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 29

Translating a Regular Expression into a CFG

First build the NFA.

For every state in the NFA...Make a nonterminal in the grammar

For every edge labeled c from A to B... Add the rule

A → cB

For every edge labeled ε from A to B... Add the rule

A → B

For every final state B... Add the rule

B → ε

Page 30: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 30

Recursive Transition NetworksRegular Expressions ⇔ NFA ⇔ DFAContext-Free Grammar ⇔ Recursive Transition Networks

Exactly as expressive a CFGs... But clearer for humans!

;

elseIf

if then

else

end

then

Expr

Expr

Stmt

Stmt

Stmt

IfStmt

Stmt

Expr

...

...

...

...

Terminal Symbols: Nonterminal Symbols:

Page 31: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 31

if then S2 else E2

S

if then E1

S1

S

if then S2 else E1 S

if then E2 S1

S

The Dangling “Else” ProblemThis grammar is ambiguous!

Stmt → if Expr then Stmt→ if Expr then Stmt else Stmt → ...Other Stmt Forms...

Example String: if E1 then if E2 then S1 else S2

Interpretation #1: if E1 then (if E2 then S1 else S2)

Interpretation #2: if E1 then (if E2 then S1) else S2

Page 32: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 32

Goal: “Match else-clause to the closest if without an else-clause already.”Solution:

Stmt → if Expr then Stmt→ if Expr then WithElse else Stmt → ...Other Stmt Forms...

WithElse → if Expr then WithElse else WithElse→ ...Other Stmt Forms...

Any Stmt occurring between then and else must have an else.i.e., the Stmt must not end with “then Stmt”.

Interpretation #1: if E1 then (if E2 then S1 else S2)

if then WithElse else E2

Stmt

if then E1

WithElse

Stmt

S1 S2

The Dangling “Else” Problem

Page 33: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 33

Goal: “Match else-clause to the closest if without an else-clause already.”Solution:

Stmt → if Expr then Stmt→ if Expr then WithElse else Stmt → ...Other Stmt Forms...

WithElse → if Expr then WithElse else WithElse→ ...Other Stmt Forms...

Any Stmt occurring between then and else must have an else.i.e., the Stmt must not end with “then Stmt”.

Interpretation #2: if E1 then (if E2 then S1) else S2 Stmt

if then E1 Stmt

The Dangling “Else” Problem

else WithElse

Page 34: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 34

Goal: “Match else-clause to the closest if without an else-clause already.”Solution:

Stmt → if Expr then Stmt→ if Expr then WithElse else Stmt → ...Other Stmt Forms...

WithElse → if Expr then WithElse else WithElse→ ...Other Stmt Forms...

Any Stmt occurring between then and else must have an else.i.e., the Stmt must not end with “then Stmt”.

Interpretation #2: if E1 then (if E2 then S1) else S2

if then WithElse else E2

Stmt

if then E1

WithElse

Stmt

The Dangling “Else” Problem

else WithElse

Page 35: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 35

Goal: “Match else-clause to the closest if without an else-clause already.”Solution:

Stmt → if Expr then Stmt→ if Expr then WithElse else Stmt → ...Other Stmt Forms...

WithElse → if Expr then WithElse else WithElse→ ...Other Stmt Forms...

Any Stmt occurring between then and else must have an else.i.e., the Stmt must not end with “then Stmt”.

Interpretation #2: if E1 then (if E2 then S1) else S2

if then WithElse else E2

Stmt

if then E1

WithElse

Stmt

The Dangling “Else” Problem

else WithElse

Oops, No Match!

Page 36: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 36

Top-Down ParsingFind a left-most derivationFind (build) a parse treeStart building from the root and work down...As we search for a derivation...

Must make choices: • Which rule to use• Where to use it

May run into problems!

Option 1:“Backtracking”

Made a bad decisionBack up and try another choice

Option 2:Always make the right choice.Never have to backtrack: “Predictive Parser”Possible for some grammars (LL Grammars)May be able to fix some grammars (but not others)

• Eliminate Left Recursion• Left-Factor the Rules

Page 37: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 37

BacktrackingInput: aabbde

1. S → Aa2. → Ce 3. A → aaB4. → aaba5. B → bbb6. C → aaD 7. D → bbd

S

Page 38: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 38

BacktrackingInput: aabbde

1. S → Aa2. → Ce 3. A → aaB4. → aaba5. B → bbb6. C → aaD 7. D → bbd

S

A a

Page 39: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 39

BacktrackingInput: aabbde

1. S → Aa2. → Ce 3. A → aaB4. → aaba5. B → bbb6. C → aaD 7. D → bbd

S

A a

B a a

Page 40: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 40

BacktrackingInput: aabbde

1. S → Aa2. → Ce 3. A → aaB4. → aaba5. B → bbb6. C → aaD 7. D → bbd

S

A a

B a a

Page 41: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 41

BacktrackingInput: aabbde

1. S → Aa2. → Ce 3. A → aaB4. → aaba5. B → bbb6. C → aaD 7. D → bbd

S

A a

B a a

Page 42: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 42

BacktrackingInput: aabbde

1. S → Aa2. → Ce 3. A → aaB4. → aaba5. B → bbb6. C → aaD 7. D → bbd

S

A a

B

b

a a

b b

Page 43: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 43

BacktrackingInput: aabbde

1. S → Aa2. → Ce 3. A → aaB4. → aaba5. B → bbb6. C → aaD 7. D → bbd

S

A a

B

b

a a

b b

Page 44: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 44

BacktrackingInput: aabbde

1. S → Aa2. → Ce 3. A → aaB4. → aaba5. B → bbb6. C → aaD 7. D → bbd

S

A a

B

b

a a

b b

Page 45: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 45

BacktrackingInput: aabbde

1. S → Aa2. → Ce 3. A → aaB4. → aaba5. B → bbb6. C → aaD 7. D → bbd

S

A a

B

b

a a

b b

Failure Occurs Here!!!

Page 46: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 46

BacktrackingInput: aabbde

1. S → Aa2. → Ce 3. A → aaB4. → aaba5. B → bbb6. C → aaD 7. D → bbd

S

A a

B a a

We need an ability to back up in the input!!!

Page 47: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 47

BacktrackingInput: aabbde

1. S → Aa2. → Ce 3. A → aaB4. → aaba5. B → bbb6. C → aaD 7. D → bbd

S

A a

Page 48: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 48

BacktrackingInput: aabbde

1. S → Aa2. → Ce 3. A → aaB4. → aaba5. B → bbb6. C → aaD 7. D → bbd

S

A a

a a b a

Page 49: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 49

BacktrackingInput: aabbde

1. S → Aa2. → Ce 3. A → aaB4. → aaba5. B → bbb6. C → aaD 7. D → bbd

S

A a

a a b a

Page 50: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 50

BacktrackingInput: aabbde

1. S → Aa2. → Ce 3. A → aaB4. → aaba5. B → bbb6. C → aaD 7. D → bbd

S

A a

a a b a

Page 51: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 51

BacktrackingInput: aabbde

1. S → Aa2. → Ce 3. A → aaB4. → aaba5. B → bbb6. C → aaD 7. D → bbd

S

A a

a a b a

Page 52: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 52

BacktrackingInput: aabbde

1. S → Aa2. → Ce 3. A → aaB4. → aaba5. B → bbb6. C → aaD 7. D → bbd

S

A a

a a b a

Failure Occurs Here!!!

Page 53: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 53

BacktrackingInput: aabbde

1. S → Aa2. → Ce 3. A → aaB4. → aaba5. B → bbb6. C → aaD 7. D → bbd

S

A a

Page 54: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 54

BacktrackingInput: aabbde

1. S → Aa2. → Ce 3. A → aaB4. → aaba5. B → bbb6. C → aaD 7. D → bbd

S

Page 55: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 55

BacktrackingInput: aabbde

1. S → Aa2. → Ce 3. A → aaB4. → aaba5. B → bbb6. C → aaD 7. D → bbd

S

C e

Page 56: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 56

BacktrackingInput: aabbde

1. S → Aa2. → Ce 3. A → aaB4. → aaba5. B → bbb6. C → aaD 7. D → bbd

S

C e

a a D

Page 57: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 57

BacktrackingInput: aabbde

1. S → Aa2. → Ce 3. A → aaB4. → aaba5. B → bbb6. C → aaD 7. D → bbd

S

C e

a

b

a D

b d

Page 58: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 58

BacktrackingInput: aabbde

1. S → Aa2. → Ce 3. A → aaB4. → aaba5. B → bbb6. C → aaD 7. D → bbd

S

C e

a

b

a D

b d

Page 59: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 59

Predictive ParsingWill never backtrack!

Requirement:For every rule:

A → α1 | α2 | α3 | ... | αN We must be able to choose the correct alternative by looking only at the next symbol

May peek ahead to the next symbol (token).

ExampleA → aB

→ cD→ E

Assuming a,c ∉ FIRST (E)

ExampleStmt → if Expr ...

→ for LValue ...→ while Expr ...→ return Expr ...→ ID ...

Page 60: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 60

Predictive ParsingLL(1) Grammars

Can do predictive parsingCan select the right rule

Looking at only the next 1 input symbol

Page 61: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 61

Predictive ParsingLL(1) Grammars

Can do predictive parsingCan select the right rule

Looking at only the next 1 input symbol

LL(k) GrammarsCan do predictive parsingCan select the right rule

Looking at only the next k input symbols

Page 62: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 62

Predictive ParsingLL(1) Grammars

Can do predictive parsingCan select the right rule

Looking at only the next 1 input symbol

LL(k) GrammarsCan do predictive parsingCan select the right rule

Looking at only the next k input symbols

Techniques to modify the grammar:• Left Factoring• Removal of Left Recursion

Page 63: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 63

Predictive ParsingLL(1) Grammars

Can do predictive parsingCan select the right rule

Looking at only the next 1 input symbol

LL(k) GrammarsCan do predictive parsingCan select the right rule

Looking at only the next k input symbols

Techniques to modify the grammar:• Left Factoring• Removal of Left Recursion

But these may not be enough!

Page 64: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 64

Predictive ParsingLL(1) Grammars

Can do predictive parsingCan select the right rule

Looking at only the next 1 input symbol

LL(k) GrammarsCan do predictive parsingCan select the right rule

Looking at only the next k input symbols

Techniques to modify the grammar:• Left Factoring• Removal of Left Recursion

But these may not be enough!

LL(k) LanguageCan be described with an LL(k) grammar.

Page 65: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 65

Left-FactoringProblem:

Stmt → if Expr then Stmt else Stmt

→ if Expr then Stmt

→ OtherStmt

With predictive parsing, we need to know which rule to use!(While looking at just the next token)

Page 66: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 66

Left-FactoringProblem:

Stmt → if Expr then Stmt else Stmt

→ if Expr then Stmt

→ OtherStmt

With predictive parsing, we need to know which rule to use!(While looking at just the next token)

Solution:Stmt → if Expr then Stmt ElsePart

→ OtherStmt

ElsePart → else Stmt | ε

Page 67: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 67

Left-FactoringProblem:

Stmt → if Expr then Stmt else Stmt

→ if Expr then Stmt

→ OtherStmt

With predictive parsing, we need to know which rule to use!(While looking at just the next token)

Solution:Stmt → if Expr then Stmt ElsePart

→ OtherStmt

ElsePart → else Stmt | ε

General Approach:Before: A → αβ1 | αβ2 | αβ3 | ... | δ1 | δ2 | δ3 | ...

After: A → αC | δ1 | δ2 | δ3 | ...C → β1 | β2 | β3 | ...

Page 68: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 68

Left-FactoringProblem:

Stmt → if Expr then Stmt else Stmt

→ if Expr then Stmt ε

→ OtherStmt

With predictive parsing, we need to know which rule to use!(While looking at just the next token)

Solution:Stmt → if Expr then Stmt ElsePart

→ OtherStmt

ElsePart → else Stmt | ε

General Approach:Before: A → αβ1 | αβ2 | αβ3 | ... | δ1 | δ2 | δ3 | ...

After: A → αC | δ1 | δ2 | δ3 | ...C → β1 | β2 | β3 | ...

α

α

β1

β2

δ1

A

Page 69: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 69

Left-FactoringProblem:

Stmt → if Expr then Stmt else Stmt

→ if Expr then Stmt ε

→ OtherStmt

With predictive parsing, we need to know which rule to use!(While looking at just the next token)

Solution:Stmt → if Expr then Stmt ElsePart

→ OtherStmt

ElsePart → else Stmt | ε

General Approach:Before: A → αβ1 | αβ2 | αβ3 | ... | δ1 | δ2 | δ3 | ...

After: A → αC | δ1 | δ2 | δ3 | ...C → β1 | β2 | β3 | ...

C

δ1

β1

α

α

α

β1

β2

β2

δ1

A

A

C

Page 70: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 70

Left RecursionWhenever

A ⇒+ Aα

Simplest Case: Immediate Left Recursion

Given: A → Aα | β

Transform into: A → βA' A' → αA' | ε where A' is a new nonterminal

More General (but still immediate): A → Aα1 | Aα2 | Aα3 | ... | β1 | β2 | β3 | ...

Transform into: A → β1A' | β2A' | β3A' | ... A' → α1A' | α2A' | α3A' | ... | ε

Page 71: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 71

Left Recursion in More Than One StepExample:

S → Af | bA → Ac | Sd | e

Is A left recursive? Yes.

Page 72: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 72

Left Recursion in More Than One StepExample:

S → Af | bA → Ac | Sd | e

Is A left recursive? Yes.Is S left recursive?

Page 73: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 73

Left Recursion in More Than One StepExample:

S → Af | bA → Ac | Sd | e

Is A left recursive? Yes.Is S left recursive? Yes, but not immediate left recursion. S ⇒ Af ⇒ Sdf

Page 74: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 74

Left Recursion in More Than One StepExample:

S → Af | bA → Ac | Sd | e

Is A left recursive? Yes.Is S left recursive? Yes, but not immediate left recursion. S ⇒ Af ⇒ Sdf

Approach:Look at the rules for S only (ignoring other rules)... No left recursion.

Page 75: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 75

Left Recursion in More Than One StepExample:

S → Af | bA → Ac | Sd | e

Is A left recursive? Yes.Is S left recursive? Yes, but not immediate left recursion. S ⇒ Af ⇒ Sdf

Approach:Look at the rules for S only (ignoring other rules)... No left recursion.Look at the rules for A...

Page 76: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 76

Left Recursion in More Than One StepExample:

S → Af | bA → Ac | Sd | e

Is A left recursive? Yes.Is S left recursive? Yes, but not immediate left recursion. S ⇒ Af ⇒ Sdf

Approach:Look at the rules for S only (ignoring other rules)... No left recursion.Look at the rules for A...

Do any of A’s rules start with S? Yes. A → Sd

Page 77: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 77

Left Recursion in More Than One StepExample:

S → Af | bA → Ac | Sd | e

Is A left recursive? Yes.Is S left recursive? Yes, but not immediate left recursion. S ⇒ Af ⇒ Sdf

Approach:Look at the rules for S only (ignoring other rules)... No left recursion.Look at the rules for A...

Do any of A’s rules start with S? Yes. A → Sd

Get rid of the S. Substitute in the righthand sides of S. A → Afd | bd

Page 78: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 78

Left Recursion in More Than One StepExample:

S → Af | bA → Ac | Sd | e

Is A left recursive? Yes.Is S left recursive? Yes, but not immediate left recursion. S ⇒ Af ⇒ Sdf

Approach:Look at the rules for S only (ignoring other rules)... No left recursion.Look at the rules for A...

Do any of A’s rules start with S? Yes. A → Sd

Get rid of the S. Substitute in the righthand sides of S. A → Afd | bd

The modified grammar:S → Af | bA → Ac | Afd | bd | e

Page 79: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 79

Left Recursion in More Than One StepExample:

S → Af | bA → Ac | Sd | e

Is A left recursive? Yes.Is S left recursive? Yes, but not immediate left recursion. S ⇒ Af ⇒ Sdf

Approach:Look at the rules for S only (ignoring other rules)... No left recursion.Look at the rules for A...

Do any of A’s rules start with S? Yes. A → Sd

Get rid of the S. Substitute in the righthand sides of S. A → Afd | bd

The modified grammar:S → Af | bA → Ac | Afd | bd | e

Now eliminate immediate left recursion involving A.S → Af | bA → bdA' | eA'A' → cA' | fdA' | ε

Page 80: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 80

Left Recursion in More Than One StepThe Original Grammar:

S → Af | bA → Ac | Sd | e

Page 81: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 81

Left Recursion in More Than One StepThe Original Grammar:

S → Af | bA → Ac | Sd | BeB → Ag | Sh | k

Assume there are still more nonterminals;Look at the next one...

Page 82: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 82

Left Recursion in More Than One StepThe Original Grammar:

S → Af | bA → Ac | Sd | BeB → Ag | Sh | k

So Far:S → Af | bA → bdA' | BeA'A' → cA' | fdA' | ε

Page 83: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 83

Left Recursion in More Than One StepThe Original Grammar:

S → Af | bA → Ac | Sd | BeB → Ag | Sh | k

So Far:S → Af | bA → bdA' | BeA'A' → cA' | fdA' | εB → Ag | Sh | k

Look at the B rules next;Does any righthand side

start with “S”?

Page 84: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 84

Left Recursion in More Than One StepThe Original Grammar:

S → Af | bA → Ac | Sd | BeB → Ag | Sh | k

So Far:S → Af | bA → bdA' | BeA'A' → cA' | fdA' | εB → Ag | Afh | bh | k

Substitute, using the rules for “S”Af... | b...

Page 85: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 85

Left Recursion in More Than One StepThe Original Grammar:

S → Af | bA → Ac | Sd | BeB → Ag | Sh | k

So Far:S → Af | bA → bdA' | BeA'A' → cA' | fdA' | εB → Ag | Afh | bh | k

Does any righthand sidestart with “A”?

Page 86: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 86

Left Recursion in More Than One StepThe Original Grammar:

S → Af | bA → Ac | Sd | BeB → Ag | Sh | k

So Far:S → Af | bA → bdA' | BeA'A' → cA' | fdA' | εB → Ag | Afh | bh | k

Do this one first.

Page 87: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 87

Left Recursion in More Than One StepThe Original Grammar:

S → Af | bA → Ac | Sd | BeB → Ag | Sh | k

So Far:S → Af | bA → bdA' | BeA'A' → cA' | fdA' | εB → bdA'g | BeA'g | Afh | bh | k

Substitute, using the rules for “A”bdA'... | BeA'...

Page 88: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 88

Left Recursion in More Than One StepThe Original Grammar:

S → Af | bA → Ac | Sd | BeB → Ag | Sh | k

So Far:S → Af | bA → bdA' | BeA'A' → cA' | fdA' | εB → bdA'g | BeA'g | Afh | bh | k

Do this one next.

Page 89: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 89

Left Recursion in More Than One StepThe Original Grammar:

S → Af | bA → Ac | Sd | BeB → Ag | Sh | k

So Far:S → Af | bA → bdA' | BeA'A' → cA' | fdA' | εB → bdA'g | BeA'g | bdA'fh | BeA'fh | bh | k

Substitute, using the rules for “A”bdA'... | BeA'...

Page 90: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 90

Left Recursion in More Than One StepThe Original Grammar:

S → Af | bA → Ac | Sd | BeB → Ag | Sh | k

So Far:S → Af | bA → bdA' | BeA'A' → cA' | fdA' | εB → bdA'g | BeA'g | bdA'fh | BeA'fh | bh | k

Finally, eliminate any immediateLeft recursion involving “B”

Page 91: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 91

Left Recursion in More Than One StepThe Original Grammar:

S → Af | bA → Ac | Sd | BeB → Ag | Sh | k

So Far:S → Af | bA → bdA' | BeA'A' → cA' | fdA' | εB → bdA'gB' | bdA'fhB' | bhB' | kB'B' → eA'gB' | eA'fhB' | ε

Finally, eliminate any immediateLeft recursion involving “B”

Page 92: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 92

Left Recursion in More Than One StepThe Original Grammar:

S → Af | bA → Ac | Sd | Be | CB → Ag | Sh | kC → BkmA | AS | j

So Far:S → Af | bA → bdA' | BeA' | CA'A' → cA' | fdA' | εB → bdA'gB' | bdA'fhB' | bhB' | kB' | CA'gB' | CA'fhB' B' → eA'gB' | eA'fhB' | ε

If there is another nonterminal,then do it next.

Page 93: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 93

Algorithm to Eliminate Left RecursionAssume the nonterminals are ordered A1, A2, A3,... (In the example: S, A, B)

for each nonterminal Ai (for i = 1 to N) do for each nonterminal Aj (for j = 1 to i-1) do Let Aj → β1 | β2 | β3 | ... | βN be all the rules for Aj if there is a rule of the form Ai → Ajα

then replace it by Ai → β1α | β2α | β3α | ... | βNα

endIf endFor Eliminate immediate left recursion among the Ai rules endFor

A1A2A3...Aj...A7Ai

Inner Loop

Outer Loop

Page 94: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 94

Table-Driven Predictive Parsing AlgorithmAssume that the grammar is LL(1)

i.e., Backtracking will never be neededAlways know which righthand side to choose (with one look-ahead)

•  No Left Recursion•  Grammar is Left-Factored.

Step 1: From grammar, construct table.Step 2: Use table to parse strings.

ExampleE → T E'E' → + T E' | εT → F T'T' → * F T' | εF → ( E ) | id

Term ...

+Term +Term + ... +Term

* Factor * Factor * ... * Factor

Factor ...

Page 95: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 95

Table-Driven Predictive Parsing Algorithm

Input String( a * 4 ) 3 $

Algorithm Output

+

Y Z $

X

Stack ofgrammar symbols

Pre-Computed Table:

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

Page 96: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 96

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

Nonterminals

Input Symbols, plus $

Input String( a * 4 ) 3 $

Algorithm Output

+

Y Z $

X

Stack ofgrammar symbols

Pre-Computed Table:

Table-Driven Predictive Parsing AlgorithmE → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

Page 97: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 97

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

Nonterminals

Input Symbols, plus $

Input String( a * 4 ) 3 $

Algorithm Output

+

Y Z $

X

Stack ofgrammar symbols

Blank entriesindicate ERRORPre-Computed Table:

Table-Driven Predictive Parsing AlgorithmE → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

Page 98: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 98

Predictive Parsing AlgorithmSet input ptr to first symbol; Place $ after last input symbol Push $ Push S repeat X = stack top a = current input symbol if X is a terminal or X = $ then if X == a then Pop stack Advance input ptr else Error endIf elseIf Table[X,a] contains a rule then // call it X → Y1 Y2 ... YK Pop stack Push YK ... Push Y2 Push Y1 Print (“X → Y1 Y2 ... YK”) else // Table[X,a] is blank Syntax Error endIf until X == $

X A $

YK A $

...

Y2 Y1

Page 99: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 99

ExampleInput:(id*id)+id

Output:

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id+

Page 100: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 100

ExampleInput:(id*id)+id

Output:

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id+

Add $ to end of inputPush $Push E

Page 101: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 101

ExampleInput:(id*id)+id

Output:

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$

Add $ to end of inputPush $Push E

E

Page 102: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 102

ExampleInput:(id*id)+id

Output:

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$

Look at Table [ E, ‘(’ ]Use rule E→TE'Pop EPush E'Push TPrint E→TE'

E

Page 103: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 103

ExampleInput:(id*id)+id

Output:E → T E'

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T

Look at Table [ E, ‘(’ ]Use rule E→TE'Pop EPush E'Push TPrint E→TE'

Page 104: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 104

ExampleInput:(id*id)+id

Output:E → T E'

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$

Table [ T, ‘(’ ] = T→FT'Pop TPush T’Push FPrint T→FT'

E’ T

Page 105: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 105

ExampleInput:(id*id)+id

Output:E → T E'T → F T'

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’ F Table [ T, ‘(’ ] = T→FT'

Pop TPush T’Push FPrint T→FT'

Page 106: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 106

ExampleInput:(id*id)+id

Output:E → T E'T → F T'

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$

Table [ F, ‘(’ ] = F→(E)Pop FPush )Push EPush (Print F→(E)

E’ T’ F

Page 107: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 107

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E )

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’ ) E (

Table [ F, ‘(’ ] = F→(E)Pop FPush )Push EPush (Print F→(E)

Page 108: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 108

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E )

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’ ) E (

Top of Stack matches next inputPop and Scan

Page 109: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 109

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E )

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’ ) E Top of Stack matches next input

Pop and Scan

Page 110: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 110

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E )

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’ ) E Table [ E, id ] = E→TE'

Pop EPush E'Push TPrint E→TE'

Page 111: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 111

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’ ) E’ T

Table [ E, id ] = E→TE' Pop EPush E'Push TPrint E→TE'

Page 112: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 112

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’ ) E’ T

Table [ T, id ] = T→FT'Pop TPush T'Push FPrint T→FT'

Page 113: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 113

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’ ) E’ T’ F

Table [ T, id ] = T→FT'Pop TPush T'Push FPrint T→FT'

Page 114: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 114

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’ ) E’ T’ F

Table [ F, id ] = F→idPop FPush idPrint F→id

Page 115: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 115

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’ ) E’ T’ id

Table [ F, id ] = F→idPop FPush idPrint F→id

Page 116: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 116

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’ ) E’ T’ id

Top of Stack matches next inputPop and Scan

Page 117: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 117

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’ ) E’ T’

Top of Stack matches next inputPop and Scan

Page 118: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 118

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’ ) E’ T’

Table [ T', ‘*’ ] = T'→*FT'Pop T'Push T'Push FPush ‘*’Print T'→*FT'

Page 119: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 119

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’ ) E’ T’

Table [ T', ‘*’ ] = T'→*FT'Pop T'Push T'Push FPush ‘*’Print T'→*FT'

F *

Page 120: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 120

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’ ) E’ T’ F *

Top of Stack matches next inputPop and Scan

Page 121: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 121

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’ ) E’ T’ F

Top of Stack matches next inputPop and Scan

Page 122: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 122

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’ ) E’ T’ F

Table [ F, id ] = F→idPop FPush idPrint F→id

Page 123: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 123

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’ ) E’ T’ id

Table [ F, id ] = F→idPop FPush idPrint F→id

Page 124: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 124

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’ ) E’ T’ id

Top of Stack matches next inputPop and Scan

Page 125: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 125

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’ ) E’ T’

Top of Stack matches next inputPop and Scan

Page 126: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 126

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’ ) E’ T’

Table [ T', ‘)’ ] = T'→εPop T'Push <nothing>Print T'→ε

Page 127: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 127

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → ε

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’ ) E’ Table [ T', ‘)’ ] = T'→ε

Pop T'Push <nothing>Print T'→ε

Page 128: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 128

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → ε

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’ ) E’ Table [ E', ‘)’ ] = E'→ε

Pop E'Push <nothing>Print E'→ε

Page 129: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 129

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → εE' → ε

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’ )

Table [ E', ‘)’ ] = E'→εPop E'Push <nothing>Print E'→ε

Page 130: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 130

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → εE' → ε

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’ )

Top of Stack matches next inputPop and Scan

Page 131: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 131

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → εE' → ε

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’

Top of Stack matches next inputPop and Scan

Page 132: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 132

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → εE' → ε

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’

Table [ T', ‘+’ ] = T'→εPop T'Push <nothing>Print T'→ε

Page 133: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 133

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → εE' → εT' → ε

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’

Table [ T', ‘+’ ] = T'→εPop T'Push <nothing>Print T'→ε

Page 134: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 134

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → εE' → εT' → ε

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’

Table [ E', ‘+’ ] = E'→+TE'Pop E'Push E'Push TPush ‘+’Print E'→+TE'

Page 135: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 135

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → εE' → εT' → εE' → + T E'

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’

Table [ E', ‘+’ ] = E'→+TE'Pop E'Push E'Push TPush ‘+’Print E'→+TE'

T +

Page 136: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 136

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → εE' → εT' → εE' → + T E'

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T +

Top of Stack matches next inputPop and Scan

Page 137: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 137

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → εE' → εT' → εE' → + T E'

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T

Top of Stack matches next inputPop and Scan

Page 138: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 138

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → εE' → εT' → εE' → + T E'

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T

Table [ T, id ] = T→FT'Pop TPush T'Push FPrint T→FT'

Page 139: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 139

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → εE' → εT' → εE' → + T E'T → F T'

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’

Table [ T, id ] = T→FT'Pop TPush T'Push FPrint T→FT'

F

Page 140: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 140

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → εE' → εT' → εE' → + T E'T → F T'

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’

Table [ F, id ] = F→idPop FPush idPrint F→id

F

Page 141: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 141

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → εE' → εT' → εE' → + T E'T → F T'F → id

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’

Table [ F, id ] = F→idPop FPush idPrint F→id

id

Page 142: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 142

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → εE' → εT' → εE' → + T E'T → F T'F → id

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’ id

Top of Stack matches next inputPop and Scan

Page 143: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 143

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → εE' → εT' → εE' → + T E'T → F T'F → id

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’

Top of Stack matches next inputPop and Scan

Page 144: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 144

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → εE' → εT' → εE' → + T E'T → F T'F → id

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’ T’

Table [ T', $ ] = T'→εPop T'Push <nothing>Print T'→ε

Page 145: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 145

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → εE' → εT' → εE' → + T E'T → F T'F → id T' → ε

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’

Table [ T', $ ] = T'→εPop T'Push <nothing>Print T'→ε

Page 146: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 146

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → εE' → εT' → εE' → + T E'T → F T'F → id T' → ε

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$ E’

Table [ E', $ ] = E'→εPop E'Push <nothing>Print E'→ε

Page 147: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 147

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → εE' → εT' → εE' → + T E'T → F T'F → id T' → εE' → ε

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$

Table [ E', $ ] = E'→εPop E'Push <nothing>Print E'→ε

Page 148: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 148

ExampleInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → εE' → εT' → εE' → + T E'T → F T'F → id T' → εE' → ε

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

id + * ( ) $ E E→TE' E→TE'

E' E'→+TE' E'→ε E'→ε

T T→FT' T→FT'T' T'→ε T'→*FT' T'→ε T'→ε

F F→id F→(E)

( id * id ) id $+

$

Input symbol == $Top of stack == $Loop terminates with success

Page 149: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 149

Reconstructing the Parse TreeInput:(id*id)+id

Output:E → T E'

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

T

E

E'

Page 150: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 150

Reconstructing the Parse TreeInput:(id*id)+id

Output:E → T E'T → F T'

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

T

E

E'

T'F

Page 151: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 151

Reconstructing the Parse TreeInput:(id*id)+id

Output:E → T E'T → F T'F → ( E )

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

T

E

E

E'

T'F

) (

Page 152: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 152

Reconstructing the Parse TreeInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

T

T

E

E

E'

E'

T'F

) (

Page 153: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 153

Reconstructing the Parse TreeInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

T

T

E

E

E'

E'

T'

T'

F

F

) (

Page 154: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 154

Reconstructing the Parse TreeInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

T

T

E

E

E'

E'

T'

T'

F

F

id

) (

Page 155: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 155

Reconstructing the Parse TreeInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

T

T

E

E

E'

E'

T'

T'

T'

F

F

Fid *

) (

Page 156: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 156

Reconstructing the Parse TreeInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

T

T

E

E

E'

E'

T'

T'

T'

F

F

Fid

id

*

) (

Page 157: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 157

Reconstructing the Parse TreeInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → ε

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

T

T

E

E

E'

E'

T'

T'

T'

F

F

Fid

id

*

) (

ε

Page 158: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 158

Reconstructing the Parse TreeInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → εE' → ε

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

T

T

E

E

E'

E'

T'

T'

T'

F

F

Fid

id

*

) (

ε

ε

Page 159: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 159

Reconstructing the Parse TreeInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → εE' → εT' → ε

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

T

T

E

E

E'

E'

T'

T'

T'

F

F

Fid

id

*

) ( ε

ε

ε

Page 160: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 160

Reconstructing the Parse TreeInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → εE' → εT' → εE' → + T E'

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

T

T

T

E

E

E'

E'

E'T'

T'

T'

F

F

Fid

id

+

*

) ( ε

ε

ε

Page 161: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 161

Reconstructing the Parse TreeInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → εE' → εT' → εE' → + T E'T → F T'

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

T

T

T

E

E

E'

E'

E'T'

T'

T'

T'

F

F

F

F

id

id

+

*

) ( ε

ε

ε

Page 162: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 162

Reconstructing the Parse TreeInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → εE' → εT' → εE' → + T E'T → F T'F → id

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

T

T

T

E

E

E'

E'

E'T'

T'

T'

T'

F

F

F

F

id

id

id

+

*

) ( ε

ε

ε

Page 163: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 163

Reconstructing the Parse TreeInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → εE' → εT' → εE' → + T E'T → F T'F → id T' → ε

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

T

T

T

E

E

E'

E'

E'T'

T'

T'

T'

F

F

F

F

id

id

id

+

*

) ( ε

ε

ε

ε

Page 164: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 164

Reconstructing the Parse TreeInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → εE' → εT' → εE' → + T E'T → F T'F → id T' → εE' → ε

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

T

T

T

E

E

E'

E'

E'T'

T'

T'

T'

F

F

F

F

id

id

id

+

*

) ( εε

ε

ε

ε

Page 165: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 165

Reconstructing the Parse TreeInput:(id*id)+id

Output:E → T E'T → F T'F → ( E ) E → T E'T → F T'F → id T' → * F T'F → id T' → εE' → εT' → εE' → + T E'T → F T'F → id T' → εE' → ε

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id Leftmost Derivation:

ET E'F T' E'( E ) T' E' ( T E' ) T' E'( F T' E' ) T' E'( id T' E' ) T' E' ( id * F T' E' ) T' E'( id * id T' E' ) T' E' ( id * id E' ) T' E'( id * id ) T' E'( id * id ) E'( id * id ) + T E'( id * id ) + F T' E'( id * id ) + id T' E' ( id * id ) + id E'( id * id ) + id

Page 166: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 166

“FIRST” FunctionLet α be a string of symbols (terminals and nonterminals)Define:

FIRST (α) = The set of terminals that could occur firstin any string derivable from α

= { a | α ⇒* aw, plus ε if α ⇒* ε }

Page 167: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 167

“FIRST” FunctionLet α be a string of symbols (terminals and nonterminals)Define:

FIRST (α) = The set of terminals that could occur firstin any string derivable from α

= { a | α ⇒* aw, plus ε if α ⇒* ε }

Example:

FIRST (F) = ?

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

Page 168: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 168

“FIRST” FunctionLet α be a string of symbols (terminals and nonterminals)Define:

FIRST (α) = The set of terminals that could occur firstin any string derivable from α

= { a | α ⇒* aw, plus ε if α ⇒* ε }

Example:

FIRST (F) = { (, id }FIRST (T') = ?

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

Page 169: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 169

“FIRST” FunctionLet α be a string of symbols (terminals and nonterminals)Define:

FIRST (α) = The set of terminals that could occur firstin any string derivable from α

= { a | α ⇒* aw, plus ε if α ⇒* ε }

Example:

FIRST (F) = { (, id }FIRST (T') = { *, ε}FIRST (T) = ?

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

Page 170: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 170

“FIRST” FunctionLet α be a string of symbols (terminals and nonterminals)Define:

FIRST (α) = The set of terminals that could occur firstin any string derivable from α

= { a | α ⇒* aw, plus ε if α ⇒* ε }

Example:

FIRST (F) = { (, id }FIRST (T') = { *, ε}FIRST (T) = { (, id }FIRST (E') = ?

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

Page 171: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 171

“FIRST” FunctionLet α be a string of symbols (terminals and nonterminals)Define:

FIRST (α) = The set of terminals that could occur firstin any string derivable from α

= { a | α ⇒* aw, plus ε if α ⇒* ε }

Example:

FIRST (F) = { (, id }FIRST (T') = { *, ε}FIRST (T) = { (, id }FIRST (E') = { +, ε}FIRST (E) = ?

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

Page 172: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 172

“FIRST” FunctionLet α be a string of symbols (terminals and nonterminals)Define:

FIRST (α) = The set of terminals that could occur firstin any string derivable from α

= { a | α ⇒* aw, plus ε if α ⇒* ε }

Example:

FIRST (F) = { (, id }FIRST (T') = { *, ε}FIRST (T) = { (, id }FIRST (E') = { +, ε}FIRST (E) = { (, id }

E → T E'E'→ + T E' | εT → F T'T'→ * F T' | εF → ( E ) | id

Page 173: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 173

To Compute the “FIRST” FunctionFor all symbols X in the grammar...

if X is a terminal then FIRST(X) = { X }

if X → ε is a rule then add ε to FIRST(X)

if X → Y1 Y2 Y3 ... YK is a rule then if a ∈ FIRST(Y1) then add a to FIRST(X) if ε ∈ FIRST(Y1) and a ∈ FIRST(Y2) then add a to FIRST(X) if ε ∈ FIRST(Y1) and ε ∈ FIRST(Y2) and a ∈ FIRST(Y3) then add a to FIRST(X) ... if ε ∈ FIRST(Yi) for all Yi then add ε to FIRST(X)

Repeat until nothing more can be added to any sets.

Page 174: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 174

To Compute the FIRST(X1X2X3...XN)Result = {} Add everything in FIRST(X1), except ε, to result

Page 175: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 175

Result = {} Add everything in FIRST(X1), except ε, to result if ε ∈ FIRST(X1) then Add everything in FIRST(X2), except ε, to result

endIf

To Compute the FIRST(X1X2X3...XN)

Page 176: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 176

Result = {} Add everything in FIRST(X1), except ε, to result if ε ∈ FIRST(X1) then Add everything in FIRST(X2), except ε, to result if ε ∈ FIRST(X2) then Add everything in FIRST(X3), except ε, to result

endIf endIf

To Compute the FIRST(X1X2X3...XN)

Page 177: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 177

Result = {} Add everything in FIRST(X1), except ε, to result if ε ∈ FIRST(X1) then Add everything in FIRST(X2), except ε, to result if ε ∈ FIRST(X2) then Add everything in FIRST(X3), except ε, to result if ε ∈ FIRST(X3) then Add everything in FIRST(X4), except ε, to result

endIf endIf endIf

To Compute the FIRST(X1X2X3...XN)

Page 178: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 178

Result = {} Add everything in FIRST(X1), except ε, to result if ε ∈ FIRST(X1) then Add everything in FIRST(X2), except ε, to result if ε ∈ FIRST(X2) then Add everything in FIRST(X3), except ε, to result if ε ∈ FIRST(X3) then Add everything in FIRST(X4), except ε, to result ... if ε ∈ FIRST(XN-1) then Add everything in FIRST(XN), except ε, to result

endIf ... endIf endIf endIf

To Compute the FIRST(X1X2X3...XN)

Page 179: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 179

Result = {} Add everything in FIRST(X1), except ε, to result if ε ∈ FIRST(X1) then Add everything in FIRST(X2), except ε, to result if ε ∈ FIRST(X2) then Add everything in FIRST(X3), except ε, to result if ε ∈ FIRST(X3) then Add everything in FIRST(X4), except ε, to result ... if ε ∈ FIRST(XN-1) then Add everything in FIRST(XN), except ε, to result if ε ∈ FIRST(XN) then // Then X1 ⇒* ε, X2 ⇒* ε, X3 ⇒* ε, ... XN ⇒* ε Add ε to result endIf endIf ... endIf endIf endIf

To Compute the FIRST(X1X2X3...XN)

Page 180: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 180

add $ to FOLLOW(S) repeat if A→αBβ is a rule then add every terminal in FIRST(β) except ε to FOLLOW(B) if FIRST(β) contains ε then add everything in FOLLOW(A) to FOLLOW(B) endIf endIf if A→αB is a rule then add everything in FOLLOW(A) to FOLLOW(B) endIf until We cannot add anything more

To Compute FOLLOW(Ai) for all Nonterminals in the Grammar

Page 181: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 181

Example of FOLLOW Computation

Previously computed FIRST sets...FIRST (F) = { (, id }FIRST (T') = { *, ε}FIRST (T) = { (, id }FIRST (E') = { +, ε}FIRST (E) = { (, id }

The FOLLOW sets...FOLLOW (E) = { ? FOLLOW (E') = { ? FOLLOW (T) = { ? FOLLOW (T') = { ? FOLLOW (F) = { ?

E → T E'E' → + T E' | εT → F T'T' → * F T' | εF → ( E ) | id

Page 182: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 182

Example of FOLLOW Computation

Previously computed FIRST sets...FIRST (F) = { (, id }FIRST (T') = { *, ε}FIRST (T) = { (, id }FIRST (E') = { +, ε}FIRST (E) = { (, id }

The FOLLOW sets...FOLLOW (E) = { FOLLOW (E') = {FOLLOW (T) = {FOLLOW (T') = {FOLLOW (F) = {

E → T E'E' → + T E' | εT → F T'T' → * F T' | εF → ( E ) | id

Add $ to FOLLOW(S)

Page 183: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 183

Example of FOLLOW Computation

Previously computed FIRST sets...FIRST (F) = { (, id }FIRST (T') = { *, ε}FIRST (T) = { (, id }FIRST (E') = { +, ε}FIRST (E) = { (, id }

The FOLLOW sets...FOLLOW (E) = { $, FOLLOW (E') = {FOLLOW (T) = {FOLLOW (T') = {FOLLOW (F) = {

E → T E'E' → + T E' | εT → F T'T' → * F T' | εF → ( E ) | id

Add $ to FOLLOW(S)

Page 184: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 184

Example of FOLLOW Computation

Previously computed FIRST sets...FIRST (F) = { (, id }FIRST (T') = { *, ε}FIRST (T) = { (, id }FIRST (E') = { +, ε}FIRST (E) = { (, id }

The FOLLOW sets...FOLLOW (E) = { $,FOLLOW (E') = {FOLLOW (T) = {FOLLOW (T') = { FOLLOW (F) = {

E → T E'E' → + T E' | εT → F T'T' → * F T' | εF → ( E ) | id

Look at ruleF → ( E ) | id

What can follow E?

Page 185: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 185

Example of FOLLOW Computation

Previously computed FIRST sets...FIRST (F) = { (, id }FIRST (T') = { *, ε}FIRST (T) = { (, id }FIRST (E') = { +, ε}FIRST (E) = { (, id }

The FOLLOW sets...FOLLOW (E) = { $, )FOLLOW (E') = {FOLLOW (T) = {FOLLOW (T') = { FOLLOW (F) = {

E → T E'E' → + T E' | εT → F T'T' → * F T' | εF → ( E ) | id

Look at ruleF → ( E ) | id

What can follow E?

Page 186: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 186

Example of FOLLOW Computation

Previously computed FIRST sets...FIRST (F) = { (, id }FIRST (T') = { *, ε}FIRST (T) = { (, id }FIRST (E') = { +, ε}FIRST (E) = { (, id }

The FOLLOW sets...FOLLOW (E) = { $, )FOLLOW (E') = { FOLLOW (T) = {FOLLOW (T') = { FOLLOW (F) = {

E → T E'E' → + T E' | εT → F T'T' → * F T' | εF → ( E ) | id

Look at rule E → T E'

Whatever can follow E can also follow E'

Page 187: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 187

Example of FOLLOW Computation

Previously computed FIRST sets...FIRST (F) = { (, id }FIRST (T') = { *, ε}FIRST (T) = { (, id }FIRST (E') = { +, ε}FIRST (E) = { (, id }

The FOLLOW sets...FOLLOW (E) = { $, )FOLLOW (E') = { $, ) FOLLOW (T) = {FOLLOW (T') = { FOLLOW (F) = {

E → T E'E' → + T E' | εT → F T'T' → * F T' | εF → ( E ) | id

Look at rule E → T E'

Whatever can follow E can also follow E'

Page 188: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 188

Example of FOLLOW Computation

Previously computed FIRST sets...FIRST (F) = { (, id }FIRST (T') = { *, ε}FIRST (T) = { (, id }FIRST (E') = { +, ε}FIRST (E) = { (, id }

The FOLLOW sets...FOLLOW (E) = { $, )FOLLOW (E') = { $, ) FOLLOW (T) = { FOLLOW (T') = { FOLLOW (F) = {

E → T E'E' → + T E' | εT → F T'T' → * F T' | εF → ( E ) | id

Look at rule E'0 → + T E'1

Whatever is in FIRST(E'1) can follow T

Page 189: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 189

Example of FOLLOW Computation

Previously computed FIRST sets...FIRST (F) = { (, id }FIRST (T') = { *, ε}FIRST (T) = { (, id }FIRST (E') = { +, ε}FIRST (E) = { (, id }

The FOLLOW sets...FOLLOW (E) = { $, )FOLLOW (E') = { $, ) FOLLOW (T) = { +,FOLLOW (T') = { FOLLOW (F) = {

E → T E'E' → + T E' | εT → F T'T' → * F T' | εF → ( E ) | id

Look at rule E'0 → + T E'1

Whatever is in FIRST(E'1) can follow T

Page 190: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 190

Example of FOLLOW Computation

Previously computed FIRST sets...FIRST (F) = { (, id }FIRST (T') = { *, ε}FIRST (T) = { (, id }FIRST (E') = { +, ε}FIRST (E) = { (, id }

The FOLLOW sets...FOLLOW (E) = { $, )FOLLOW (E') = { $, ) FOLLOW (T) = { +,FOLLOW (T') = { FOLLOW (F) = {

E → T E'E' → + T E' | εT → F T'T' → * F T' | εF → ( E ) | id

Look at rule T'0 → * F T'1

Whatever is in FIRST(T'1) can follow F

Page 191: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 191

Example of FOLLOW Computation

Previously computed FIRST sets...FIRST (F) = { (, id }FIRST (T') = { *, ε}FIRST (T) = { (, id }FIRST (E') = { +, ε}FIRST (E) = { (, id }

The FOLLOW sets...FOLLOW (E) = { $, )FOLLOW (E') = { $, ) FOLLOW (T) = { +,FOLLOW (T') = { FOLLOW (F) = { *,

E → T E'E' → + T E' | εT → F T'T' → * F T' | εF → ( E ) | id

Look at rule T'0 → * F T'1

Whatever is in FIRST(T'1) can follow F

Page 192: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 192

Example of FOLLOW Computation

Previously computed FIRST sets...FIRST (F) = { (, id }FIRST (T') = { *, ε}FIRST (T) = { (, id }FIRST (E') = { +, ε}FIRST (E) = { (, id }

The FOLLOW sets...FOLLOW (E) = { $, )FOLLOW (E') = { $, ) FOLLOW (T) = { +, FOLLOW (T') = { FOLLOW (F) = { *,

E → T E'E' → + T E' | εT → F T'T' → * F T' | εF → ( E ) | id

Look at rule E'0 → + T E'1

Since E'1 can go to ε i.e., ε ∈ FIRST(E')

Everything in FOLLOW(E'0) can follow T

Page 193: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 193

Example of FOLLOW Computation

Previously computed FIRST sets...FIRST (F) = { (, id }FIRST (T') = { *, ε}FIRST (T) = { (, id }FIRST (E') = { +, ε}FIRST (E) = { (, id }

The FOLLOW sets...FOLLOW (E) = { $, )FOLLOW (E') = { $, ) FOLLOW (T) = { +, $, ) FOLLOW (T') = { FOLLOW (F) = { *,

E → T E'E' → + T E' | εT → F T'T' → * F T' | εF → ( E ) | id

Look at rule E'0 → + T E'1

Since E'1 can go to ε i.e., ε ∈ FIRST(E')

Everything in FOLLOW(E'0) can follow T

Page 194: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 194

Example of FOLLOW Computation

Previously computed FIRST sets...FIRST (F) = { (, id }FIRST (T') = { *, ε}FIRST (T) = { (, id }FIRST (E') = { +, ε}FIRST (E) = { (, id }

The FOLLOW sets...FOLLOW (E) = { $, )FOLLOW (E') = { $, ) FOLLOW (T) = { +, $, ) FOLLOW (T') = { FOLLOW (F) = { *,

E → T E'E' → + T E' | εT → F T'T' → * F T' | εF → ( E ) | id

Look at rule T → F T'

Whatever can follow T can also follow T'

Page 195: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 195

Example of FOLLOW Computation

Previously computed FIRST sets...FIRST (F) = { (, id }FIRST (T') = { *, ε}FIRST (T) = { (, id }FIRST (E') = { +, ε}FIRST (E) = { (, id }

The FOLLOW sets...FOLLOW (E) = { $, )FOLLOW (E') = { $, ) FOLLOW (T) = { +, $, ) FOLLOW (T') = { +, $, ) FOLLOW (F) = { *,

E → T E'E' → + T E' | εT → F T'T' → * F T' | εF → ( E ) | id

Look at rule T → F T'

Whatever can follow T can also follow T'

Page 196: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 196

Example of FOLLOW Computation

Previously computed FIRST sets...FIRST (F) = { (, id }FIRST (T') = { *, ε}FIRST (T) = { (, id }FIRST (E') = { +, ε}FIRST (E) = { (, id }

The FOLLOW sets...FOLLOW (E) = { $, )FOLLOW (E') = { $, ) FOLLOW (T) = { +, $, ) FOLLOW (T') = { +, $, ) FOLLOW (F) = { *,

E → T E'E' → + T E' | εT → F T'T' → * F T' | εF → ( E ) | id

Look at rule T'0 → * F T'1

Since T'1 can go to εi.e., ε ∈ FIRST(T')

Everything in FOLLOW(T'0) can follow F

Page 197: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 197

Example of FOLLOW Computation

Previously computed FIRST sets...FIRST (F) = { (, id }FIRST (T') = { *, ε}FIRST (T) = { (, id }FIRST (E') = { +, ε}FIRST (E) = { (, id }

The FOLLOW sets...FOLLOW (E) = { $, )FOLLOW (E') = { $, ) FOLLOW (T) = { +, $, ) FOLLOW (T') = { +, $, ) FOLLOW (F) = { *, +, $, )

E → T E'E' → + T E' | εT → F T'T' → * F T' | εF → ( E ) | id

Look at rule T'0 → * F T'1

Since T'1 can go to εi.e., ε ∈ FIRST(T')

Everything in FOLLOW(T'0) can follow F

Page 198: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 198

Example of FOLLOW Computation

Previously computed FIRST sets...FIRST (F) = { (, id }FIRST (T') = { *, ε}FIRST (T) = { (, id }FIRST (E') = { +, ε}FIRST (E) = { (, id }

The FOLLOW sets...FOLLOW (E) = { $, ) }FOLLOW (E') = { $, ) }FOLLOW (T) = { +, $, ) }FOLLOW (T') = { +, $, ) }FOLLOW (F) = { *, +, $, ) }

E → T E'E' → + T E' | εT → F T'T' → * F T' | εF → ( E ) | id

Nothing more can be added.

Page 199: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 199

Building the Predictive Parsing Table

The Main Idea:

Assume we’re looking for an Ai.e., A is on the stack top.

Assume b is the current input symbol.

Page 200: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 200

Building the Predictive Parsing Table

The Main Idea:

Assume we’re looking for an Ai.e., A is on the stack top.

Assume b is the current input symbol.

If A→α is a rule and b is in FIRST(α)then expand A using the A→α rule!

Page 201: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 201

Building the Predictive Parsing Table

The Main Idea:

Assume we’re looking for an Ai.e., A is on the stack top.

Assume b is the current input symbol.

If A→α is a rule and b is in FIRST(α)then expand A using the A→α rule!

What if ε is in FIRST(α)? [i.e., α ⇒* ε ]If b is in FOLLOW(A)

then expand A using the A→α rule!

Page 202: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 202

Building the Predictive Parsing Table

The Main Idea:

Assume we’re looking for an Ai.e., A is on the stack top.

Assume b is the current input symbol.

If A→α is a rule and b is in FIRST(α)then expand A using the A→α rule!

What if ε is in FIRST(α)? [i.e., α ⇒* ε ]If b is in FOLLOW(A)

then expand A using the A→α rule!

If ε is in FIRST(α) and $ is the current input symbolthen if $ is in FOLLOW(A)

then expand A using the A→α rule!

Page 203: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 203

Example: The “Dangling Else” Grammar

“if b then if b then otherStmt else otherStmt”

1. S → if E then S S' 2. S → otherStmt3. S' → else S 4. S' → ε 5. E → boolExpr

Page 204: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 204

Example: The “Dangling Else” Grammar

i b t i b t o e o ⇐ “if b then if b then otherStmt else otherStmt”

1. S → i E t S S' 2. S → o3. S' → e S 4. S' → ε 5. E → b

1. S → if E then S S' 2. S → otherStmt3. S' → else S 4. S' → ε 5. E → boolExpr

Page 205: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 205

Example: The “Dangling Else” Grammar

i b t i b t o e o

1. S → i E t S S' 2. S → o3. S' → e S 4. S' → ε 5. E → b

Page 206: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 206

Example: The “Dangling Else” Grammar

i b t i b t o e o

FIRST(S) = { i, o } FOLLOW(S) = { e, $ }FIRST(S') = { e, ε } FOLLOW(S') = { e, $ } FIRST(E) = { b } FOLLOW(E) = { t }

1. S → i E t S S' 2. S → o3. S' → e S 4. S' → ε 5. E → b

Page 207: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 207

Example: The “Dangling Else” Grammar

i b t i b t o e o

FIRST(S) = { i, o } FOLLOW(S) = { e, $ }FIRST(S') = { e, ε } FOLLOW(S') = { e, $ } FIRST(E) = { b } FOLLOW(E) = { t }

1. S → i E t S S' 2. S → o3. S' → e S 4. S' → ε 5. E → b

o b e i t $

SS'

E

Look at Rule 1: S → i E t S S' If we are looking for an S and the next symbol is in FIRST(i E t S S' )... Add that rule to the table

Page 208: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 208

Example: The “Dangling Else” Grammar

i b t i b t o e o

FIRST(S) = { i, o } FOLLOW(S) = { e, $ }FIRST(S') = { e, ε } FOLLOW(S') = { e, $ } FIRST(E) = { b } FOLLOW(E) = { t }

1. S → i E t S S' 2. S → o3. S' → e S 4. S' → ε 5. E → b

o b e i t $

S S → iEtSS' S'

E

Look at Rule 1: S → i E t S S' If we are looking for an S and the next symbol is in FIRST(i E t S S' )... Add that rule to the table

Page 209: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 209

Example: The “Dangling Else” Grammar

i b t i b t o e o

FIRST(S) = { i, o } FOLLOW(S) = { e, $ }FIRST(S') = { e, ε } FOLLOW(S') = { e, $ } FIRST(E) = { b } FOLLOW(E) = { t }

1. S → i E t S S' 2. S → o3. S' → e S 4. S' → ε 5. E → b

o b e i t $

S S → iEtSS' S'

E

Look at Rule 2: S → o If we are looking for an S and the next symbol is in FIRST(o)... Add that rule to the table

Page 210: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 210

Example: The “Dangling Else” Grammar

i b t i b t o e o

FIRST(S) = { i, o } FOLLOW(S) = { e, $ }FIRST(S') = { e, ε } FOLLOW(S') = { e, $ } FIRST(E) = { b } FOLLOW(E) = { t }

1. S → i E t S S' 2. S → o3. S' → e S 4. S' → ε 5. E → b

o b e i t $

S S → o S → iEtSS' S'

E

Look at Rule 2: S → o If we are looking for an S and the next symbol is in FIRST(o)... Add that rule to the table

Page 211: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 211

Example: The “Dangling Else” Grammar

i b t i b t o e o

FIRST(S) = { i, o } FOLLOW(S) = { e, $ }FIRST(S') = { e, ε } FOLLOW(S') = { e, $ } FIRST(E) = { b } FOLLOW(E) = { t }

1. S → i E t S S' 2. S → o3. S' → e S 4. S' → ε 5. E → b

o b e i t $

S S → o S → iEtSS' S'

E

Look at Rule 5: E → b If we are looking for an E and the next symbol is in FIRST(b)... Add that rule to the table

Page 212: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 212

Example: The “Dangling Else” Grammar

i b t i b t o e o

FIRST(S) = { i, o } FOLLOW(S) = { e, $ }FIRST(S') = { e, ε } FOLLOW(S') = { e, $ } FIRST(E) = { b } FOLLOW(E) = { t }

1. S → i E t S S' 2. S → o3. S' → e S 4. S' → ε 5. E → b

o b e i t $

S S → o S → iEtSS' S'

E E → b

Look at Rule 5: E → b If we are looking for an E and the next symbol is in FIRST(b)... Add that rule to the table

Page 213: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 213

Example: The “Dangling Else” Grammar

i b t i b t o e o

FIRST(S) = { i, o } FOLLOW(S) = { e, $ }FIRST(S') = { e, ε } FOLLOW(S') = { e, $ } FIRST(E) = { b } FOLLOW(E) = { t }

1. S → i E t S S' 2. S → o3. S' → e S 4. S' → ε 5. E → b

o b e i t $

S S → o S → iEtSS' S'

E E → b

Look at Rule 3: S' → e S If we are looking for an S' and the next symbol is in FIRST(e S )... Add that rule to the table

Page 214: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 214

Example: The “Dangling Else” Grammar

i b t i b t o e o

FIRST(S) = { i, o } FOLLOW(S) = { e, $ }FIRST(S') = { e, ε } FOLLOW(S') = { e, $ } FIRST(E) = { b } FOLLOW(E) = { t }

1. S → i E t S S' 2. S → o3. S' → e S 4. S' → ε 5. E → b

Look at Rule 3: S' → e S If we are looking for an S' and the next symbol is in FIRST(e S )... Add that rule to the table

o b e i t $

S S → o S → iEtSS' S' S' → e S

E E → b

Page 215: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 215

Example: The “Dangling Else” Grammar

i b t i b t o e o

FIRST(S) = { i, o } FOLLOW(S) = { e, $ }FIRST(S') = { e, ε } FOLLOW(S') = { e, $ } FIRST(E) = { b } FOLLOW(E) = { t }

1. S → i E t S S' 2. S → o3. S' → e S 4. S' → ε 5. E → b

Look at Rule 4: S' → ε If we are looking for an S' and ε ∈ FIRST(rhs)... Then if $ ∈ FOLLOW(S')... Add that rule under $

o b e i t $

S S → o S → iEtSS' S' S' → e S

E E → b

Page 216: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 216

Example: The “Dangling Else” Grammar

i b t i b t o e o

FIRST(S) = { i, o } FOLLOW(S) = { e, $ }FIRST(S') = { e, ε } FOLLOW(S') = { e, $ } FIRST(E) = { b } FOLLOW(E) = { t }

1. S → i E t S S' 2. S → o3. S' → e S 4. S' → ε 5. E → b

Look at Rule 4: S' → ε If we are looking for an S' and ε ∈ FIRST(rhs)... Then if $ ∈ FOLLOW(S')... Add that rule under $

o b e i t $

S S → o S → iEtSS' S' S' → e S S' → ε

E E → b

Page 217: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 217

Example: The “Dangling Else” Grammar

i b t i b t o e o

FIRST(S) = { i, o } FOLLOW(S) = { e, $ }FIRST(S') = { e, ε } FOLLOW(S') = { e, $ } FIRST(E) = { b } FOLLOW(E) = { t }

1. S → i E t S S' 2. S → o3. S' → e S 4. S' → ε 5. E → b

Look at Rule 4: S' → ε If we are looking for an S' and ε ∈ FIRST(rhs)... Then if e ∈ FOLLOW(S')... Add that rule under e

o b e i t $

S S → o S → iEtSS' S' S' → e S S' → ε

E E → b

Page 218: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 218

Example: The “Dangling Else” Grammar

i b t i b t o e o

FIRST(S) = { i, o } FOLLOW(S) = { e, $ }FIRST(S') = { e, ε } FOLLOW(S') = { e, $ } FIRST(E) = { b } FOLLOW(E) = { t }

1. S → i E t S S' 2. S → o3. S' → e S 4. S' → ε 5. E → b

o b e i t $

S S → o S → iEtSS' S' S' → e S

S' → ε S' → ε

E E → b

Look at Rule 4: S' → ε If we are looking for an S' and ε ∈ FIRST(rhs)... Then if e ∈ FOLLOW(S')... Add that rule under e

Page 219: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 219

Example: The “Dangling Else” Grammar

i b t i b t o e o

FIRST(S) = { i, o } FOLLOW(S) = { e, $ }FIRST(S') = { e, ε } FOLLOW(S') = { e, $ } FIRST(E) = { b } FOLLOW(E) = { t }

1. S → i E t S S' 2. S → o3. S' → e S 4. S' → ε 5. E → b

o b e i t $

S S → o S → iEtSS' S' S' → e S

S' → ε S' → ε

E E → b

CONFLICT!Two rules in one table entry.

Page 220: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 220

Example: The “Dangling Else” Grammar

i b t i b t o e o

FIRST(S) = { i, o } FOLLOW(S) = { e, $ }FIRST(S') = { e, ε } FOLLOW(S') = { e, $ } FIRST(E) = { b } FOLLOW(E) = { t }

1. S → i E t S S' 2. S → o3. S' → e S 4. S' → ε 5. E → b

o b e i t $

S S → o S → iEtSS' S' S' → e S

S' → ε S' → ε

E E → b

CONFLICT!Two rules in one table entry.The grammar is not LL(1)!

Page 221: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 221

Algorithm to Build the TableInput: Grammar GOutput: Parsing Table, such that TABLE[A,b]= Rule to use or “ERROR/Blank”

Page 222: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 222

Algorithm to Build the TableInput: Grammar GOutput: Parsing Table, such that TABLE[A,b]= Rule to use or “ERROR/Blank”

Compute FIRST and FOLLOW sets

Page 223: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 223

Algorithm to Build the TableInput: Grammar GOutput: Parsing Table, such that TABLE[A,b]= Rule to use or “ERROR/Blank”

Compute FIRST and FOLLOW sets for each rule A→α do for each terminal b in FIRST(α) do add A→α to TABLE[A,b] endFor

endFor

Page 224: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 224

Algorithm to Build the TableInput: Grammar GOutput: Parsing Table, such that TABLE[A,b]= Rule to use or “ERROR/Blank”

Compute FIRST and FOLLOW sets for each rule A→α do for each terminal b in FIRST(α) do add A→α to TABLE[A,b] endFor if ε is in FIRST(α) then for each terminal b in FOLLOW(A) do add A→α to TABLE[A,b] endFor

endIf endFor

Page 225: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 225

Algorithm to Build the TableInput: Grammar GOutput: Parsing Table, such that TABLE[A,b]= Rule to use or “ERROR/Blank”

Compute FIRST and FOLLOW sets for each rule A→α do for each terminal b in FIRST(α) do add A→α to TABLE[A,b] endFor if ε is in FIRST(α) then for each terminal b in FOLLOW(A) do add A→α to TABLE[A,b] endFor if $ is in FOLLOW(A) then add A→α to TABLE[A,$] endIf endIf endFor

Page 226: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 226

Algorithm to Build the TableInput: Grammar GOutput: Parsing Table, such that TABLE[A,b]= Rule to use or “ERROR/Blank”

Compute FIRST and FOLLOW sets for each rule A→α do for each terminal b in FIRST(α) do add A→α to TABLE[A,b] endFor if ε is in FIRST(α) then for each terminal b in FOLLOW(A) do add A→α to TABLE[A,b] endFor if $ is in FOLLOW(A) then add A→α to TABLE[A,$] endIf endIf endFor TABLE[A,b] is undefined? Then set TABLE[A,b] to “error”

Page 227: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 227

Algorithm to Build the TableInput: Grammar GOutput: Parsing Table, such that TABLE[A,b]= Rule to use or “ERROR/Blank”

Compute FIRST and FOLLOW sets for each rule A→α do for each terminal b in FIRST(α) do add A→α to TABLE[A,b] endFor if ε is in FIRST(α) then for each terminal b in FOLLOW(A) do add A→α to TABLE[A,b] endFor if $ is in FOLLOW(A) then add A→α to TABLE[A,$] endIf endIf endFor TABLE[A,b] is undefined? Then set TABLE[A,b] to “error” TABLE[A,b] is multiply defined?

The algorithm fails!!! Grammar G is not LL(1)!!!

Page 228: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 228

LL(1) GrammarsLL(1) grammars

• Are never ambiguous.•  Will never have left recursion.

Furthermore...If we are looking for an “A” and the next symbol is “b”,

Then only one production must be possible.

More Precisely... If A→α and A→β are two rules

If α ⇒* a... and β ⇒* b... then we require a ≠ b(i.e., FIRST(α) and FIRST(β) must not intersect)

If α ⇒* ε then β ⇒* ε must not be possible.(i.e., only one alternative can derive ε.)

If α ⇒* ε and β ⇒* b...then b must not be in FOLLOW(A)

Scanning input left-to-rightFind Leftmost derivation

Using only one symbol of look-ahead

Page 229: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 229

Error RecoveryWe have an error whenever...

• Stacktop is a terminal, but stacktop ≠ input symbol• Stacktop is a nonterminal but TABLE[A,b] is empty

Options1. Skip over input symbols, until we can resume parsing

Corresponds to ignoring tokens2. Pop stack, until we can resume parsing

Corresponds to inserting missing material3. Some combination of 1 and 24. “Panic Mode” - Use Synchronizing tokens

• Identify a set of synchronizing tokens.• Skip over tokens until we are positioned on a synchronizing token.• Pop stack until we can resume parsing.

Page 230: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 230

Option 1: Skip Input SymbolsExample:

Decided to use ruleS → IF E THEN S ELSE S END

Stack tells us what we are expecting next in the input.We’ve already gotten IF and EAssume there are extra tokens in the input.

if (x<5))) then y = 7; ...

A syntax error occurs here.

< 5 ) ) ) y =TH

$ ... END S

ELSE S

THEN

We want to skip tokens untilwe can resume parsing.

... ...

Page 231: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 231

Option 2: Pop The StackExample:

Decided to use rulesS → IF E THEN S ELSE S END E → ( E )

We’ve already gotten if ( E Assume there are missing tokens.

if (x < 5 then y = 7;...

IF ( x < 5 y =TH

We want to pop the stack untilwe can resume parsing.

$ ... END S

ELSE S

THEN )

A syntax error occurs here.

... ...

Page 232: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 232

Panic Mode RecoveryThe “Synchronizing Set” of tokens

... is determined by the compiler writer beforehandExample: { SEMI-COLON, RIGHT-BRACE }

Skip input symbols until we find something in the synchronizing set.

Idea:Look at the non-terminal on the stack top.Choose the synchronizing set based on this non-terminal.

Assume A is on the stack topLet SynchSet = FOLLOW(A)

Skip tokens until we see something in FOLLOW(A)Pop A from the stack.Should be able to keep going.

Idea:Look at the non-terminals in the stack (e.g., A, B, C, ...)Include FIRST(A), FIRST(B), FIRST(C), ... in the SynchSet.Skip tokens until we see something in FIRST(A), FIRST(B), FIRST(C), ... Pop stack until NextToken ∈ FIRST(NonTerminalOnStackTop)

Page 233: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 233

Error Recovery - Table EntriesEach blank entry in the table indicates an error.Tailor the error recovery for each possible error.Fill the blank entry with an error routine.

The error routine will tell what to do.

Page 234: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 234

Error Recovery - Table EntriesEach blank entry in the table indicates an error.Tailor the error recovery for each possible error.Fill the blank entry with an error routine.

The error routine will tell what to do.

Example:id SEMI RPAREN LPAREN ... $

E E4 E' E5...

Page 235: Syntax Analysis - Computer Action Teamweb.cecs.pdx.edu/~harry/compilers/slides/SyntaxPart1-xxx.pdfSyntax Analysis - Part 1 © Harry H. Porter, 2005 3 Output of Parser? Succeed is string

Syntax Analysis - Part 1

© Harry H. Porter, 2005 235

Error Recovery - Table EntriesEach blank entry in the table indicates an error.Tailor the error recovery for each possible error.Fill the blank entry with an error routine.

The error routine will tell what to do.

Example:

... E4:

SynchSet = { SEMI, IF, THEN } SkipTokensTo (SynchSet) Print (“Unexpected right paren”) Pop stack break

E5: ... ...

id SEMI RPAREN LPAREN ... $

E E4 E' E5... Choose the SynchSet

based on theparticular error

Error-Handling Code