+ All Categories
Home > Documents > Top-Down Parsing

Top-Down Parsing

Date post: 12-Jan-2016
Category:
Upload: gisela
View: 32 times
Download: 1 times
Share this document with a friend
Description:
Top-Down Parsing. Identify a leftmost derivation for an input string Why ? By always replacing the leftmost non-terminal symbol via a production rule, we are guaranteed of developing a parse tree in a left-to-right fashion that is consistent with scanning the input. - PowerPoint PPT Presentation
30
CH4.1 314ALL Dr. Mohamed Ramadan Saady Top-Down Parsing Top-Down Parsing Identify a leftmost derivation for an input string Why ? By always replacing the leftmost non-terminal symbol via a production rule, we are guaranteed of developing a parse tree in a left-to-right fashion that is consistent with scanning the input. A aBc adDc adec (scan a, scan d, scan e, scan c - accept!) Recursive-descent parsing concepts Predictive parsing Recursive / Brute force technique non-recursive / table driven
Transcript
Page 1: Top-Down Parsing

CH4.1

314ALL

Dr. Mohamed Ramadan Saady

Top-Down ParsingTop-Down Parsing

• Identify a leftmost derivation for an input string

• Why ?

• By always replacing the leftmost non-terminal symbol via a production rule, we are guaranteed of developing a parse tree in a left-to-right fashion that is consistent with scanning the input.

• A aBc adDc adec (scan a, scan d, scan e, scan c - accept!)

• Recursive-descent parsing concepts

•Predictive parsing

• Recursive / Brute force technique

• non-recursive / table driven

• Error recovery

• Implementation

Page 2: Top-Down Parsing

CH4.2

314ALL

Dr. Mohamed Ramadan Saady

Top-Down ParsingTop-Down Parsing

From Grammar to Parser, take IFrom Grammar to Parser, take I

Page 3: Top-Down Parsing

CH4.3

314ALL

Dr. Mohamed Ramadan Saady

Recursive Descent ParsingRecursive Descent Parsing

• General category of Parsing Top-Down

• Choose production rule based on input symbol

• May require backtracking to correct a wrong choice.

• Example: S c A d A ab | a

input: cad

cad S

c dA

cadS

c dA

a b

cadS

c dA

a b Problem: backtrack

cadS

c dA

a

cadS

c dA

a

Page 4: Top-Down Parsing

CH4.4

314ALL

Dr. Mohamed Ramadan Saady

Top-Down ParsingTop-Down Parsing

From Grammar to Parser, take IIFrom Grammar to Parser, take II

Page 5: Top-Down Parsing

CH4.5

314ALL

Dr. Mohamed Ramadan Saady

Predictive ParsingPredictive Parsing

•Backtracking is bad!

•To eliminate backtracking, what must we do/be sure of for grammar?• no left recursion• apply left factoring

• (frequently) when grammar satisfies above conditions:current input symbol in conjunction with current non-terminal uniquely determines the production that needs to be applied.

• Utilize transition diagrams:

For each non-terminal of the grammar do following:

1. Create an initial and final state

2. If A X1X2…Xn is a production, add path with edges X1, X2, … , Xn

• Once transition diagrams have been developed, apply a straightforward technique to algorithmicize transition diagrams with procedure and possible recursion.

Page 6: Top-Down Parsing

CH4.6

314ALL

Dr. Mohamed Ramadan Saady

Transition DiagramsTransition Diagrams

• Unlike lexical equivalents, each edge represents a token•Transition implies: if token, match input else call proc• Recall earlier grammar and its associated transition diagrams

E TE’ E’ + TE’ |

T FT’ T’ * FT’ |

F ( E ) | id

0 21T E’

E:

3 6+

4T

E’: 5E’

7 98F T’

T:

10 13*

11F

T’: 12T’

14 17(

15E

F: 16)

id

How are transition diagrams used ?

Are -moves a problem ?

Can we simplify transition diagrams ?

Why is simplification critical ?

Page 7: Top-Down Parsing

CH4.7

314ALL

Dr. Mohamed Ramadan Saady

How are Transition Diagrams Used ?How are Transition Diagrams Used ?

main(){ TD_E();}

TD_T(){ TD_F(); TD_T’();}

TD_E(){ TD_T(); TD_E’();}

TD_E’(){ token = get_token(); if token = ‘+’ then { TD_T(); TD_E’(); }}

TD_F(){ token = get_token(); if token = ‘(’ then { TD_E(); match(‘)’); } else if token.value <> id then {error + EXIT} else ...}

TD_E’(){ token = get_token(); if token = ‘*’ then { TD_F(); TD_T’(); }}

What happened to -moves?

… “else unget()and terminate”

NOTE: not all error conditions have been represented.

Page 8: Top-Down Parsing

CH4.8

314ALL

Dr. Mohamed Ramadan Saady

How can Transition Diagrams be How can Transition Diagrams be Simplified ?Simplified ?

6E’

E’: 53+

4T

Page 9: Top-Down Parsing

CH4.9

