Vous êtes sur la page 1sur 39

CSE401: LL(1) Parsing Example

Larry Ruzzo Spring 2004


Slides by Chambers, Eggers, Notkin, Ruzzo, and others W.L.Ruzzo & UW CSE 1994-2004

LL(1) Parsing Theory


Goal: Formal, rigorous description of those grammars for which I can figure out how to do a top-down parse by looking ahead just one token, plus corresponding algorithms. Notation: T = Set of Terminals (Tokens) N = Set of Nonterminals $ = End-of-file character (T-like, but not in N ! T)
2

Table-driven predictive parser


!

Automatically compute PREDICT table from grammar


PREDICT(nonterminal,input-symbol) " action, e.g. which rhs or error

Example 1
Stmt ::= 1 if expr then Stmt else Stmt | 2 while Expr do Stmt | 3 begin Stmts end ::= 6 id
do begin end id ; $

Stmts ::= 4 Stmt ; Stmts | 5 " Expr


Stmt Stmts Expr
empty = error
4

if then else while

1 4

2 4

3 4 5 6

LL(1) Parsing Algorithm


push S$ /* S is start symbol */ while Stack not empty X := pop(Stack) a := peek at next input token /* EOF => $ */ if X is terminal or $ If X==a, read token a else abort; else look at PREDICT(X, a) /* X is nonterminal*/ Empty : abort rule X # $ : push $ If not at end of input, Abort else Accept 5

Parser Example
!

Following slides trace execution of the parser (slide 5) on a token string according to the grammar from slide 4 and the corresponding parse tree Snapshots show parser state at the top of the while loop and just before the if statement at each iteration, together with a summary of the action taken in the if Notice how the leaves on the right side of the parse tree correspond to the stack contents
6

At top of loop S X: a: Stack:

S $ while id do begin begin end ; end $


7

Action: 2 S ::= while E do S

Mid loop S X: a: S while

Stack:

$ while id do begin begin end ; end $


8

At top of loop S X: a: while E do S Stack:

while E do S $ while id do begin begin end ; end $


9

Action: Match

Mid loop S X: a: while E do S while while

Stack:

E do S $ while id do begin begin end ; end $


10

At top of loop S X: a: E do S Stack:

while

E do S $ id do begin begin end ; end $


11

Action: 6 E

::= id

Mid loop S X: a: E do S Stack: E id

while

do S $ id do begin begin end ; end $


12

At top of loop S X: a: E do id S Stack:

while

id do S $ id do begin begin end ; end $


13

Action: Match

Mid loop S X: a: E do id S id id

Stack:

while

do S $ id do begin begin end ; end $


14

At top of loop S X: a: E do S Stack:

while id

do S $ do begin begin end ; end $


15

Action: Match

Mid loop S X: a: E do S do do

Stack:

while id

S $ do begin begin end ; end $


16

At top of loop S X: a: E S Stack:

while id do

S $ begin begin end ; end $


17

Action: 3 S ::= begin Ss end

Mid loop S X: a: E S S begin

Stack:

while id do

$ begin begin end ; end $


18

At top of loop S X: a: E begin S Ss end Stack:

while id do

begin Ss end $ begin begin end ; end $


19

Action: Match

Mid loop S X: a: E begin S Ss end begin begin

Stack:

while id do

Ss end $ begin begin end ; end $


20

At top of loop S X: a: E S Ss end Stack:

while id do begin

Ss end $ begin end ; end $


21

Action: 4 Ss ::= S ; Ss

Mid loop S X: a: E S Ss end Ss begin

Stack:

while id do begin

end $ begin end ; end $


22

At top of loop S X: a: E S Ss S ; end Ss S ; Ss end $ $


23

Stack:

while id do begin

begin end

end

Action: 3 S

::= begin Ss end

Mid loop S X: a: E S Ss S ; end Ss ; Ss end $ begin end ; end $


24

S begin

Stack:

while id do begin

Top of loop S X: a: E S Ss S ; end Ss Stack:

begin Ss end while id do begin begin end ; end $

begin Ss end ; Ss end $


25

Action: Match

Mid loop S X: a: E S Ss S ; end Ss Ss end ; Ss end $ $


26

begin begin

Stack:

begin Ss end while id do begin begin end ; end

Top of loop S X: a: E S Ss S ; end Ss Ss end ; Ss end $ $


27

Stack:

Ss end while id do begin begin end ; end

Action: 5 Ss ::= "

Mid loop S X: a: E S Ss S ; end Ss end ; Ss end $ $


28

Ss end

Stack:

Ss end while id do begin begin end ; end

Top of loop S X: a: E S Ss S ; end Ss end ; Ss end $ $


29

Stack:

Ss end while id do begin begin " end ; end

Action: Match

Mid loop S X: a: E S Ss S ; end Ss ; Ss end $ end $


30

end end

Stack:

Ss end while id do begin begin " end ;

Top of loop S X: a: E S Ss S Ss while id do begin begin " end ; end $ ; end Ss ; Ss end $
31

Stack:

Action: Match

Mid loop S X: a: E S Ss S Ss while id do begin begin " end ; end $ ; end Ss Ss end $
32

; ;

Stack:

Top of loop S X: a: E S Ss S Ss while id do begin begin " end ; end $ end Ss Ss end $
33

Stack:

Action: 5 Ss ::= "

Mid loop S X: a: E S Ss S Ss while id do begin begin " end ; end $ end Ss end $
34

Ss end

Stack:

Top of loop S X: a: E S Ss S Ss while id do begin begin " end ; " end $ end Ss end $
35

Stack:

Action: Match

Mid loop S X: a: E S Ss S Ss while id do begin begin " end ; " $ end $


36

end end

Stack: end Ss

Top of loop S X: a: E S Ss S Ss while id do begin begin " end ; " end $ $


37

Stack:

Ss

Action: Match

Mid loop S X: a: E S Ss S Ss while id do begin begin " end ; " end $ Ss $ $

Stack:

38

Top of loop S

while id do begin begin " end ; " end $

T P E C C A
a: E S Ss S Ss Ss

X:

Stack:

39

Vous aimerez peut-être aussi