You are on page 1of 16

Compilers

Recursive Descent Parsing

Alex Aiken
Recursive Descent

• The parse tree is constructed


– From the top 1

– From left to right t2 3 t9

4 7
• Terminals are seen in order of
appearance in the token stream: t5 t6 t8
t2 t5 t6 t8 t9

Alex Aiken
Recursive Descent
• Consider the grammar
E  T |T + E
T  int | int * T | ( E )

• Token stream is: ( int5 )

• Start with top-level non-terminal E


– Try the rules for E in order

Alex Aiken
Recursive Descent

E  T |T + E
T  int | int * T | ( E )

( int5 )

Alex Aiken
Recursive Descent

E  T |T + E
T  int | int * T | ( E )

( int5 )

Alex Aiken
Recursive Descent

E  T |T + E
T  int | int * T | ( E )

Mismatch: int does not match (


int Backtrack …

( int5 )

Alex Aiken
Recursive Descent

E  T |T + E
T  int | int * T | ( E )

( int5 )

Alex Aiken
Recursive Descent

E  T |T + E
T  int | int * T | ( E )

Mismatch: int does not match (


int * T Backtrack …

( int5 )

Alex Aiken
Recursive Descent

E  T |T + E
T  int | int * T | ( E )

( int5 )

Alex Aiken
Recursive Descent

E  T |T + E
T  int | int * T | ( E )

Match! Advance input.


( E )

( int5 )

Alex Aiken
Recursive Descent

E  T |T + E
T  int | int * T | ( E )

( E )

( int5 )

Alex Aiken
Recursive Descent

E  T |T + E
T  int | int * T | ( E )

( E )

T
( int5 )

Alex Aiken
Recursive Descent

E  T |T + E
T  int | int * T | ( E )

Match! Advance input.


( E )

T
( int5 )
int
Alex Aiken
Recursive Descent

E  T |T + E
T  int | int * T | ( E )

Match! Advance input.


( E )

T
( int5 )
int
Alex Aiken
Recursive Descent

E  T |T + E
T  int | int * T | ( E )

End of input, accept.


( E )

T
( int5 )
int
Alex Aiken
Choose the derivation that is a valid recursive descent E Recursive Descent
parse for the string id + id in the given grammar. Moves E’
that are followed by backtracking are given in red. -E’ E  E’ | E’ + E
id
E (E) E’  -E’ | id | (E)
E’ E’ + E
E’ + E -E’ + E
id + E id + E
id + E’ id + E’ E
id + id id + -E’ E’
id + id id
E’ + E
E id + E
E’ + E id + E’
id + E id + id
id + E’
id + id

You might also like