314ALL

Dr. Mohamed Ramadan Saady

How can Transition Diagrams be How can Transition Diagrams be Simplified ? (2)Simplified ? (2)

6E’

E’: 53+

4T

E’: 53+

4T

6

Page 10: Top-Down Parsing

CH4.10

314ALL

Dr. Mohamed Ramadan Saady

How can Transition Diagrams be How can Transition Diagrams be Simplified ? (3)Simplified ? (3)

6E’

E’: 53+

4T

E’: 53+

4T

6

E’: 3+

4

T

6

Page 11: Top-Down Parsing

CH4.11

314ALL

Dr. Mohamed Ramadan Saady

How can Transition Diagrams be How can Transition Diagrams be Simplified ? (4)Simplified ? (4)

6E’

E’: 53+

4T

E’: 53+

4T

6

E’: 3+

4

T

6

21E’T

0E:

Page 12: Top-Down Parsing

CH4.12

314ALL

Dr. Mohamed Ramadan Saady

How can Transition Diagrams be How can Transition Diagrams be Simplified ? (5)Simplified ? (5)

6E’

E’: 53+

4T

E’: 53+

4T

6

E’: 3+

4

T

6

21E’T

0E:

T0E: 3

+4

T

6

Page 13: Top-Down Parsing

CH4.13

314ALL

Dr. Mohamed Ramadan Saady

Additional Transition Diagram Additional Transition Diagram SimplificationsSimplifications

• Similar steps for T and T’

• Simplified Transition diagrams:*

F7T: 10

13

T’: 10*

11

F

13

14 17(

15E

F: 16)

id

Why is simplification important ?

How does code change?

Page 14: Top-Down Parsing

CH4.14

314ALL

Dr. Mohamed Ramadan Saady

Top-Down ParsingTop-Down Parsing

From Grammar to Parser, take IIIFrom Grammar to Parser, take III

Page 15: Top-Down Parsing

CH4.15

314ALL

Dr. Mohamed Ramadan Saady

Motivating Table-Driven ParsingMotivating Table-Driven Parsing

1. Left to right scan input

2. Find leftmost derivation

Grammar: E TE’

E’ +TE’ | T id

Input : id + id $

Derivation: E

Processing Stack:

Terminator

Page 16: Top-Down Parsing

CH4.16

314ALL

Dr. Mohamed Ramadan Saady

Non-Recursive / Table DrivenNon-Recursive / Table Driven

Empty stack symbol

a + b $

Y

X

$

Z

Input

Predictive Parsing Program

Stack Output

Parsing Table M[A,a]

(String + terminator)

NT + T symbols of CFG What actions parser

should take based on stack / input

General parser behavior: X : top of stack a : current input

1. When X=a = $ halt, accept, success

2. When X=a $ , POP X off stack, advance input, go to 1.

3. When X is a non-terminal, examine M[X,a]

if it is an error call recovery routineif M[X,a] = {X UVW}, POP X, PUSH W,V,UDO NOT expend any input

Page 17: Top-Down Parsing

CH4.17

314ALL

Dr. Mohamed Ramadan Saady

Algorithm for Non-Recursive ParsingAlgorithm for Non-Recursive Parsing

Set ip to point to the first symbol of w$;

repeat

let X be the top stack symbol and a the symbol pointed to by ip;

if X is terminal or $ then

if X=a then

pop X from the stack and advance ip

else error()

else /* X is a non-terminal */

if M[X,a] = XY1Y2…Yk then begin

pop X from stack;

push Yk, Yk-1, … , Y1 onto stack, with Y1 on top

output the production XY1Y2…Yk

end

else error()

until X=$ /* stack is empty */

Input pointer

May also execute other code based on the production used

Page 18: Top-Down Parsing

CH4.18

314ALL

Dr. Mohamed Ramadan Saady

ExampleExample

E TE’ E’ + TE’ | T FT’ T’ * FT’ | F ( E ) | id

Our well-worn example !

Table M

Non-terminal

INPUT SYMBOL

id + * ( ) $

E

E’

T

T’

F

ETE’

TFT’

Fid

E’+TE’

T’ T’*FT’

F(E)

TFT’

ETE’

T’

E’ E’

T’

Page 19: Top-Down Parsing

CH4.19

314ALL

Dr. Mohamed Ramadan Saady

Trace of ExampleTrace of Example

STACK INPUT OUTPUT

Page 20: Top-Down Parsing

CH4.20

314ALL

Dr. Mohamed Ramadan Saady

Trace of ExampleTrace of Example

Expend Input

$E

$E’T$E’T’F$E’T’id$E’T’$E’$E’T+$E’T$E’T’F$E’T’id$E’T’$E’T’F*$E’T’F$E’T’id$E’T’$E’$

id + id * id$

id + id * id$id + id * id$id + id * id$

+ id * id$+ id * id$+ id * id$

id * id$id * id$id * id$

* id$* id$

id$id$

$$$

E TE’T FT’F id

T’ E’ +TE’

T FT’F id

T’ *FT’

