1 nonrecursive predictive parsing it is possible to build a nonrecursive predictive parser this is...
TRANSCRIPT
1
Nonrecursive Predictive Nonrecursive Predictive ParsingParsingNonrecursive Predictive Nonrecursive Predictive ParsingParsing It is possible to build a
nonrecursive predictive parser
This is done by maintaining an explicit stack
2
Nonrecursive Predictive Nonrecursive Predictive ParsingParsingNonrecursive Predictive Nonrecursive Predictive ParsingParsing It is possible to build a
nonrecursive predictive parser
This is done by maintaining an explicit stack
3
Table-driven ParsersTable-driven ParsersTable-driven ParsersTable-driven Parsers The nonrecursive LL(1)
parser looks up the production to apply by looking up a parsing table
4
Table-driven ParsersTable-driven ParsersTable-driven ParsersTable-driven ParsersLL(1) table: One dimension for current
non-terminal to expand One dimension for next token Table entry contains one
production
5
Table-driven ParsersTable-driven ParsersTable-driven ParsersTable-driven ParsersLL(1) table: One dimension for current
non-terminal to expand
One dimension for next token
Table entry contains one production
6
Table-driven ParsersTable-driven ParsersTable-driven ParsersTable-driven ParsersLL(1) table: One dimension for current
non-terminal to expand One dimension for next token Table entry contains one
production
7
Consider the expression grammar
1 E → T E' 2 E' → + T E' 3 | 4 T → F T' 5 T' → * F T' 6 | 7 F → ( E )8 | id
8
Predictive Parsing TablePredictive Parsing TablePredictive Parsing TablePredictive Parsing Tableid + * ( ) $
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 )
Rows for current non-terminal to expandColumns for next token
9
Predictive Parsing TablePredictive Parsing TablePredictive Parsing TablePredictive Parsing Tableid + * ( ) $
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 )
Table entries are productionsBlank entries are errors
10
Predictive ParsersPredictive ParsersPredictive ParsersPredictive Parsers The predictive parser uses
an explicit stack to keep track of pending non-terminals
It can thus be implemented without recursion.
11
Predictive ParsersPredictive ParsersPredictive ParsersPredictive Parsers The predictive parser uses
an explicit stack to keep track of pending non-terminals
It can thus be implemented without recursion.
12
Predictive ParsersPredictive ParsersPredictive ParsersPredictive Parsers
a + b $
Predictive parser
stackXYZ$
Parsing table M
input
output
13
LL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing Algorithm The input buffer contains
the string to be parsed; $ is the end-of-input marker
The stack contains a sequence of grammar symbols
14
LL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing Algorithm
Initially, the stack contains the start symbol of the grammar on the top of $.
15
LL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing Algorithm
The parser is controlled by a program that behaves as follows:
16
LL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing Algorithm
The program considers X, the symbol on top of the stack, and a, the current input symbol.
17
LL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing Algorithm
These two symbols, X and a determine the action of the parser.
There are three possibilities.
18
LL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing Algorithm
These two symbols, X and a determine the action of the parser.
There are three possibilities.
19
LL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing Algorithm
1. X a $, the parser halts and annouces successful completion.
20
LL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing Algorithm
2. X a $the parser pops X off the stack and advances input pointer to next input symbol
21
LL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing Algorithm
3. If X is a nonterminal, the program consults entry M[X,a] of parsing table M.
22
LL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing Algorithm
If the entry is a production M[X,a] = {X → UVW }the parser replaces X on top of the stack by WVU (with U on top).
23
LL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing AlgorithmAs output, the parser just prints the production used: X → UVW
However, any other code could be executed here.
24
LL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing Algorithm
If M[X,a] =error, the parser calls an error recovery routine
25
LL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing Algorithm
Example:
Let’s parse the input string
id+ididusing the nonrecursive LL(1) parser
26
id
E
+ id id
$
$
stack Parsing Table M
27
Predictive Parsing TablePredictive Parsing TablePredictive Parsing TablePredictive Parsing Table
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 )
Compiler Compiler ConstructionConstruction
Compiler Compiler ConstructionConstruction
Sohail Aslam
Lecture 17
29
id
E
+ id id
$
$
stack Parsing Table M
E →T E'
30
id + id id
$
$
stack Parsing Table M
T →
TE'
F T'
31
T'
id + id id
$
$
stack Parsing Table M
→
E'
F
F id
32
T'
id + id id
$
$
stack Parsing Table M
E'
id
33
T'
+ id id
$
$
stack Parsing Table M
→
E'
T'
id
34
+ id id
$
$
stack Parsing Table M→
E'
E' +
id
E'T
35
+ id id
$
$
stack Parsing Table M
E'
+
id
T
36
Stack Input Ouput$E id+idid$
$E' T id+idid$ E →TE'
$E' T' F id+idid$ T →FT'$E'T' id id+idid$ F → id
$E' T' +idid$$E' +idid$ T' →$E' T + +idid$ E' → +TE'
37
Stack Input Ouput$E' T idid$ $E' T' F idid$ T →FT'$E' T' id idid$ F → id$E' T' id$$E' T' F id$ T → FT'$E' T' F id$$E'T' id id$ F → id
38
Stack Input Ouput
$E' T' $ $E' $ T' →$ $ E' →
39
LL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing Algorithm Note that productions output
are tracing out a lefmost derivation
The grammar symbols on the stack make up left-sentential forms
40
LL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing AlgorithmLL(1) Parsing Algorithm Note that productions output
are tracing out a lefmost derivation
The grammar symbols on the stack make up left-sentential forms
41
LL(1) Table ConstructionLL(1) Table ConstructionLL(1) Table ConstructionLL(1) Table Construction
Top-down parsing expands a parse tree from the start symbol to the leaves
Always expand the leftmost non-terminal
42
LL(1) Table ConstructionLL(1) Table ConstructionLL(1) Table ConstructionLL(1) Table Construction
Top-down parsing expands a parse tree from the start symbol to the leaves
Always expand the leftmost non-terminal
43
id+idid
E
T E'
F
id
T'
E'T+
and so on ....
44
E
T E'
F
id
T'
E'T+
The leaves at any point form a stringA
45
E
T E'
F
id
T'
E'T+
only contains terminals
46
E
T E'
F
id
T'
+ E'Tid + id id b
input string is bThe prefix matchesNext token is b
47
LL(1) Table ConstructionLL(1) Table ConstructionLL(1) Table ConstructionLL(1) Table Construction Consider the state
S → Awith b the next token and we are trying to match b
There are two possibilities
48
LL(1) Table ConstructionLL(1) Table ConstructionLL(1) Table ConstructionLL(1) Table Construction Consider the state
S → Awith b the next token and we are trying to match b
There are two possibilities
49
LL(1) Table ConstructionLL(1) Table ConstructionLL(1) Table ConstructionLL(1) Table Construction
1. b belongs to an expansion of A
Any A → can be used if b can start a string derived from
50
LL(1) Table ConstructionLL(1) Table ConstructionLL(1) Table ConstructionLL(1) Table Construction
1. b belongs to an expansion of A
Any A → can be used if b can start a string derived from
51
LL(1) Table ConstructionLL(1) Table ConstructionLL(1) Table ConstructionLL(1) Table Construction
In this case we say that b FIRST()
52
LL(1) Table ConstructionLL(1) Table ConstructionLL(1) Table ConstructionLL(1) Table Construction
2. b does not belong to an expansion of A
Expansion of A is empty, i.e.,
A → and b belongs an expansion of , e.g., b
53
LL(1) Table ConstructionLL(1) Table ConstructionLL(1) Table ConstructionLL(1) Table Construction
2. b does not belong to an expansion of A
Expansion of A is empty, i.e.,
A → and b belongs an expansion of , e.g., b
54
LL(1) Table ConstructionLL(1) Table ConstructionLL(1) Table ConstructionLL(1) Table Construction
which means that b can appear after A in a derivation of the form S → Ab
55
LL(1) Table ConstructionLL(1) Table ConstructionLL(1) Table ConstructionLL(1) Table Construction
We say that b FOLLOW(A)
56
LL(1) Table ConstructionLL(1) Table ConstructionLL(1) Table ConstructionLL(1) Table Construction
Any A → can be used if expands to
We say that FIRST(A) in this case
57
ComputingComputing FIRST FIRST Sets SetsComputingComputing FIRST FIRST Sets Sets
DefinitionFIRST(X) =
{ b | X → ba }
{ | X → }