Professional Documents
Culture Documents
9.1 Introduction
Top-down Analysis
Revision
Top-down Analysis
Revision
LL Parsing:
Top-down Analysis
Revision
Top-down analysis
Top down analysis starts with the START symbol and
expands it
id
id
id
4
Top-down Analysis
Revision
Top-down analysis
E
E
E
id
id
id
5
Top-down Analysis
Revision
Top-down analysis
Apply: E-> id
E
E
E
id
id
id
6
Top-down Analysis
Revision
Top-down analysis
E
E
E
id
E
+
id
E
*
id
7
Top-down Analysis
Revision
Top-down analysis
Apply: E-> id
E
E
E
id
E
+
id
E
*
id
8
Top-down Analysis
Revision
Top-down analysis
Apply: E-> id
E
E
E
id
E
+
id
E
*
id
9
Top-down Analysis
Deterministic Topdown Parsing
Predictive Parsers
Some top-down parsers expand non-terminals
non-deterministically: they apply the first
alternative, and if later fail to parse, they go
back(backtrack) and try one of the other
expansions.
In this class, we will consider top-down parsers
which deterministically select a single production to
expand each nonterminal:
No backtracking required
But grammar restrictions required.
11
Top-down Analysis
Deterministic Topdown Parsing
Predictive Parsers
The class of grammars which permit this
deterministic topdown analysis are called LL()
grammars.
An LL(1) parser can determine which rule to select
based on one symbol of lookahead.
In other words, we can select which rule should
expand a nonterminal purely on the basis of the
next input symbol.
12
Top-down Analysis
Deterministic Topdown Parsing
LL Grammars
An LL Grammar is any grammar which can be put
into the parse table used by the LL parser without
conflict.
We can procede in two ways:
1. Given any CFG grammar, put it into the parse table
and if there are no conflicts, it is LL.
2. Apply a series of transformations to convert the
grammar into Greibach Normal Form (GNF) (and
some other minor transformations). If these
transformations can be applied, then the grammar
is guaranteed to be LL.
15
16
Function returns
error code if none of
the rules match next
input token
17
Otherwise, function
returns pointer to
next input token
18
19
20
10
22
11
P::=a
P::=iEtPP
P::=eP
P::=
P
E
P::=
E::=b
Note: note an LL(1)
grammar because
there is a conflict!
23
Top-down Analysis
Deterministic Topdown Parsing
24
12
Top-down Analysis
Deterministic Topdown Parsing
Constructing the Table: Example E := TE
E := +TE
Assume the following
E :=
Grammar:
T := FT
T := *FT
T :=
F := (E)
F := id
25
Top-down Analysis
Deterministic Topdown Parsing
Constructing the Table: Example E := TE
E := +TE
Assume the following
E :=
Grammar:
T := FT
T := *FT
T :=
F := (E)
F := id
+
First, generate a
table for each NT vs.
possible inputs
)
id
E
E
T
T
F
26
13
Top-down Analysis
Deterministic Topdown Parsing
Constructing the Table: Example E := TE
E := +TE
E :=
T := FT
T := *FT
T :=
F := (E)
F := id
+
First(F) = { (, id }
First(T) = { *, }
First(T) = First(F) = { (, id }
First(E) = { +, }
First(E) = First(T) = { (, id }
Next, calculate the
Firsts of each NT
id
E
E
T
T
F
27
Top-down Analysis
Deterministic Topdown Parsing
Constructing the Table: Example E := TE
E := +TE
E :=
T := FT
T := *FT
T :=
F := (E)
F := id
+
E
(
E := TE
First(F) = { (, id }
First(T) = { *, }
First(T) = First(F) = { (, id }
First(E) = { +, }
First(E) = First(T) = { (, id }
For each rule, place the rule
in the cell for the LHS and
each First of the rule
)
id
E := TE
E
T
T
F
28
14
Top-down Analysis
Deterministic Topdown Parsing
Constructing the Table: Example E := TE
E := +TE
E :=
T := FT
T := *FT
T :=
F := (E)
F := id
+
E
E
First(F) = { (, id }
First(T) = { *, }
First(T) = First(F) = { (, id }
First(E) = { +, }
First(E) = First(T) = { (, id }
Where the First includes
lambda, we need to put the rule
under all followers of the LHS!
id
E := TE
E := TE
E := +TE
T
T
F
29
Top-down Analysis
Deterministic Topdown Parsing
Constructing the Table: Example E := TE
E := +TE
E :=
T := FT
Follow(E) = { $, ) }
T := *FT
Follow(T) = Follow(T)
T :=
= First(E)- +Follow(E)
F := (E)
F := id
= {+, $, ) }
+
E
E
(
E := TE
First(F) = { (, id }
First(T) = { *, }
First(T) = First(F) = { (, id }
First(E) = { +, }
First(E) = First(T) = { (, id }
Calculate the Follow of these
NTs
)
id
E := TE
E := +TE
T
T
F
30
15
Top-down Analysis
Deterministic Topdown Parsing
Constructing the Table: Example E := TE
E := +TE
E :=
T := FT
Follow(E) = { $, ) }
T := *FT
Follow(T) = Follow(T)
T :=
= First(E)- +Follow(E)
F := (E)
= {+, $, ) }
F := id
+
E
E
First(F) = { (, id }
First(T) = { *, }
First(T) = First(F) = { (, id }
First(E) = { +, }
First(E) = First(T) = { (, id }
and place the rule under each
follow symbol
id
E := TE
E := +TE
E := TE
E :=
E :=
T
T
F
31
Top-down Analysis
Deterministic Topdown Parsing
Constructing the Table: Example E := TE
E := +TE
E :=
T := FT
Follow(E) = { $, ) }
T := *FT
Follow(T) = Follow(T)
T :=
= First(E)- +Follow(E)
F := (E)
F := id
= {+, $, ) }
+
E
E
T
First(F) = { (, id }
First(T) = { *, }
First(T) = First(F) = { (, id }
First(E) = { +, }
First(E) = First(T) = { (, id }
continuing
E := TE
E := +TE
id
E := TE
E :=
T := FT
$
E :=
T := FT
T
F
32
16
Top-down Analysis
Deterministic Topdown Parsing
Constructing the Table: Example E := TE
E := +TE
Assume the following
E :=
Grammar:
T := FT
Follow(E) = { $, ) }
T := *FT
Follow(T) = Follow(T)
T :=
= First(E)- +Follow(E)
F := (E)
= {+, $, ) }
F := id
+
id
E := TE
E := +TE
T := FT
T :=
T := *FT
E := TE
E :=
T
T
continuing
E
E
First(F) = { (, id }
First(T) = { *, }
First(T) = First(F) = { (, id }
First(E) = { +, }
First(E) = First(T) = { (, id }
E :=
T := FT
T :=
T :=
F
33
Top-down Analysis
Deterministic Topdown Parsing
Constructing the Table: Example E := TE
E := +TE
Assume the following
E :=
Grammar:
T := FT
Follow(E) = { $, ) }
T := *FT
Follow(T) = Follow(T)
T :=
= First(E)- +Follow(E)
F := (E)
F := id
= {+, $, ) }
+
E
E
continuing
E := TE
E := +TE
T := *FT
E :=
T := FT
T :=
F := (E)
E := TE
T := FT
T :=
id
E :=
T
T
First(F) = { (, id }
First(T) = { *, }
First(T) = First(F) = { (, id }
First(E) = { +, }
First(E) = First(T) = { (, id }
T :=
F := id
34
17
Top-down Analysis
Deterministic Topdown Parsing
Constructing the Table: Example E := TE
E := +TE
Assume the following
E :=
Grammar:
T := FT
Follow(E) = { $, ) }
T := *FT
Follow(T) = Follow(T)
T :=
= First(E)- +Follow(E)
F := (E)
= {+, $, ) }
F := id
+
E := TE
E := +TE
T := *FT
E := TE
T := FT
T :=
id
E :=
T
T
E
E
First(F) = { (, id }
First(T) = { *, }
First(T) = First(F) = { (, id }
First(E) = { +, }
First(E) = First(T) = { (, id }
E :=
T := FT
T :=
F := (E)
T :=
F := id
35
Top-down Analysis
Deterministic Topdown Parsing
LL(1) Grammars
36
18
Exercise:
Construct the parse table for the following grammar:
P ::=
P ::=
P::=
P::=
E ::=
iEtPP
a
eP
38
19
Top-down Analysis
Deterministic Topdown Parsing
Using the Parse Table
Assume the following input, and Start symbol E
id
id
E
E
E := TE
E := +TE
T := *FT
E :=
T := FT
T :=
F := (E)
E := TE
T := FT
T :=
id
E :=
T
T
T :=
F := id
40
20
Top-down Analysis
Deterministic Topdown Parsing
Using the Parse Table
Assume the following input, and Start symbol E
E
T
id
id
E
E
E := TE
E := +TE
E := TE
T := FT
T :=
id
E :=
T
T
T := *FT
E :=
T := FT
T :=
F := (E)
T :=
F := id
41
Top-down Analysis
Deterministic Topdown Parsing
Using the Parse Table
Assume the following input, and Start symbol E
E
T
id
id
E
E
E := TE
E := +TE
T := *FT
E :=
T := FT
T :=
F := (E)
E := TE
T := FT
T :=
id
E :=
T
T
T :=
F := id
42
21
Top-down Analysis
Deterministic Topdown Parsing
Using the Parse Table
Assume the following input, and Start symbol E
E
T
id
id
E
T
E
E
E := TE
E := +TE
E := TE
T := FT
T :=
id
E :=
T
T
T := *FT
E :=
T := FT
T :=
F := (E)
T :=
F := id
43
Top-down Analysis
Deterministic Topdown Parsing
Using the Parse Table
Assume the following input, and Start symbol E
E
T
id
id
E
T
Expand F
E
E
E := TE
E := +TE
T := *FT
E :=
T := FT
T :=
F := (E)
E := TE
T := FT
T :=
id
E :=
T
T
T :=
F := id
44
22
Top-down Analysis
Deterministic Topdown Parsing
Using the Parse Table
Assume the following input, and Start symbol E
E
T
id
id
$
(
E
E
id
E := TE
T := FT
T :=
E :=
T
T
T
)
E := TE
E := +TE
T := *FT
E :=
T := FT
T :=
T :=
F := (E)
F := id
45
Top-down Analysis
Deterministic Topdown Parsing
Using the Parse Table
Assume the following input, and Start symbol E
E
T
id
id
$
(
E
E
E := TE
E := +TE
id
T := *FT
E :=
T := FT
T :=
F := (E)
E := TE
T := FT
T :=
E :=
T
T
T :=
F := id
46
23
Top-down Analysis
E
T
F
id
id
id
E := TE
E := +TE
E := TE
E :=
T := FT
T :=
E :=
T
T
(
(
T
)
E
(
T := *FT
T := FT
T :=
T :=
F := (E)
F := id
47
Top-down Analysis
E
T
F
E
id
id
E
E
)
E
E := TE
id
T := *FT
E :=
T := FT
T :=
F := (E)
E := TE
E :=
T := FT
T :=
E := +TE
T
T
T :=
F := id
48
24
Top-down Analysis
E
T
F
E
id
id
E
T
id
)
id
E := TE
E :=
E :=
T := FT
T :=
E := TE
E := +TE
T
T
(
(
E
E
T
)
T := FT
T := *FT
T :=
T :=
F := (E)
F := id
49
Top-down Analysis
E
T
F
E
id
id
E
E
id
id
T := *FT
E :=
T := FT
T :=
F := (E)
E := TE
E :=
T := FT
T :=
E := TE
E := +TE
T
T
T :=
F := id
50
25
Top-down Analysis
E
T
F
E
(
id
id
id
+
id
E := TE
E := +TE
E :=
E :=
T := FT
T :=
T E
E := TE
T
T
T := FT
T := *FT
T :=
T :=
F := (E)
F := id
51
Top-down Analysis
E
T
F
E
(
id
id
E
E
id
T E
+
id
T := *FT
E :=
T := FT
T :=
F := (E)
E := TE
E :=
T := FT
T :=
)
E
E := TE
E := +TE
T
T
T :=
F := id
52
26
Top-down Analysis
E
T
F
E
(
id
id
E
E
(
(
id
E := TE
E := +TE
+
id
T := *FT
E :=
T := FT
T :=
F := (E)
E := TE
T := FT
T :=
T E
E :=
T
T
)
E
T :=
F := id
53
Compare the symbol on top of the Analysis Stack (P) with the
next input symbol, S.
If P==S:
If P S:
27
Top-down Analysis
Deterministic Topdown Parsing
Using the Parse Table with Analysis Stack: Example
P
INITIAL STATE
(
id
id
E
+
E
E
E := TE
E := +TE
T := FT
T :=
T := *FT
E := TE
E :=
T
T
id
E :=
T := FT
T :=
F := (E)
T :=
F := id
55
Top-down Analysis
Deterministic Topdown Parsing
Using the Parse Table with Analysis Stack: Example
id
id
E := TE
E := +TE
T := *FT
E :=
T := FT
T :=
F := (E)
E := TE
T := FT
T :=
id
E :=
E
+
T :=
F := id
56
28
Top-down Analysis
Deterministic Topdown Parsing
Using the Parse Table with Analysis Stack: Example
id
id
E
E
E := TE
E := +TE
T := FT
T :=
T := *FT
E := TE
E :=
T
T
id
E :=
T := FT
T :=
F := (E)
T :=
F := id
57
Top-down Analysis
Deterministic Topdown Parsing
Using the Parse Table with Analysis Stack: Example
id
id
E := TE
E := +TE
T := *FT
E :=
T := FT
T :=
F := (E)
E := TE
T := FT
T :=
id
E :=
T
T
E
E
T :=
F := id
58
29
Top-down Analysis
Deterministic Topdown Parsing
Using the Parse Table with Analysis Stack: Example
( & ( EQUAL!
(
id
id
Pop Stack
Advance pointer
(
(
E
E
E := TE
E := +TE
T := FT
T :=
T := *FT
E := TE
E :=
T
T
id
E :=
T := FT
T :=
F := (E)
T :=
F := id
59
Top-down Analysis
Deterministic Topdown Parsing
Using the Parse Table with Analysis Stack: Example
id
id
)
*
E
E
E
(
E := TE
E := +TE
T := *FT
E :=
T := FT
T :=
F := (E)
E := TE
T := FT
T :=
id
E :=
T
T
T :=
F := id
60
30
Top-down Analysis
Deterministic Topdown Parsing
Using the Parse Table with Analysis Stack: Example
id
id
T
(
E
E
id
E := TE
E := +TE
E := TE
E :=
T := FT
T :=
T := *FT
E :=
T := FT
T :=
F := (E)
T :=
F := id
61
Top-down Analysis
Deterministic Topdown Parsing
Using the Parse Table with Analysis Stack: Example
id
id
)
*
E
E
T
(
F
)
E := TE
E := +TE
id
T := *FT
E :=
T := FT
T :=
F := (E)
E := TE
T := FT
T :=
Replace on stack
E :=
T
T
T :=
F := id
62
31
Top-down Analysis
Deterministic Topdown Parsing
Using the Parse Table with Analysis Stack: Example
id & id EQUAL!
(
id
id
Pop Stack
T
(
E
E
E := TE
E := +TE
T := *FT
E := TE
T := FT
T :=
id
E :=
T
T
Advance pointer
id
E :=
T := FT
T :=
F := (E)
T :=
F := id
63
Top-down Analysis
Deterministic Topdown Parsing
Using the Parse Table with Analysis Stack: Example
and so on!
(
id
id
)
*
E
E
T
(
E := TE
E := +TE
T := *FT
E :=
T := FT
T :=
F := (E)
E := TE
T := FT
T :=
id
E :=
T
T
T :=
F := id
64
32
Top-down Analysis
Deterministic Topdown Parsing
Using the Parse Table with Analysis Stack: Example
Eventually:
) and ) equal
(
id
id
Advance pointer
Pop Stack
)
+
E
E
E := TE
E := +TE
T := FT
T :=
T := *FT
E := TE
E :=
T
T
id
E :=
T := FT
T :=
F := (E)
T :=
F := id
65
Top-down Analysis
Deterministic Topdown Parsing
Using the Parse Table with Analysis Stack: Example
Eventually:
$ and $ equal
(
id
id
Top of stack is $
Accept and Exit!
$
+
E
E
E := TE
E := +TE
T := *FT
E :=
T := FT
T :=
F := (E)
E := TE
T := FT
T :=
id
E :=
T
T
T :=
F := id
66
33
Top-down Analysis
Deterministic Topdown Parsing
Using the Parse Table with Analysis Stack: Summary
Four Actions:
1. Accept: If P==S==$
2. Advance: If P==S $
3. Replace: If P S and Cell(S, P)
4. Error: If P S and Cell(S, P) == .
67
Top-down Analysis
Deterministic Topdown Parsing
Keeping track of the Analysis
One can use a chart like the following to record each step:
Step
Stack
Input
Action
$E
id+id$
Apply E::=TE
$ET
id+id$
Apply T::=FT
$ETF
id+id$
Apply F::=id
$ETid
id+id$
Advance
$ET
+id$
Apply T::=
$E
+id$
Apply E::=+TE
$ET+
+id$
Advance
$ET
id$
Apply T::=FT
$ETF
id$
Apply F::=id
10
$ETid
id$
Advance
11
$ET
Apply T::=
12
$E
Apply E::=
13
Input Accepted
68
34
Alternative Table
Row labels are symbols which can be on top of stack (term or nonterm)
Column labels are next input
Action given for current top of stack whether terminal or nonterm.
+
E := TE
E := +TE
T := FT
T :=
T := *FT
E :=
T := FT
T :=
F := (E)
E := TE
E :=
T
T
id
T :=
F := id
advance
advance
advance
advance
id
advance
accept
69
id
E := TE
E := TE
E := +TE
E :=
E :=
T := FT
T := FT
T :=
T := *FT
T :=
T :=
F := (E)
F := id
advance
advance
advance
advance
id
advance
accept
70
35