F id

T’ E’

STACK INPUT OUTPUT

Page 21: Top-Down Parsing

CH4.21

314ALL

Dr. Mohamed Ramadan Saady

Leftmost Derivation for the ExampleLeftmost Derivation for the Example

The leftmost derivation for the example is as follows:

E TE’ FT’E’ id T’E’ id E’ id + TE’ id + FT’E’

id + id T’E’ id + id * FT’E’ id + id * id T’E’

id + id * id E’ id + id * id

Page 22: Top-Down Parsing

CH4.22

314ALL

Dr. Mohamed Ramadan Saady

What’s the Missing Puzzle Piece ?What’s the Missing Puzzle Piece ?

Constructing the Parsing Table M !

1st : Calculate First & Follow for Grammar

2nd: Apply Construction Algorithm for Parsing Table ( We’ll see this shortly )

Basic Tools:

First: Let be a string of grammar symbols. First() is the set that includes every terminal that appears leftmost in or in any string originating from . NOTE: If , then is First( ).

Follow: Let A be a non-terminal. Follow(A) is the set of terminals a that can appear directly to the right of A in some sentential form. (S Aa, for some and ). NOTE: If S A, then $ is Follow(A).

*

*

*

Page 23: Top-Down Parsing

CH4.23

314ALL

Dr. Mohamed Ramadan Saady

Motivation Behind First & FollowMotivation Behind First & Follow

First:

Follow:

Is used to help find the appropriate reduction to follow given the top-of-the-stack non-terminal and the current input symbol.

Example: If A , and a is in First(), then when a=input, replace A with (in the stack).

( a is one of first symbols of , so when A is on the stack and a is input, POP A and PUSH .

Is used when First has a conflict, to resolve choices, or when First gives no suggestion. When or , then what follows A dictates the next choice to be made.

Example: If A , and b is in Follow(A ), then when and b is an input character, then we expand A with , which will eventually expand to , of which b follows!

( : i.e., First( ) contains .)

*

*

*

Page 24: Top-Down Parsing

CH4.24

314ALL

Dr. Mohamed Ramadan Saady

An example.An example.

$S abbd$

STACK INPUT OUTPUT

S a B C d B CB | | S aC b

Page 25: Top-Down Parsing

CH4.25

314ALL

Dr. Mohamed Ramadan Saady

Computing First(X) : Computing First(X) : All Grammar SymbolsAll Grammar Symbols

1. If X is a terminal, First(X) = {X}

2. If X is a production rule, add to First(X)

3. If X is a non-terminal, and X Y1Y2…Yk is a production rule

Place First(Y1) in First(X)

if Y1 , Place First(Y2) in First(X)

if Y2 , Place First(Y3) in First(X)

if Yk-1 , Place First(Yk) in First(X)

NOTE: As soon as Yi , Stop.

Repeat above steps until no more elements are added to any First( ) set.

Checking “Yj ?” essentially amounts to checking whether belongs to First(Yj)

*

*

*

*

*

Page 26: Top-Down Parsing

CH4.26

314ALL

Dr. Mohamed Ramadan Saady

Computing First(X) : Computing First(X) : All Grammar Symbols - continuedAll Grammar Symbols - continued

Informally, suppose we want to compute

First(X1 X2 … Xn ) = First (X1) “+”

First(X2) if is in First(X1) “+”

First(X3) if is in First(X2) “+”

First(Xn) if is in First(Xn-1)

Note 1: Only add to First(X1 X2 … Xn) if is in First(Xi) for all i

Note 2: For First(X1), if X1 Z1 Z2 … Zm , then we need to compute First(Z1 Z2 … Zm) !

Page 27: Top-Down Parsing

CH4.27

314ALL

Dr. Mohamed Ramadan Saady

Example 1Example 1

Given the production rules:

S i E t SS’ | a

S’ eS |

E b

Page 28: Top-Down Parsing

CH4.28

314ALL

Dr. Mohamed Ramadan Saady

Example 1Example 1

Given the production rules:

S i E t SS’ | a

S’ eS |

E b

Verify that

First(S) = { i, a }

First(S’) = { e, }

First(E) = { b }

Page 29: Top-Down Parsing

CH4.29

314ALL

Dr. Mohamed Ramadan Saady

Example 2Example 2

Computing First for: E TE’ E’ + TE’ | T FT’ T’ * FT’ | F ( E ) | id

Page 30: Top-Down Parsing

CH4.30

314ALL

Dr. Mohamed Ramadan Saady

Example 2Example 2

Computing First for: E TE’ E’ + TE’ | T FT’ T’ * FT’ | F ( E ) | id

First(E)

First(TE’)

First(T)

First(T) “+” First(E’)

First(F)

First((E)) “+” First(id)

First(F) “+” First(T’)

“(“ and “id”

Not First(E’) since T

Not First(T’) since F

*

*

Overall: First(E) = { ( , id } = First(F)

First(E’) = { + , } First(T’) = { * , }

First(T) First(F) = { ( , id }


Recommended