Predictive Parsing and LL(1) - Compiler Design - Dr. D. P. Sharma - NITK Surathkal by wahid311

Preview:

DESCRIPTION

Predictive Parsing and LL(1) - Compiler Design - Dr. D. P. Sharma - NITK Surathkal by wahid311

Citation preview

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 )

28

id

E

+ id id

$

$

stack Parsing Table M

E →T E'

29

id + id id

$

$

stack Parsing Table M

T →

TE'

F T'

30

T'

id + id id

$

$

stack Parsing Table M

E'

F

F id

31

T'

id + id id

$

$

stack Parsing Table M

E'

id

32

T'

+ id id

$

$

stack Parsing Table M

E'

T'

id

33

+ id id

$

$

stack Parsing Table M→

E'

E' +

id

E'T

34

+ id id

$

$

stack Parsing Table M

E'

+

id

T

35

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'

36

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

37

Stack Input Ouput

$E' T' $ $E' $ T' →$ $ E' →

38

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

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) 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

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

id+idid

E

T E'

F

id

T'

E'T+

and so on ....

43

E

T E'

F

id

T'

E'T+

The leaves at any point form a stringA

44

E

T E'

F

id

T'

E'T+

only contains terminals

45

E

T E'

F

id

T'

+ E'Tid + id id b

input string is bThe prefix matchesNext token is b

46

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

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

1. b belongs to an expansion of A

Any A → can be used if b can start a string derived from

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

In this case we say that b FIRST()

51

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

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

which means that b can appear after A in a derivation of the form S → Ab

54

LL(1) Table ConstructionLL(1) Table ConstructionLL(1) Table ConstructionLL(1) Table Construction

We say that b FOLLOW(A)

55

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

56

ComputingComputing FIRST FIRST Sets SetsComputingComputing FIRST FIRST Sets Sets

DefinitionFIRST(X) =

{ b | X → ba }

{ | X → }

Recommended