You are on page 1of 45

CS 212 LECTURE 06

PROGRAMMING LANGUAGES
PREDICTIVE PARSING

2
PREDICTIVE PARSING AND LEFT FACTORING

Recall the grammar


•E → T + E | T
? int
• T → int | int * T | ( E ) T
Impossible to predict because int *
• For T two productions start with int T
• For E it is not clear how to predict
• A grammar must be left-factored before use predictive
3
parsing
LEFT FACTORING

4
LEFT FACTORING

5
LEFT FACTORING (AN EXAMPLE)

• Consider the following


fragment of the expression
grammar

• After left factoring, it


becomes
6
7
LEFT FACTORING (AN EXAMPLE)

8
TRY THIS

•Left factoring this gramma

E→T+E|T
T → int | int * T | ( E )

9
CONSTRUCTION OF A LL(1) FROM A CFG
GRAMMAR

Eliminate left recursion


left factorization
Add an extra start production S → S$ to the grammar
Calculate First for every production and Follow for every
nonterminal

Calculate the parsing table 10


THE FIRST SET

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 | 

There is no left factorization. Now add an extra start :


G → S$
S → TS
S → +TS | 
T → FT
T → *FT |  39
F → a | (S)
New grammar :

1 G→S Non-Terminal G, S, S, T, F


Symbol
2 S → TS
Terminal a ,+, *, (, ), $
3 S → +TS Symbol
4 S → 
5 T → FT
6 T → *FT
7 T → 
8 F→a
9 F → (S)
40
THE FIRST SET CONSTRUCTION
Rule 1 2 3 4 First
G a, ( { a, ( }
S a, ( { a, ( }
S  + { +,  }
T a, ( { a, ( }
T  * { *,  }
F a, ( { a, ( }
a a {a}
+ + { +}
* * {*}
( ( {(}
) ) {)} 41
THE FOLLOW SET CONSTRUCTION

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 FTS$ ((a*a+a)+a+a)$
9 (S) TS$ ((a*a+a)+a+a)$
2 (TS) TS$ ((a*a+a)+a+a)$
5
(FTS) TS$ ((a*a+a)+a+a)$
9
((S)TS) TS$ ( (a*a+a)+a+a)$
2
5 ((TS)TS) TS$ ( (a*a+a)+a+a)$
8 ((FTS)TS) TS$ ( (a*a+a)+a+a)$
6 ((aTS)TS) TS$ ( (a*a+a)+a+a)$
8 ((a*FTS)TS) TS$ ( (a*a+a)+a+a)$
7 ((a*aTS)TS) TS$ ( (a*a+a)+a+a)$ 44
((a*aS)TS) TS$ ( (a*a+a)+a+a)$
((a*a+a)+a+a) Rule Sentential Form Input
3 ((a*a+TS)TS) TS$ ( (a*a+a)+a+a)$
5 ((a*a+FTS)TS) TS$ ( (a*a+a)+a+a)$
8 ((a*a+aTS)TS) TS$ ( (a*a+a)+a+a)$
7 ((a*a+aS)TS) TS$ ( (a*a+a)+a+a)$
4
((a*a+a)TS) TS$ ( (a*a+a) +a+a)$
7
((a*a+a)S) TS$ ( (a*a+a) +a+a)$
3
5 ((a*a+a) +TS) TS$ ( (a*a+a) +a+a)$
8 ((a*a+a) +FTS) TS$ ( (a*a+a) +a+a)$
7 ((a*a+a) +aTS) TS$ ( (a*a+a) +a+a)$
3 ((a*a+a) +aS) TS$ ( (a*a+a) +a+a)$
5 ((a*a+a) +a+TS) TS$ ( (a*a+a) +a+a)$
8 ((a*a+a) +a+FTS) ( (a*a+a) +a+a)$
7 TS$ ( (a*a+a) +a+a)$
4 ((a*a+a) +a+aTS) ( (a*a+a) +a+a)$
7,4 TS$ ( (a*a+a) +a+a) $
((a*a+a) +a+aS) TS$ 45
$
((a*a+a) +a+a) TS$

You might also like