Transcript PPT
Top-Down parsing
LL(1) parsing
Overview of Top-Down
There are only two actions
1. Replace
2. Match
Parsing stack
Start-Symbol$
...
...
$
Input stack
Input-Token$
...
...
$
Actions
accept
Overview of Top-Down
e.g. with grammar
S (S)S|
S$
(S)S$
S)S$
)S$
S$
$
( )$
( )$
)$
)$
$
$
S (S)S
match
S
match
S
accept
S
1.replace
(
S
2.match
)
S
4.match
3.replace
5.replace
LL(k) parsing
L stands for left-to-right parse of input
L stands for leftmost-derivation
k stands for k-token look-ahead
LL(1) Parsing
At top of Parsing stack
For Non-terminal
Replace: a decision must be made, based on the
current input token.
For terminal
Match: no decision is to be made but need to see
if it is the same as the current input token, if not,
an error occurs.
LL(1) Parsing : First Sets
First Sets
Let X be a grammar symbol (a terminal or non-terminal) or
ε. Then the set First(X) consisting of terminals, and possibly
ε, is defined as follows
1. If X is a terminal or , then First(X )= X .
2. If X is a nonterminal, then for each production choice X X 1 X 2 ... X n ,
First(X ) contains First(X ) contains First(X 1 ) .
If also for some i < n, all the sets First(X 1 ),..., First(X i ) contains ,
then First(X ) contains First(X i+1 ) .
If all the sets First(X 1 ),...,First(X n ) contains , then First(X ) contains
LL(1) Parsing : First Sets
e.g. for the grammar
S (
S
) S
|
S X1 X 2 X 3 X 4 | X 5
First(S) First(X 1 ) (
First(S) First(X 5 )
thus
First(S) ( ,
LL(1) Parsing : Follow Sets
Follow Sets
Given a non-terminal A, the set Follow(A),
consisting of terminals, and possibly $, is defined
as follows.
1. If A is the start symbol, then $ is in Follow(A).
2. If there is a production B A , then First( )- is in Follow(A).
3. If there is a production B A such that is in First( ),
then Follow(A) contains Follow(B).
ε is never an element of Follow set
LL(1) Parsing : Follow Sets
e.g. for the grammar
S (S)S |
S is the start symbol , thus Follow(S) $
S ( S )S
S S
Follow(S) First( ) $ , )
S1 (S)S
S1 S
is in First( )
Follow(S) $ , )
Follow(S) contains Follow(S1 )
First & Follow set
The First set and Follow set for the grammar
S (S)S |
is
First(S) ( ,
Follow(S) $ , )
Non-terminal
nullable
First
Follow
S
Yes
(
$,)
LL(1) Parsing table
How to construct LL(1) parsing table
For each production rule A
1. for each terminal t First( )
M[A,t]
2. if First( ) and t Follow(A)
M[A,t]
LL(1) Parsing table
The First set and Follow set for the grammar
Follow(S) $ , )
S (S)S | is First(S)
( ,
for production S (S)S
( First ( S ) S
, thus M[ S , ( ]
(S)S
for production S
First( ) and ) Follow(S) , thus M[ S , ) ]
First( ) and $ Follow(S) , thus M[ S , $ ]
M[N,T]
(
)
$
S
(S)S
ε
ε
LL(1) Parsing table
S (S)S|
S$
(S)S$
S)S$
)S$
S$
$
( )$
( )$
)$
)$
$
$
S (S)S
match
S
match
S
accept
M[N,T]
(
)
$
S
(S)S
ε
ε
LL(1) grammar
A grammar is LL(1) if the following
conditions are satisfied.
1. For every production A 1| 2 |...| n , First( i ) First( j ) is empty
for all i and j, 1 i,j n, i j.
2. For every nontermianl A such that First(A) contains ,
First(A) Follow(A) is empty.
That is the LL(1) parsing table has at most
one production in each table entry.
Mentioned issues
Left Recursion removal
Left Factoring
References
COMPILER CONSTRUCTION:
Principles and Practice,
Kenneth C. Louden
Chapter 4
http://www.cs.sjsu.edu/faculty/louden/cm
ptext/
http://www.course.com/isbn=0-53493972-4