Professional Documents
Culture Documents
PROGRAMMING LANGUAGES
PREDICTIVE PARSING
2
PREDICTIVE PARSING AND LEFT FACTORING
4
LEFT FACTORING
5
LEFT FACTORING (AN EXAMPLE)
8
TRY THIS
E→T+E|T
T → int | int * T | ( E )
9
CONSTRUCTION OF A LL(1) FROM A CFG
GRAMMAR
11
EXAMPLE GRAMMAR
$
Extra Start
12
THE FIRST CONSTRUCTION
13
THE FOLLOW SET
14
THE FOLLOW CONSTRUCTION
15
CONSTRUCTING THE LL(1) PARSING TABLE
Building the complete table
• Need a row for every NT & a column for every T
• Need an algorithm to build the table
Non-Terminal
Terminal
16
THE COMPLETE TABLE
Terminal
Terminal
Non-
17
Rule Sentential Form Input
- Goal x – 2 * y$
Terminal
Terminal
Non-
18
Rule Sentential Form Input
- Goal x – 2 * y$
Expr$ x – 2 * y$
Terminal
Terminal
Non-
19
Rule Sentential Form Input
- Goal x – 2 * y$
Expr$ x – 2 * y$
Term Expr$ x – 2 * y$
Terminal Terminal
Non-
20
Rule Sentential Form Input
- Goal x – 2 * y$
Expr$ x – 2 * y$
Term Expr$ x – 2 * y$
Factor Term Expr$ x – 2 * y$
Terminal Terminal
Non-
21
Rule Sentential Form Input
- Goal x – 2 * y$
Expr$ x – 2 * y$
Term Expr$ x – 2 * y$
Factor Term Expr$ x – 2 * y$
<id,x> Term Expr$ x – 2 * y$
Terminal
Terminal
Non-
22
Rule Sentential Form Input
- Goal x – 2 * y$
Expr$ x – 2 * y$
Term Expr$ x – 2 * y$
Factor Term Expr$ x – 2 * y$
<id,x> Term Expr$ x – 2 * y$
<id,x> Expr$ x – 2 * y$
<id,x> Expr$ x – 2 * y$
Non-Terminal
Terminal
23
Rule Sentential Form Input
- Goal x – 2 * y$
Expr$ x – 2 * y$
Term Expr$ x – 2 * y$
Factor Term Expr$ x – 2 * y$
<id,x> Term Expr$ x – 2 * y$
<id,x> Expr$ x – 2 * y$
<id,x> - Term Expr$ x– 2 * y$
Non-Terminal
Terminal
24
Rule Sentential Form Input
- Goal x – 2 * y$
Expr$ x – 2 * y$
Term Expr$ x – 2 * y$
Factor Term Expr$ x – 2 * y$
<id,x> Term Expr$ x – 2 * y$
<id,x> Expr$ x – 2 * y$
<id,x> - Term Expr$ x– 2 * y$
<id,x> - Factor Term Expr$ x – 2 * y$
25
Rule Sentential Form Input
- Goal x – 2 * y$
Expr$ x – 2 * y$
Term Expr$ x – 2 * y$
Factor Term Expr$ x – 2 * y$
<id,x> Term Expr$ x – 2 * y$
<id,x> Expr$ x – 2 * y$
<id,x> - Term Expr$ x– 2 * y$
<id,x> - Factor Term Expr$ x – 2 * y$
Terminal
Non-Terminal
26
Rule Sentential Form Input
- Goal x – 2 * y$
Expr$ x – 2 * y$
Term Expr$ x – 2 * y$
Factor Term Expr$ x – 2 * y$
<id,x> Term Expr$ x – 2 * y$
<id,x> Expr$ x – 2 * y$
<id,x> - Term Expr$ x– 2 * y$
<id,x> - Factor Term Expr$ x – 2 * y$
<id,x> - <number,2> Term Expr$ x –2 * y$
27
Rule Sentential Form Input
- Terminal
Goal x – 2 * y$
Non-Terminal
Expr$ x – 2 * y$
Term Expr$ x – 2 * y$
Factor Term Expr$ x – 2 * y$
<id,x> Term Expr$ x – 2 * y$
<id,x> Expr$ x – 2 * y$
<id,x> - Term Expr$ x– 2 * y$
<id,x> - Factor Term Expr$ x – 2 * y$
<id,x> - <number,2> Term Expr$ x –2 * y$
28
Rule Sentential Form Input
- Goal x – 2 * y$
Expr$ x – 2 * y$
Term Expr$ x – 2 * y$
Factor Term Expr$ x – 2 * y$
<id,x> Term Expr$ x – 2 * y$
<id,x> Expr$ x – 2 * y$
<id,x> - Term Expr$ x– 2 * y$
<id,x> - Factor Term Expr$ x – 2 * y$
<id,x> - <number,2> Term Expr$ x –2 * y$
<id,x> - <number,2> * Term Expr$ x – 2 * y$
29
Rule Sentential Form Input
-
Terminal
Goal x – 2 * y$
Non-Terminal
Expr$ x – 2 * y$
Term Expr$ x – 2 * y$
Factor Term Expr$ x – 2 * y$
<id,x> Term Expr$ x – 2 * y$
<id,x> Expr$ x – 2 * y$
<id,x> - Term Expr$ x– 2 * y$
<id,x> - Factor Term Expr$ x – 2 * y$
<id,x> - <number,2> Term Expr$ x –2 * y$
<id,x> - <number,2> * Term Expr$ x – 2 * y$
30
Rule Sentential Form Input
- Goal x – 2 * y$
Expr$ x – 2 * y$
Term Expr$ x – 2 * y$
Factor Term Expr$ x – 2 * y$
<id,x> Term Expr$ x – 2 * y$
<id,x> Expr$ x – 2 * y$
<id,x> - Term Expr$ x– 2 * y$
<id,x> - Factor Term Expr$ x – 2 * y$
<id,x> - <number,2> Term Expr$ x –2 * y$
<id,x> - <number,2> * Term Expr$ x – 2 * y$
<id,x> - <number,2> * Factor Term Expr$ x – 2 * y$
31
Rule Terminal
Sentential Form Input
Non-Terminal
- Goal x – 2 * y$
Expr$ x – 2 * y$
Term Expr$ x – 2 * y$
Factor Term Expr$ x – 2 * y$
<id,x> Term Expr$ x – 2 * y$
<id,x> Expr$ x – 2 * y$
<id,x> - Term Expr$ x– 2 * y$
<id,x> - Factor Term Expr$ x – 2 * y$
<id,x> - <number,2> Term Expr$ x –2 * y$
<id,x> - <number,2> * Term Expr$ x – 2 * y$
<id,x> - <number,2> * Factor Term Expr$ x – 2 * y$
32
Rule Sentential Form Input
- Goal x – 2 * y$
Expr$ x – 2 * y$
Term Expr$ x – 2 * y$
Factor Term Expr$ x – 2 * y$
<id,x> Term Expr$ x – 2 * y$
<id,x> Expr$ x – 2 * y$
<id,x> - Term Expr$ x– 2 * y$
<id,x> - Factor Term Expr$ x – 2 * y$
<id,x> - <number,2> Term Expr$ x –2 * y$
<id,x> - <number,2> * Term Expr$ x – 2 * y$
<id,x> - <number,2> * Factor Term Expr$ x – 2 * y$
<id,x> - <number,2> * <id,y> Term Expr$ x – 2 * y$
33
Rule Sentential Form Input
- Goal x – 2 * y$
Expr$ x – 2 * y$
Term Expr$ Terminal x – 2 * y$
Non-Terminal
Factor Term Expr$ x – 2 * y$
<id,x> Term Expr$ x – 2 * y$
<id,x> Expr$ x – 2 * y$
<id,x> - Term Expr$ x– 2 * y$
<id,x> - Factor Term Expr$ x – 2 * y$
<id,x> - <number,2> Term Expr$ x –2 * y$
<id,x> - <number,2> * Term Expr$ x – 2 * y$
<id,x> - <number,2> * Factor Term Expr$ x – 2 * y$
<id,x> - <number,2> * <id,y> Term Expr$ x – 2 * y$
34
Rule Sentential Form Input
- Goal x – 2 * y$
Expr$ x – 2 * y$
Term Expr$ x – 2 * y$
Factor Term Expr$ x – 2 * y$
<id,x> Term Expr$ x – 2 * y$
<id,x> Expr$ x – 2 * y$
<id,x> - Term Expr$ x– 2 * y$
<id,x> - Factor Term Expr$ x – 2 * y$
<id,x> - <number,2> Term Expr$ x –2 * y$
<id,x> - <number,2> * Term Expr$ x – 2 * y$
<id,x> - <number,2> * Factor Term Expr$ x – 2 * y$
<id,x> - <number,2> * <id,y> Term Expr$ x – 2 * y$
<id,x> - <number,2> * <id,y> Expr$ x – 2 * y$
35
Rule Sentential Form Input
- Goal x – 2 * y$
Expr$ x – 2 * y$
Term Expr$ x – 2 * y$
Terminal
Factor Term Expr$ x – 2 * y$
Non-Terminal
<id,x> Term Expr$ x – 2 * y$
<id,x> Expr$ x – 2 * y$
<id,x> - Term Expr$ x– 2 * y$
<id,x> - Factor Term Expr$ x – 2 * y$
<id,x> - <number,2> Term Expr$ x –2 * y$
<id,x> - <number,2> * Term Expr$ x – 2 * y$
<id,x> - <number,2> * Factor Term Expr$ x – 2 * y$
<id,x> - <number,2> * <id,y> Term Expr$ x – 2 * y$
<id,x> - <number,2> * <id,y> Expr$ x – 2 * y$
36
Rule Sentential Form Input
- Goal x – 2 * y$
Expr$ x – 2 * y$
Term Expr$ x – 2 * y$
Factor Term Expr$ x – 2 * y$
<id,x> Term Expr$ x – 2 * y$
<id,x> Expr$ x – 2 * y$
<id,x> - Term Expr$ x– 2 * y$
<id,x> - Factor Term Expr$ x – 2 * y$
<id,x> - <number,2> Term Expr$ x –2 * y$
<id,x> - <number,2> * Term Expr$ x – 2 * y$
<id,x> - <number,2> * Factor Term Expr$ x – 2 * y$
<id,x> - <number,2> * <id,y> Term Expr$ x – 2 * y$
<id,x> - <number,2> * <id,y> Expr$ x – 2 * y$
<id,x> - <number,2> * <id,y> $ x – 2 * y$
37
Rule Sentential Form Input
- Goal x – 2 * y$
Expr$ x – 2 * y$
Term Expr$ x – 2 * y$
Factor Term Expr$ x – 2 * y$
<id,x> Term Expr$ x – 2 * y$
<id,x> Expr$ x – 2 * y$
<id,x> - Term Expr$ x– 2 * y$
<id,x> - Factor Term Expr$ x – 2 * y$
<id,x> - <number,2> Term Expr$ x –2 * y$
<id,x> - <number,2> * Term Expr$ x – 2 * y$
<id,x> - <number,2> * Factor Term Expr$ x – 2 * y$
<id,x> - <number,2> * <id,y> Term Expr$ x – 2 * y$
<id,x> - <number,2> * <id,y> Expr$ x – 2 * y$
<id,x> - <number,2> * <id,y> $ x – 2 * y$
<id,x> - <number,2> * <id,y>$ x – 2 * y$ 38
EXAMPLE
Given a grammar : Remove left recursive
S→S+T|T S → TS
S → +TS |
T → T*F | F
T → FT
F → a | (S) T → *FT |
Rule 1 2 3 4 Follow
G $ {$}
S ) $ { $,) }
S $,) { $,) }
T + $,) { +, $, ) }
T +, $, ) {+, $, ) }
F * +, $, ) { *, +, $, ) }
42
THE COMPLETE TABLE
a + * ( ) $
G G→S G→S
S S → TS S → TS
S S → +TS S → S →
T T → FT T → FT
T T → T → *FT T → T →
F F→a F → (S)
43
TEST INPUT STRING
((a*a+a)+a+a) Rule Sentential Form Input
G ((a*a+a)+a+a)$
1 S$ ((a*a+a)+a+a)$
2 TS$ ((a*a+a)+a+a)$
5 FTS$ ((a*a+a)+a+a)$
9 (S) TS$ ((a*a+a)+a+a)$
2 (TS) TS$ ((a*a+a)+a+a)$
5
(FTS) TS$ ((a*a+a)+a+a)$
9
((S)TS) TS$ ( (a*a+a)+a+a)$
2
5 ((TS)TS) TS$ ( (a*a+a)+a+a)$
8 ((FTS)TS) TS$ ( (a*a+a)+a+a)$
6 ((aTS)TS) TS$ ( (a*a+a)+a+a)$
8 ((a*FTS)TS) TS$ ( (a*a+a)+a+a)$
7 ((a*aTS)TS) TS$ ( (a*a+a)+a+a)$ 44
((a*aS)TS) TS$ ( (a*a+a)+a+a)$
((a*a+a)+a+a) Rule Sentential Form Input
3 ((a*a+TS)TS) TS$ ( (a*a+a)+a+a)$
5 ((a*a+FTS)TS) TS$ ( (a*a+a)+a+a)$
8 ((a*a+aTS)TS) TS$ ( (a*a+a)+a+a)$
7 ((a*a+aS)TS) TS$ ( (a*a+a)+a+a)$
4
((a*a+a)TS) TS$ ( (a*a+a) +a+a)$
7
((a*a+a)S) TS$ ( (a*a+a) +a+a)$
3
5 ((a*a+a) +TS) TS$ ( (a*a+a) +a+a)$
8 ((a*a+a) +FTS) TS$ ( (a*a+a) +a+a)$
7 ((a*a+a) +aTS) TS$ ( (a*a+a) +a+a)$
3 ((a*a+a) +aS) TS$ ( (a*a+a) +a+a)$
5 ((a*a+a) +a+TS) TS$ ( (a*a+a) +a+a)$
8 ((a*a+a) +a+FTS) ( (a*a+a) +a+a)$
7 TS$ ( (a*a+a) +a+a)$
4 ((a*a+a) +a+aTS) ( (a*a+a) +a+a)$
7,4 TS$ ( (a*a+a) +a+a) $
((a*a+a) +a+aS) TS$ 45
$
((a*a+a) +a+a) TS$