costas busch - rpi1 context-free languages. costas busch - rpi2 regular languages

76
Costas Busch - RPI 1 Context-Free Languages

Post on 21-Dec-2015

231 views

Category:

Documents


1 download

TRANSCRIPT

Costas Busch - RPI 1

Context-Free Languages

Costas Busch - RPI 2

Regular Languages

}0:{ nba nn }{ Rww

**ba *)( ba

Costas Busch - RPI 3

Regular Languages

}{ nnba }{ Rww

Context-Free Languages

Costas Busch - RPI 4

Context-Free Languages

PushdownAutomata

Context-FreeGrammars

stack

automaton

Costas Busch - RPI 5

Context-Free Grammars

Costas Busch - RPI 6

Example A context-free grammar :

S

aSbS

aabbaaSbbaSbS

G

A derivation:

Costas Busch - RPI 7

A context-free grammar :

S

aSbS

aaabbbaaaSbbbaaSbbaSbS

G

Another derivation:

Costas Busch - RPI 8

S

aSbS

)(GL

(((( ))))

}0:{ nba nn

Describes parentheses:

Costas Busch - RPI 9

S

bSbS

aSaS

abbaabSbaaSaS

A context-free grammar :G

A derivation:

Example

Costas Busch - RPI 10

S

bSbS

aSaS

abaabaabaSabaabSbaaSaS

A context-free grammar :G

Another derivation:

Costas Busch - RPI 11

S

bSbS

aSaS

)(GL }*},{:{ bawwwR

Costas Busch - RPI 12

S

SSS

aSbS

ababSaSbSSSS

A context-free grammar :G

A derivation:

Example

Costas Busch - RPI 13

S

SSS

aSbS

abababaSbabSaSbSSSS

A context-free grammar :G

A derivation:

Costas Busch - RPI 14

S

SSS

aSbS

}prefixanyin

)()( and

),()(:{

v

vnvn

wnwnw

ba

ba

() ((( ))) (( ))

)(GL

Describes matched parentheses:

Costas Busch - RPI 15

Definition: Context-Free Grammars

Grammar

Productions of the form:

xAString of variables and terminals

),,,( PSTVG

Variables Terminalsymbols

Startvariable

Variable

Costas Busch - RPI 16

*},:{)(*

TwwSwGL

),,,( PSTVG

Costas Busch - RPI 17

Definition: Context-Free Languages

A language is context-free

if and only if

there is a context-free grammar with

L

G)(GLL

Costas Busch - RPI 18

Derivation Order ABS .1

A

aaAA

.3

.2

B

BbB

.5

.4

aabaaBbaaBaaABABS54321

Leftmost derivation:

aabaaAbAbABbABS32541

Rightmost derivation:

Costas Busch - RPI 19

|AB

bBbA

aABS

Leftmost derivation:

abbbbabbbbB

abbBbbBabAbBabBbBaABS

Rightmost derivation:

abbbbabbBbb

abAbabBbaAaABS

Costas Busch - RPI 20

Derivation Trees

Costas Busch - RPI 21

ABS

ABS |aaAA |BbB

S

BA

Costas Busch - RPI 22

ABS |aaAA |BbB

aaABABS

a a A

S

BA

Costas Busch - RPI 23

ABS |aaAA |BbB

aaABbaaABABS S

BA

a a A B b

Costas Busch - RPI 24

ABS |aaAA |BbB

aaBbaaABbaaABABS S

BA

a a A B b

Costas Busch - RPI 25

ABS |aaAA |BbB

aabaaBbaaABbaaABABS S

BA

a a A B b

Derivation Tree

Costas Busch - RPI 26

aabaaBbaaABbaaABABS

yield

aab

baa

S

BA

a a A B b

Derivation Tree

ABS |aaAA |BbB

Costas Busch - RPI 27

Partial Derivation Trees

ABS

S

BA

Partial derivation tree

ABS |aaAA |BbB

Costas Busch - RPI 28

aaABABS

S

BA

a a A

Partial derivation tree

Costas Busch - RPI 29

aaABABS

S

BA

a a A

Partial derivation tree

sententialform

yield

aaAB

Costas Busch - RPI 30

aabaaBbaaBaaABABS

aabaaAbAbABbABS S

BA

a a A B b

Same derivation tree

Sometimes, derivation order doesn’t matter

Leftmost:

Rightmost:

Costas Busch - RPI 31

Ambiguity

Costas Busch - RPI 32

aEEEEEE |)(|| aaa

E

EE

EE

a

a a

aaaEaa

EEaEaEEE

*

leftmost derivation

Costas Busch - RPI 33

aEEEEEE |)(|| aaa

E

EE

a a

EE a

aaaEaa

EEaEEEEEE

leftmost derivation

Costas Busch - RPI 34

aEEEEEE |)(|| aaa

E

EE

a a

EE a

E

EE

EE

a

a a

Two derivation trees

Costas Busch - RPI 35

The grammar aEEEEEE |)(|| is ambiguous:

E

EE

a a

EE a

E

EE

EE

a

a a

string aaa has two derivation trees

Costas Busch - RPI 36

string aaa has two leftmost derivations

aaaEaa

EEaEEEEEE

aaaEaa

EEaEaEEE

*

The grammar aEEEEEE |)(|| is ambiguous:

Costas Busch - RPI 37

Definition:

A context-free grammar is ambiguous

if some string has:

two or more derivation trees

G

)(GLw

Costas Busch - RPI 38

In other words:

A context-free grammar is ambiguous

if some string has:

two or more leftmost derivations

G

)(GLw

(or rightmost)

Costas Busch - RPI 39

Why do we care about ambiguity?

E

EE

a a

EE a

E

EE

EE

a

a a

aaa

take 2a

Costas Busch - RPI 40

E

EE

EE

E

EE

EE

222

2

2 2 2 2

2

Costas Busch - RPI 41

E

EE

EE

E

EE

EE

6222

2

2 2 2 2

2

8222

4

2 2

2

6

2 2

24

8

Costas Busch - RPI 42

E

EE

EE

6222

2

2 2

4

2 2

2

6

Correct result:

Costas Busch - RPI 43

• We want to remove ambiguity

• Ambiguity is bad for programming languages

Costas Busch - RPI 44

We fix the ambiguous grammar:

aEEEEEE |)(||

New non-ambiguous grammar:

aF

EF

FT

FTT

TE

TEE

)(

Costas Busch - RPI 45

aF

EF

FT

FTT

TE

TEE

)(

aaaFaaFFa

FTaTaTFTTTEE

E

E T

T F

F

a

T

F

a

a

aaa

Costas Busch - RPI 46

E

E T

T F

F

a

T

F

a

a

aaa

Unique derivation tree

Costas Busch - RPI 47

The grammar :

aF

EF

FT

FTT

TE

TEE

)(

is non-ambiguous:

Every string hasa unique derivation tree

G

)(GLw

Costas Busch - RPI 48

Another Ambiguous Grammar

IF_STMT if EXPR then STMT| if EXPR then STMT else STMT

Costas Busch - RPI 49

If expr1 then if expr2 then stmt1 else stmt2

IF_STMT

expr1 then

elseif expr2 then

STMT

stmt1

if

IF_STMT

expr1 then else

if expr2 then

STMT stmt2if

stmt1

stmt2

Costas Busch - RPI 50

Inherent Ambiguity

Some context free languageshave only ambiguous grammars

Example: }{}{ mmnmnn cbacbaL

||11

aAbA

AcSS

||22

bBcB

BaSS

21 | SSS

Costas Busch - RPI 51

The string nnn cba

has two derivation trees

S

1S

S

2S

1S c 2Sa

Costas Busch - RPI 52

Compilers

Costas Busch - RPI 53

Compiler

Program

v = 5;if (v>5) x = 12 + v;while (x !=3) { x = x - 3; v = 10;}......

Add v,v,0cmp v,5jmplt ELSETHEN: add x, 12,vELSE:WHILE:cmp x,3...

Machine Code

Costas Busch - RPI 54

Lexicalanalyzer parser

Compiler

program machinecode

input output

Costas Busch - RPI 55

A parser knows the grammarof the programming language

Costas Busch - RPI 56

ParserPROGRAM STMT_LISTSTMT_LIST STMT; STMT_LIST | STMT;STMT EXPR | IF_STMT | WHILE_STMT | { STMT_LIST }

EXPR EXPR + EXPR | EXPR - EXPR | IDIF_STMT if (EXPR) then STMT | if (EXPR) then STMT else STMTWHILE_STMT while (EXPR) do STMT

Costas Busch - RPI 57

The parser finds the derivation of a particular input

10 + 2 * 5

Parser

E -> E + E | E * E | INT

E => E + E => E + E * E => 10 + E*E => 10 + 2 * E => 10 + 2 * 5

input

derivation

Costas Busch - RPI 58

10

E

2 5

E => E + E => E + E * E => 10 + E*E => 10 + 2 * E => 10 + 2 * 5

derivation

derivation tree

E E

E E

+

*

Costas Busch - RPI 59

10

E

2 5

derivation tree

E E

E E

+

*

mult a, 2, 5add b, 10, a

machine code

Costas Busch - RPI 60

Parsing

Costas Busch - RPI 61

grammar

Parserinputstring

derivation

Costas Busch - RPI 62

Example:

Parser

derivation

S

bSaS

aSbS

SSSinput

?aabb

Costas Busch - RPI 63

Exhaustive Search

||| bSaaSbSSS

Phase 1:

S

bSaS

aSbS

SSSaabb

All possible derivations of length 1

Find derivation of

Costas Busch - RPI 64

S

bSaS

aSbS

SSS aabb

Costas Busch - RPI 65

Phase 2

aSbS

SSS

aabb

SSSS

bSaSSSS

aSbSSSS

SSSSSS

Phase 1

abaSbS

abSabaSbS

aaSbbaSbS

aSSbaSbS

||| bSaaSbSSS

Costas Busch - RPI 66

Phase 2

SSSS

aSbSSSS

SSSSSS

aaSbbaSbS

aSSbaSbS

Phase 3

aabbaaSbbaSbS

||| bSaaSbSSS

aabb

Costas Busch - RPI 67

Final result of exhaustive search

Parser

derivation

S

bSaS

aSbS

SSSinput

aabb

aabbaaSbbaSbS

(top-down parsing)

Costas Busch - RPI 68

Time complexity of exhaustive search

Suppose there are no productions of the form

A

BA

Number of phases for string : w ||2 w

Costas Busch - RPI 69

Time for phase 1: k

k possible derivations

For grammar with rules k

Costas Busch - RPI 70

Time for phase 2: 2k

possible derivations2k

Costas Busch - RPI 71

Time for phase : ||2wk

possible derivations||2wk

||2 w

Costas Busch - RPI 72

Total time needed for string :w

||22 wkkk

Extremely bad!!!

phase 1 phase 2 phase 2|w|

Costas Busch - RPI 73

There exist faster algorithmsfor specialized grammars

S-grammar: axA

symbol stringof variables

),( aA appears oncePair

Costas Busch - RPI 74

S-grammar example:

cS

bSSS

aSS

abccabcSabSSaSS

Each string has a unique derivation

Costas Busch - RPI 75

In the exhaustive search parsingthere is only one choice in each phase

For S-grammars:

Total time for parsing string :w ||w

Time for a phase: 1

Costas Busch - RPI 76

For general context-free grammars:

There exists a parsing algorithmthat parses a stringin time

||w3||w

(we will show it in the next class)