Ll1parser 190921075612
Ll1parser 190921075612
PARSER
MODEL OF COMPILER FRONT 2
END
Front End
Syntax analysis
So look ahead meaning is - looking at input tokens without moving the input cursor.
PRIME REQUIREMENT OF LL(1) 8
For example :
the input string is - aab & grammar is
S ->aAb|aA|ab
A ->bAc|ab
After removing left factoring -
S ->aA’
A’ ->Ab|A|b
A ->ab|bAc
12
RECURSION
RECURSION:
TYPES OF RECURSION
A A
β
A
How could the parser decide how many times to use the
production A A before using the production A --> ?
E T E'
TT*F|F
E' + T E' |
F (E) | id T F T'
Apply the transformation to E:
T' * F T' |
E T E'
E' + T E' | F (E) | id
S → XSS′ | aS′
Apply the transformation to S: S′
→ XS′ | SbS′ | ε
S → XSS′ | aS′
X→
S′ → XS′ | SbS′ | ε SaX′
Apply the transformation to X: X′ → bX′ | ε
X → SaX′
X′ → bX′ | ε
Example of elimination indirect left 22
recursion:
S A A | 0
A S S | 1
Considering the ordering S, A, we get:
S A A | 0
A S | 0S | 1
If a grammar is
A → aB ǀ ε then FIRST ( A )={ a, ε }
If a grammar is
A → BcD ǀ ε
B → eD ǀ ( A )
Here B is non terminal. So, we check the transition of
B and find the FIRST of A.
then FIRST ( A )={ e,( , ε }
27
Rules of FOLLOW
For doing FOLLOW operation we need FIRST operation mostly. In
FOLLOW we use a $ sign for the start symbol. FOLLOW always
check the right portion of the symbol.
If a grammar is
A → BAc ; A is start symbol.
Here firstly check if the selected symbol stays in right side of the
grammar. We see that c is right in A.
then FOLLOW (A) = {c , $ }
28
Rules of FOLLOW
If a grammar is
A → BA’
A' →*Bc
Here we see that there is nothing at the right side of A' . So
FOLLOW ( A' )= FOLLOW ( A )= { $ }
Because A' follows the start symbol.
29
Rules of FOLLOW
If a grammar is
A → BC
B → Td
C →*D ǀ ε
When we want to find FOLLOW (B),we see that B follows by C .
Now put the FIRST( C) in the there.
FIRST(C)={*, ε }.
But when the value is € it follows the parents symbol. So
FOLLOW(B)={*,$ }
30
Example of FIRST and FOLLOW
GRAMMAR:
E -> TE'
E'-> +TE'|ε Symbol FIRST FOLLOW
T -> FT'
T' -> *FT'|ε E
F -> (E)|id
E’
T’
F
31
Example of FIRST and FOLLOW
GRAMMAR:
E -> TE'
E'-> +TE'|ε Symbol FIRST FOLLOW
T -> FT'
T' -> *FT'|ε E { ( , id }
F -> (E)|id
E'
T'
F
32
Example of FIRST and FOLLOW
GRAMMAR:
E -> TE'
E'-> +TE'|ε Symbol FIRST FOLLOW
T -> FT'
T' -> *FT'|ε E { ( , id }
F -> (E)|id
E' {+,ε}
T'
F
33
Example of FIRST and FOLLOW
GRAMMAR:
E -> TE'
E'-> +TE'|ε Symbol FIRST FOLLOW
T -> FT'
T' -> *FT'|ε E { ( , id }
F -> (E)|id
E' {+,ε}
T { id , ( }
T'
F
34
Example of FIRST and FOLLOW
GRAMMAR:
E -> TE'
E'-> +TE'|ε Symbol FIRST FOLLOW
T -> FT'
T' -> *FT'|ε E { ( , id }
F -> (E)|id
E' {+,ε}
T { id , ( }
T' {*,ε }
F
35
Example of FIRST and FOLLOW
GRAMMAR:
E -> TE'
E'-> +TE'|ε Symbol FIRST FOLLOW
T -> FT'
T' -> *FT'|ε E { ( , id }
F -> (E)|id
E' {+,ε}
T { id , ( }
T' {*,ε}
F { id , ( }
36
Example of FIRST and FOLLOW
GRAMMAR:
E -> TE'
E'-> +TE'|ε Symbol FIRST FOLLOW
T -> FT'
T' -> *FT'|ε E { ( , id } {$,)}
F -> (E)|id
E' {+,ε}
T { id , ( }
T' {*,ε}
F { id , ( }
37
Example of FIRST and FOLLOW
GRAMMAR:
E -> TE'
E'-> +TE'|ε Symbol FIRST FOLLOW
T -> FT'
T' -> *FT'|ε E { ( , id } {$,)}
F -> (E)|id
E' {+,ε} {$,)}
T { id , ( }
T' {*,ε }
F { id , ( }
38
Example of FIRST and FOLLOW
GRAMMAR:
E -> TE'
E'-> +TE'|ε Symbol FIRST FOLLOW
T -> FT'
T' -> *FT'|ε E { ( , id } {$,)}
F -> (E)|id
E' {+,ε} {$,)}
T { id , ( } { $ , ) ,+ }
T' {*,ε }
F { id , ( }
39
Example of FIRST and FOLLOW
GRAMMAR:
E -> TE'
E'-> +TE'|ε Symbol FIRST FOLLOW
T -> FT'
T' -> *FT'|ε E { ( , id } {$,)}
F -> (E)|id
E' {+,ε} {$,)}
T { id , ( } { $ , ) ,+ }
F { id , ( }
40
Example of FIRST and FOLLOW
GRAMMAR:
E -> TE'
E'-> +TE'|ε Symbol FIRST FOLLOW
T -> FT'
T' -> *FT'|ε E { ( , id } {$,)}
F -> (E)|id
E' {+,ε} {$,)}
T { id , ( } { $ , ) ,+ }
F { id , ( } {$,),+,*}
41
E -> TE’
E’ -> +TE’|ε
T -> FT’
T’ -> *FT’|ε
F -> (E)|id
43
Production Symbol FOLLOW
E -> TE’ { ( , id } {$,)}
F -> (E)|id { ( , id } { *, + , $ , ) }
Non
Termin INPUT SYMBOLS
al
TABLE: id + * ( ) $
PARSING E
TABLE E’
T
T’
F
44
Production Symbol FOLLOW
E -> TE’ { ( , id } {$,)}
F -> (E)|id { ( , id } { *, + , $ , ) }
Non
Termin INPUT SYMBOLS
al
TABLE: id + * ( ) $
PARSING E
E ->
TE’
TABLE
E’
T
T’
F
45
Production Symbol FOLLOW
E -> TE’ { ( , id } {$,)}
F -> (E)|id { ( , id } { *, + , $ , ) }
Non
Termin INPUT SYMBOLS
al
TABLE: id + * ( ) $
PARSING E
E -> E ->
TE’ TE’
TABLE
E’
T
T’
F
46
Production Symbol FOLLOW
E -> TE’ { ( , id } {$,)}
F -> (E)|id { ( , id } { *, + , $ , ) }
Non
Termin INPUT SYMBOLS
al
TABLE: id + * ( ) $
PARSING E
E -> E ->
TE’ TE’
TABLE
E’->
E’
+TE’
T
T’
47
Production Symbol FOLLOW
E -> TE’ { ( , id } {$,)}
F -> (E)|id { ( , id } { *, + , $ , ) }
Non
Termin INPUT SYMBOLS
al
TABLE: id + * ( ) $
PARSING E
E -> E ->
TE’ TE’
TABLE
E’-> E’ -> E’ ->
E’
+TE’ ε ε
T
T’
48
Production Symbol FOLLOW
E -> TE’ { ( , id } {$,)}
F -> (E)|id { ( , id } { *, + , $ , ) }
Non
Termin INPUT SYMBOLS
al
TABLE: id + * ( ) $
PARSING E
E -> E ->
TE’ TE’
TABLE
E’-> E’ -> E’ ->
E’
+TE’ ε ε
T ->
T
FT’
49
Production Symbol FOLLOW
E -> TE’ { ( , id } {$,)}
F -> (E)|id { ( , id } { *, + , $ , ) }
Non
Termin INPUT SYMBOLS
al
TABLE: id + * ( ) $
PARSING E
E -> E ->
TE’ TE’
TABLE
E’-> E’ -> E’ ->
E’
+TE’ ε ε
T -> T ->
T
FT’ FT’
50
Production Symbol FOLLOW
E -> TE’ { ( , id } {$,)}
F -> (E)|id { ( , id } { *, + , $ , ) }
Non
Termin INPUT SYMBOLS
al
TABLE: id + * ( ) $
PARSING E
E -> E ->
TE’ TE’
TABLE
E’-> E’ -> E’ ->
E’
+TE’ ε ε
T -> T ->
T
FT’ FT’
51
Production Symbol FOLLOW
E -> TE’ { ( , id } {$,)}
F -> (E)|id { ( , id } { *, + , $ , ) }
Non
Termin INPUT SYMBOLS
al
TABLE: id + * ( ) $
PARSING E
E -> E ->
TE’ TE’
TABLE
E’-> E’ -> E’ ->
E’
+TE’ ε ε
T -> T ->
T
FT’ FT’
52
Production Symbol FOLLOW
E -> TE’ { ( , id } {$,)}
F -> (E)|id { ( , id } { *, + , $ , ) }
Non
Termin INPUT SYMBOLS
al
TABLE: id + * ( ) $
PARSING E
E -> E ->
TE’ TE’
TABLE
E’-> E’ -> E’ ->
E’
+TE’ ε ε
T -> T ->
T
FT’ FT’
53
Production Symbol FOLLOW
E -> TE’ { ( , id } {$,)}
F -> (E)|id { ( , id } { *, + , $ , ) }
Non
Termin INPUT SYMBOLS
al
TABLE: id + * ( ) $
PARSING E
E -> E ->
TE’ TE’
TABLE
E’-> E’ -> E’ ->
E’
+TE’ ε ε
T -> T ->
T
FT’ FT’
5
4
Continue…
Non
INPUT SYMBOLS
Terminal
id + * ( ) $
E E -> TE’ E -> TE’
E’->
E’ E’ -> ε E’ -> ε
+TE’
T T -> FT’ T -> FT’
T’ ->
T’ T’ -> ε T’ -> ε T’ -> ε
*FT’
F TABLE: PARSING TABLE
F -> id F -> (E)
Continue…
But
There are grammars which may requite LL(1)
parsing.
Continue…
Non
Termin INPUT SYMBOLS
al
TABLE: a b e i t $
PARSING TABLE S
S’
E
58
SYMBOL FIRST FOLLOW
S iEtSS’ |
a a,i $,e
TABLE:
S’ eS |ε
e, ε $,e
FAST & FOLLOW
Eb
b t
Non
Termin INPUT SYMBOLS
al
TABLE: a b e i t $
PARSING TABLE S Sa
S’
E
59
SYMBOL FIRST FOLLOW
S iEtSS’ |
a a,i $,e
TABLE:
S’ eS |ε
e, ε $,e
FAST & FOLLOW
Eb
b t
Non
Termin INPUT SYMBOLS
al
TABLE: a b e i t $
PARSING TABLE S Sa
SiEtSS
’
S’
E
60
SYMBOL FIRST FOLLOW
S iEtSS’ |
a a,i $,e
TABLE:
S’ eS |ε
e, ε $,e
FAST & FOLLOW
Eb
b t
Non
Termin INPUT SYMBOLS
al
TABLE: a b e i t $
PARSING TABLE S Sa
SiEtSS
’
S’ S’ eS
E
61
SYMBOL FIRST FOLLOW
S iEtSS’ |
a a,i $,e
TABLE:
S’ eS |ε
e, ε $,e
FAST & FOLLOW
Eb
b t
Non
Termin INPUT SYMBOLS
al
TABLE: a b e i t $
PARSING TABLE S Sa
SiEtSS
’
S’ eS
S’ S’ε
S’ε
E
62
SYMBOL FIRST FOLLOW
S iEtSS’ |
a a,i $,e
TABLE:
S’ eS |ε
e, ε $,e
FAST & FOLLOW
Eb
b t
Non
Termin INPUT SYMBOLS
al
TABLE: a b e i t $
PARSING TABLE S Sa
SiEtSS
’
S’ eS
S’ S’ε
S’ε
E Eb
63
SYMBOL FIRST FOLLOW
S iEtSS’ |
a a,i $,e
TABLE:
S’ eS |ε
e, ε $,e
FAST & FOLLOW
Eb
b t
Non
Termin INPUT SYMBOLS
al
TABLE: a b e i t $
PARSING TABLE S Sa
SiEtSS
’
S’ eS
S’ S’ε
AMBIGUITY S’ε
E Eb
Continue… 64
STACK Implementation
LL(1) Stack
The input buffer contains the string to be parsed; $ is
the end-of-input marker
The stack contains a sequence of grammar symbols
Initially, the stack contains the start symbol of the
grammar on the top of $.
68
LL(1) Stack
1. X a $,
the parser halts and annouces successful completion.
2. Xa$
the parser pops x off the stack and advances input pointer
to next input symbol
3. If X is a nonterminal, the program consults entry M[x,a] of
parsing table M.
If the entry is a production M[x,a] = {x → uvw } then
the parser replaces x on top of the stack by wvu (with
u on top).
LL(1) Stack
Grammar: Example:
E -> TE' Let’s parse the input
E'-> +TE'|ε string
T -> FT'
T' -> *FT'|ε id+idid
F -> (E)|id Using the
nonrecursive LL(1)
parser
71
id + id id $
E
$
stack Parsing
Table
Parsing Table
72
id + * ( ) $
E E →TE' E →TE'
E
$
E →T E'
stack Parsing
Table
74
id + id id $
T
E'
$
TParsing
→ F T'
Non
Termin INPUT SYMBOLS
al
stack
Table M
id + * ( ) $
E -> E ->
E
TE’ TE’
E' -> E’ -> E’ ->
E’
+TE’ ε ε
T -> T ->
T
FT’ FT’
T’ -> T’ -> T’ ->
75
id + id id $
F
T'
E'
$
→ id
FParsing
Non
Termin INPUT SYMBOLS
al
stack
Table M
id + * ( ) $
E -> E ->
E
TE’ TE’
E' -> E’ -> E’ ->
E’
+TE’ ε ε
T -> T ->
T
FT’ FT’
T’ -> T’ -> T’ ->
76
id + id id $
id
T'
E'
$ Non
Termin INPUT SYMBOLS
stack
al
Parsing
Table M
id + * ( ) $
E -> E ->
E
TE’ TE’
E' -> E’ -> E’ ->
E’
+TE’ ε ε
T -> T ->
T
FT’ FT’
T’ -> T’ -> T’ ->
77
+ id id $
T'
E'
$
T' →
Non
Termin INPUT SYMBOLS
stack
al
Parsing
Table M
id + * ( ) $
E -> E ->
E
TE’ TE’
E' -> E’ -> E’ ->
E’
+TE’ ε ε
T -> T ->
T
FT’ FT’
T’ -> T’ -> T’ ->
78
+ id id $
E'
$ Non
Termin
al → +T E'
E'Parsing
INPUT SYMBOLS
stack
Table M
id + * ( ) $
E -> E ->
E
TE’ TE’
E' -> E’ -> E’ ->
E’
+TE’ ε ε
T -> T ->
T
FT’ FT’
T’ -> T’ -> T’ ->
79
+ id id $
+
T
E'
$ Non
Termin INPUT SYMBOLS
stack
al
Parsing
Table M
id + * ( ) $
E -> E ->
E
TE’ TE’
E' -> E’ -> E’ ->
E’
+TE’ ε ε
T -> T ->
T
FT’ FT’
T’ -> T’ -> T’ ->
MATCHED STACK INPUT ACTION
E$ id+id * id$
TE’$ id+id * id$ E->TE’
80
E'
T
+ E'
F T' T
id F T'
id * F T'
DONE…
id