context-free grammars

32
2301373 Chapter 3 Context-free Gr ammar 1 Context-Free Grammars Using grammars in parsers

Upload: season

Post on 05-Jan-2016

152 views

Category:

Documents


3 download

DESCRIPTION

Context-Free Grammars. Using grammars in parsers. Outline. Parsing Process Grammars Context-free grammar Backus-Naur Form (BNF) Parse Tree and Abstract Syntax Tree Ambiguous Grammar Extended Backus-Naur Form (EBNF). Parsing Process. Call the scanner to get tokens - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar

1

- Context Free Grammars

Using grammars in parsers

Page 2: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 2

Outline Parsing Process Grammars

- Context free grammar - Backus Naur Form (BNF)

Parse Tree and Abstract Syntax Tree Ambiguous Grammar - Extended Backus Naur Form (EBNF)

Page 3: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 3

Parsing Process Call the scanner to get tokens Build a parse tree from the stream of to

kens A parse tree shows the syntactic structure

of the source program. Add information about identifiers in the

symbol table Report error, when found, and recover f

rom thee error

Page 4: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 4

Grammar a quintuple ( V, T, P, S ) where

V is a finite set of nonterminals, containing S, T is a finite set of terminals, P is a set of production rules in the form of β wh

ere and β are strings over V U T , and S is the start symbol.

Example G= ({S, A, B, C}, {a, b, c}, P, S)

P= { SSABC, BA AB, CB BC, CA AC, SA a, aA aa, aB ab, bB bb, bC bc, cC cc}

Page 5: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 5

- Context Free Grammar a quintuple ( V, T, P, S ) where

V is a finite set of nonterminals, containingS,

T is a finite set of terminals, P is a set of production rules in the form of

β where is in V and β is in (V U T )*, and S is the start symbol.

Any string in (V U T)* is called a sententi al form.

Page 6: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 6

Examples

E E O E E (E) E id O + O - O * O /

S SS S (S)S S () S

Page 7: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 7

- Backus Naur Form (BNF) Nonterminals are in < >. Terminals are any other symbols. ::= means . | means or. Examples:

<E> ::= <E><O><E>| (<E>) | ID <O> ::= - + | | * | /

<S> ::= <S><S> | (<S>)<S> | () |

Page 8: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 8

Derivation A sequence of replacement of a substri

ng in a sentential form.Definition Let G = (V , T , P , S ) be a CFG, , , be

strings in (V U T)* and A is in V.A G if A is in P.

*G denotes a derivation in zero step ormore.

Page 9: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 9

Examples S SS | (S)S | () | S

SS (S)SS (S)S(S)S (S)S(())S ((S)S)S(())S ((S)())S(())S ((())())S(())S ((())()) (())S ((())())(())

E E O E | (E) | id O - + | | * | / E

E O E (E) O E (E O E) O E* ((E O E) O E) O E ((id O E)) O E) O E ((id + E)) O E) O E ((id + id)) O E) O E * ((id + id)) * id) + id

Page 10: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 10

Leftmost Derivation Rightmost Derivation

Each step of the derivati

on is a replacement of t

he leftmost nonterminal

s in a sentential form.

E E O E (E ) O E (E O E) O E (id O E) O E (id + E ) O E (id + id) O E (id + id) * E (id + id) * id

Each step of the derivati

on is a replacement of t

he rightmost nontermin

als in a sentential form.

E E O E E O id E * id (E )* i d (E O E ) * id (E O id) * id (E *+id) i d (id + id) * id

Page 11: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 11

Language Derived from Grammar Let G = (V , T , P , S ) be a CFG. A string w in T * is derived from G if S *

Gw. A language generated by G , denoted by

L(G ), is a set of strings derived from G. L(G) = {w| S *

Gw}.

Page 12: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 12

Right/Left Recursive A grammar is a left r

ecursive if its produc tion rules can gener

ate a derivation of th e form A * A X.

Examples: E E O id | (E) | id E F + id | (E) | id

F E * id | id E F+i d

E * id + id

A grammar is a rightrecursive if its produ

ction rules can gener ate a derivation of th

e form A * X A. Examples:

E id O E | (E) | id E id + F | (E) | id

F id * E | id E id + F

id + id * E

Page 13: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 13

Parse Tree A labeled tree in which

the interior nodes are labeled by nonterminals

leaf nodes are labeled by terminals the children of an interior node represent a

replacement of the associated nonterminal in a derivation

corresponding to a derivationE

+id

E

F

*id i

d

Page 14: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 14

Parse Trees and Derivations

E E + E 1( ) id + E (2) id + E * E (3) id + id * E (4) id + id * id (5)

E E + E 1( ) E + E * E 2( ) E + E * id 3( ) E + id * id 4( ) id + id * id (5)

Preorder numbering

Reverse of postorder numbering

+

E 1

E 2

E 5

E 3

* E4

id

id

id

+

E 1

E 5

E 3

E 2

* E4

id

id

id

Page 15: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 15

Grammar: Example

List of parameters in: Function definition

function sub(a,b,c) Function call

sub(a,1,2)

<Fdef> function id ( <argList> )<argList> id , <arglist> | id<Fcall> id ( <parList> )<parList> <par> ,<parlist>| <par><par> id | const

<Fdef> function id ( <argList> )<argList> <arglist> , id | id<Fcall> id ( <parList> )<parList> <parlist> ,<par>| <par><par> id | const

<argList> id , <arglist> id, id , <arglist> … (id ,)* id<argList> <arglist> , id<arglist> , id, id … id (, id )*

Page 16: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 16

Grammar: Example

List of parameters If zero parameter is

allowed, then ?

<Fdef> function id ( <argList> )| function id ( )

<argList> id , <arglist> | id<Fcall> id ( <parList> ) | id ( )

<parList> <par> ,<parlist>| <par><par> id | const

<Fdef> function id ( <argList> )<argList> id , <arglist> | id | <Fcall> id ( <parList> )<parList> <par> ,<parlist>| <par><par> id | const

Work ?

NO! Generateid , id , id ,

Page 17: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 17

Grammar: Example

List of parameters If zero parameter is

allowed, then ?

<Fdef> function id ( <argList> )| function id ( )

<argList> id , <arglist> | id<Fcall> id ( <parList> ) | id ( )

<parList> <par> ,<parlist>| <par><par> id | const

<Fdef> function id ( <argList> )<argList> id , <arglist> | id | <Fcall> id ( <parList> )<parList> <par> ,<parlist>| <par><par> id | const

Work ?

NO! Generateid , id , id ,

Page 18: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 18

Grammar: ExampleList of statements: No statement One statement:

s; More than one

statement: s; s; s;

A statement can be a block of statements. {s; s; s;}

Is the following correct?{ {s; {s; s;} s; {}} s; }

<St> ::= | s; | s; <St> | { <St> } <St><St> { <St> } <St> { <St> } { { <St> } <St>} { { <St> } s; <St>} { { <St> } s; } { { s; <St> } s;} { { s; { <St> } <St> } s;} { { s; { <St> } s; <St> } s;} { { s; { <St> } s; { <St> } <St> } s;} { { s; { <St> } s; { <St> } } s;} { { s; { <St> } s; {} } s;} { { s; { s; <St> } s; {} } s;} { { s; { s; s;} s; {} } s;}

Page 19: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 19

Abstract Syntax Tree Representation of actual source tokens Interior nodes represent operators. Leaf nodes represent operands.

Page 20: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 20

Abstract Syntax Tree for Expression

+ E

E

E

E

*E

id3

id2

id1

+

id1

id3

*

id2

Page 21: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 21

Abstract Syntax Tree for If Statement

st

ifStatement

)exp

true

(if

else st

st elsePart

return

if

true

st return

Page 22: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 22

Ambiguous Grammar A grammar is ambiguous if it can gener

ate two different parse trees for one string.

Ambiguous grammars can cause incons istency in parsing.

Page 23: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 23

Example: Ambiguous Grammar E E + E E - E E E E * E E E / E E i d

+

E

E

E

E

*

E

id3

id2

id1

*

E

E

id2

E

E

+E

id1

id3

Page 24: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 24

Ambiguity in Expressions Which operation is to be done first?

solved by precedence An operator with higher precedence is done bef

ore one with lower precedence. An operator with higher precedence is placed in

a rule (logically) further from the start symbol. solved by associativity

- -If an operator is right associative (or left associa tive), an operand in between2 operators is asso ciated to the operator to the right (left).

- Right associated : W + ( X+(Y+Z)) ++++-++++++++++ + +++ + ++ + ++ + +

Page 25: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 25

Precedence E E + E E - E E E E * E E E / E E id E E + E E - E E E F F F * F

F F / FF id

+

E

E

E

E

*

E

id3

id2

id1

*

E

E

id2

E

E

+E

id1

id3

E

+ E E

*F

id3

id2

id1

F

F F

Page 26: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 26

Precedence (cont’d)

E - E + E | E E | F F F * F | F / F | X X ( E ) | id

(id1 + id2) * id3* id4

* F

X

F

+Eid4

id3

E

X

E X

E

F

) (

*F F

id1

X

F

id2

X

F

Page 27: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 27

Associativity - Left associative operato

rs E - E + F | E F | F F F * X | F / X | X X ( E ) | id

(id1 + id2) * id3 / id4 = (( (id1 + id2) * id3) / id4)

/ F X

+E

id3 X

E

E

F

) (

*F X

id1

X

F

id4

X

F

id2

Page 28: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 28

Ambiguity in Dangling Else

St IfSt | ... IfSt if ( E ) St | if ( E ) St else St

E 0 | 1 | …

IfSt

)if ( elseE StSt

IfSt

)if ( E St

0

1

0 IfSt

)if ( elseE StSt

IfSt

)if ( E St

1

{ if (0)

ii ii i ii i 1

ii i} { if (0)

1{ if ( ) St else St } }

Page 29: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 29

Disambiguating Rules for Dangling El se

St MatchedSt | UnmatchedSt

UnmatchedSt if (E) St | if (E) MatchedSt else Unmatched

St MatchedSt

if (E) MatchedSt else MatchedSt| ...

E 0 | 1

if (0) if (1) St else St= if (0)

if (1) St else St

UnmatchedSt

)if ( E

MatchedSt

)if ( elseE MatchedStMatchedSt

St

St

Page 30: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 30

- Extended Backus Naur Form (EBNF) Kleene’s Star/ Kleene’s Closure

Seq ::= St {; St} Seq ::= {St ;} St

Optional Part IfSt ::= if ( E ) St [else St] - E ::= F [+ E ] | F [ E]

Page 31: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 31

Syntax Diagrams Graphical representation of EBNF rules

nonterminals: terminals: sequences and choices:

Examples X ::= ( E) | id

Seq ::= {St ;} St

E ::= F [+ E ]

IfSt

id

( )E

id

St

St;

F + E

Page 32: Context-Free Grammars

2301373 Chapter 3 Context-free Grammar 32

Reading Assignment Louden, Compiler construction

Chapter 3