Formal Grammars

Preview:

Citation preview

IN4303 2016-2017 Compiler Construction

Formal Grammars language specification

Guido Wachsmuth, Eelco Visser

Formal Grammars 2

3 * +7 21

3 * +7 21

Exp ExpExp

Exp

Exp

parser

Formal Grammars 3

syntax definition

errors

parse generate

check

parse table

generic parser

Formal Grammars

StrategoDynSem

NaBL2

SDF3

ESVeditor

SPTtests

4

syntax definition

concrete syntax

abstract syntax

static semantics

name binding

type system

dynamic semantics

translation

interpretation

Formal Grammars

StrategoDynSem

NaBL2

SDF3

ESVeditor

SPTtests

5

syntax definition

concrete syntax

abstract syntax

static semantics

name binding

type system

dynamic semantics

translation

interpretation

Formal Grammars

StrategoDynSem

NaBL2

SDF3

ESVeditor

SPTtests

6

syntax definition

concrete syntax

abstract syntax

static semantics

name binding

type system

dynamic semantics

translation

interpretation

Formal Grammars 7

P A R E N T A L

ADVISORYTHEORETICAL CONTENT

Formal Grammars 8

formal languages

Formal Grammars 9

infinite productivity

Formal Grammars 10

finite models

Formal Grammars 11

Philosophy

Linguistics

lexicology

grammar

morphology

syntax

phonology

semantics

Interdisciplinary

Computer Science

syntax

semantics

Formal Grammars 12

Philosophy

Linguistics

lexicology

grammar

morphology

syntax

phonology

semantics

Interdisciplinary

Computer Science

syntax

semantics

Formal Grammars 13

Formal Grammars 13

vocabulary Σ

finite, nonempty set of elements (words, letters)

alphabet

Formal Grammars 13

vocabulary Σ

finite, nonempty set of elements (words, letters)

alphabet

string over Σ

finite sequence of elements chosen from Σ

word, sentence, utterance

Formal Grammars 13

vocabulary Σ

finite, nonempty set of elements (words, letters)

alphabet

string over Σ

finite sequence of elements chosen from Σ

word, sentence, utterance

formal language λ

set of strings over a vocabulary Σ

λ ⊆ Σ*

Formal Grammars 14

formal grammars

Formal Grammars 15

formal grammar G

derivation relation ⇒G

formal language L(G) ⊆ Σ*

L(G) = {w∈Σ* | S ⇒G* w}

Formal Grammars 16

G = (N, Σ, P, S)

Num → Digit Num Num → Digit Digit → “0” Digit → “1” Digit → “2” Digit → “3” Digit → “4” Digit → “5” Digit → “6” Digit → “7” Digit → “8” Digit → “9”

decimal numbers morphology

Formal Grammars 17

G = (N, Σ, P, S)

Num → Digit Num Num → Digit Digit → “0” Digit → “1” Digit → “2” Digit → “3” Digit → “4” Digit → “5” Digit → “6” Digit → “7” Digit → “8” Digit → “9”

decimal numbers morphology

Σ: finite set of terminal symbols

Formal Grammars 18

G = (N, Σ, P, S)

Num → Digit Num Num → Digit Digit → “0” Digit → “1” Digit → “2” Digit → “3” Digit → “4” Digit → “5” Digit → “6” Digit → “7” Digit → “8” Digit → “9”

decimal numbers morphology

Σ: finite set of terminal symbols

N: finite set of non-terminal symbols

Formal Grammars 19

G = (N, Σ, P, S)

Num → Digit Num Num → Digit Digit → “0” Digit → “1” Digit → “2” Digit → “3” Digit → “4” Digit → “5” Digit → “6” Digit → “7” Digit → “8” Digit → “9”

decimal numbers morphology

Σ: finite set of terminal symbols

N: finite set of non-terminal symbols

S∈N: start symbol

Formal Grammars 20

G = (N, Σ, P, S)

Num → Digit Num Num → Digit Digit → “0” Digit → “1” Digit → “2” Digit → “3” Digit → “4” Digit → “5” Digit → “6” Digit → “7” Digit → “8” Digit → “9”

decimal numbers morphology

Σ: finite set of terminal symbols

N: finite set of non-terminal symbols

S∈N: start symbol

P⊆N×(N∪Σ)*: set of production rules

Formal Grammars 21

Num ⇒

Digit Num ⇒

4 Num ⇒

4 Digit Num ⇒

4 3 Num ⇒

4 3 Digit Num ⇒

4 3 0 Num ⇒

4 3 0 Digit ⇒

4 3 0 3

Num → Digit Num ⇒

Digit → “4” ⇒

Num → Digit Num ⇒

Digit → “3” ⇒

Num → Digit Num ⇒

Digit → “0” ⇒

Num → Digit ⇒

Digit → “3” ⇒

decimal numbers production

Formal Grammars 21

Num ⇒

Digit Num ⇒

4 Num ⇒

4 Digit Num ⇒

4 3 Num ⇒

4 3 Digit Num ⇒

4 3 0 Num ⇒

4 3 0 Digit ⇒

4 3 0 3

Num → Digit Num ⇒

Digit → “4” ⇒

Num → Digit Num ⇒

Digit → “3” ⇒

Num → Digit Num ⇒

Digit → “0” ⇒

Num → Digit ⇒

Digit → “3” ⇒

decimal numbers production

leftmost derivation

Formal Grammars 22

Num ⇒

Digit Num ⇒

Digit Digit Num ⇒

Digit Digit Digit Num ⇒

Digit Digit Digit Digit ⇒

Digit Digit Digit 3 ⇒

Digit Digit 0 3 ⇒

Digit 3 0 3 ⇒

4 3 0 3

Num → Digit Num ⇒

Num → Digit Num ⇒

Num → Digit Num ⇒

Num → Digit ⇒

Digit → “3” ⇒ ⇒

Digit → “0” ⇒ ⇒

Digit → “3” ⇒

Digit → “4” ⇒ ⇒

decimal numbers production

Formal Grammars 22

Num ⇒

Digit Num ⇒

Digit Digit Num ⇒

Digit Digit Digit Num ⇒

Digit Digit Digit Digit ⇒

Digit Digit Digit 3 ⇒

Digit Digit 0 3 ⇒

Digit 3 0 3 ⇒

4 3 0 3

Num → Digit Num ⇒

Num → Digit Num ⇒

Num → Digit Num ⇒

Num → Digit ⇒

Digit → “3” ⇒ ⇒

Digit → “0” ⇒ ⇒

Digit → “3” ⇒

Digit → “4” ⇒ ⇒

decimal numbers production

rightmost derivation

Formal Grammars 23

G = (N, Σ, P, S)

Exp → Num Exp → Exp “+” Exp Exp → Exp “−” Exp Exp → Exp “*” Exp Exp → Exp “/” Exp Exp → “(” Exp “)”

binary expressions syntax

Formal Grammars 24

G = (N, Σ, P, S)

Exp → Num Exp → Exp “+” Exp Exp → Exp “−” Exp Exp → Exp “*” Exp Exp → Exp “/” Exp Exp → “(” Exp “)”

binary expressions syntax

Σ: finite set of terminal symbols

Formal Grammars 25

G = (N, Σ, P, S)

Exp → Num Exp → Exp “+” Exp Exp → Exp “−” Exp Exp → Exp “*” Exp Exp → Exp “/” Exp Exp → “(” Exp “)”

binary expressions syntax

Σ: finite set of terminal symbols

N: finite set of non-terminal symbols

Formal Grammars 26

G = (N, Σ, P, S)

Exp → Num Exp → Exp “+” Exp Exp → Exp “−” Exp Exp → Exp “*” Exp Exp → Exp “/” Exp Exp → “(” Exp “)”

binary expressions syntax

Σ: finite set of terminal symbols

N: finite set of non-terminal symbols

S∈N: start symbol

Formal Grammars 27

G = (N, Σ, P, S)

Exp → Num Exp → Exp “+” Exp Exp → Exp “−” Exp Exp → Exp “*” Exp Exp → Exp “/” Exp Exp → “(” Exp “)”

binary expressions syntax

Σ: finite set of terminal symbols

N: finite set of non-terminal symbols

S∈N: start symbol

P⊆N×(N∪Σ)*: set of production rules

Formal Grammars 28

Exp ⇒

Exp + Exp ⇒

Exp + Exp * Exp ⇒

3 + Exp * Exp ⇒

3 + 4 * Exp ⇒

3 + 4 * 5

Exp → Exp “+” Exp ⇒

Exp → Exp “*” Exp ⇒

Exp → Num ⇒

Exp → Num ⇒

Exp → Num ⇒

binary expressions production

Formal Grammars 29

formal grammar G = (N, Σ, P, S)

nonterminal symbols N

terminal symbols Σ

production rules P ⊆ (N∪Σ)* N (N∪Σ)* × (N∪Σ)*

start symbol S∈N

Formal Grammars 29

formal grammar G = (N, Σ, P, S)

nonterminal symbols N

terminal symbols Σ

production rules P ⊆ (N∪Σ)* N (N∪Σ)* × (N∪Σ)*

start symbol S∈N

nonterminal symbol

Formal Grammars 29

formal grammar G = (N, Σ, P, S)

nonterminal symbols N

terminal symbols Σ

production rules P ⊆ (N∪Σ)* N (N∪Σ)* × (N∪Σ)*

start symbol S∈N

context

Formal Grammars 29

formal grammar G = (N, Σ, P, S)

nonterminal symbols N

terminal symbols Σ

production rules P ⊆ (N∪Σ)* N (N∪Σ)* × (N∪Σ)*

start symbol S∈N

replacement

Formal Grammars 29

formal grammar G = (N, Σ, P, S)

nonterminal symbols N

terminal symbols Σ

production rules P ⊆ (N∪Σ)* N (N∪Σ)* × (N∪Σ)*

start symbol S∈N

Formal Grammars 30

type-0, unrestricted: P ⊆ (N∪Σ)* N (N∪Σ)* × (N∪Σ)*

type-1, context-sensitive: (a A c, a b c)

type-2, context-free: P ⊆ N × (N∪Σ)*

type-3, regular: (A, x) or (A, xB)

Formal Grammars 31

formal grammars

context-sensitive

context-free

regular

Formal Grammars 32

formal grammar G

derivation relation ⇒G

formal language L(G) ⊆ Σ*

L(G) = {w∈Σ* | S ⇒G* w}

Formal Grammars 33

formal grammar G = (N, Σ, P, S)

derivation relation ⇒G ⊆ (N∪Σ)* × (N∪Σ)*

w ⇒G w’ ⇔

∃(p, q)∈P: ∃u,v∈(N∪Σ)*:

w=u p v ∧ w’=u q v

formal language L(G) ⊆ Σ*

L(G) = {w∈Σ* | S ⇒G* w}

Formal Grammars 34

formal languages

context-sensitive

context-free

regular

Formal Grammars 35

3 * +7 21

3 * +7 21

Exp ExpExp

Exp

Exp

parser

Derivation is about productivity. But what about parsing?

Formal Grammars 36

word problem

Formal Grammars 37

word problem χL: Σ*→ {0,1}

w → 1, if w∈L

w → 0, else

theoretical computer science decidability & complexity

Formal Grammars 37

word problem χL: Σ*→ {0,1}

w → 1, if w∈L

w → 0, else

decidability

type-0: semi-decidable

type-1, type-2, type-3: decidable

theoretical computer science decidability & complexity

Formal Grammars 37

word problem χL: Σ*→ {0,1}

w → 1, if w∈L

w → 0, else

decidability

type-0: semi-decidable

type-1, type-2, type-3: decidable

complexity

type-1: PSPACE-complete

type-2, type-3: P

theoretical computer science decidability & complexity

Formal Grammars 37

word problem χL: Σ*→ {0,1}

w → 1, if w∈L

w → 0, else

decidability

type-0: semi-decidable

type-1, type-2, type-3: decidable

complexity

type-1: PSPACE-complete

type-2, type-3: P

theoretical computer science decidability & complexity

PSPACE⊇NP⊇P

Formal Grammars 38

formal grammars

context-sensitive

context-free

regular

theoretical computer science decidability & complexity

Formal Grammars 38

formal grammars

context-sensitive

context-free

regular

theoretical computer science decidability & complexity

Formal Grammars 38

formal grammars

context-sensitive

context-free

regular

theoretical computer science decidability & complexity

Formal Grammars 39

Exp → Num Exp → Exp “+” Exp Exp → Exp “−” Exp Exp → Exp “*” Exp Exp → Exp “/” Exp Exp → “(” Exp “)”

context-free grammars production vs. reduction rules

Formal Grammars 39

Exp → Num Exp → Exp “+” Exp Exp → Exp “−” Exp Exp → Exp “*” Exp Exp → Exp “/” Exp Exp → “(” Exp “)”

context-free grammars production vs. reduction rules

productive form

Formal Grammars 39

Exp → Num Exp → Exp “+” Exp Exp → Exp “−” Exp Exp → Exp “*” Exp Exp → Exp “/” Exp Exp → “(” Exp “)”

Num → Exp Exp “+” Exp → Exp Exp “−” Exp → Exp Exp “*” Exp → Exp Exp “/” Exp → Exp “(” Exp “)” → Exp

context-free grammars production vs. reduction rules

productive form

Formal Grammars 39

Exp → Num Exp → Exp “+” Exp Exp → Exp “−” Exp Exp → Exp “*” Exp Exp → Exp “/” Exp Exp → “(” Exp “)”

Num → Exp Exp “+” Exp → Exp Exp “−” Exp → Exp Exp “*” Exp → Exp Exp “/” Exp → Exp “(” Exp “)” → Exp

context-free grammars production vs. reduction rules

productive form reductive form

Formal Grammars 40

3 + 4 * 5 ⇒

Exp + 4 * 5 ⇒

Exp + Exp * 5 ⇒

Exp + Exp * Exp ⇒

Exp + Exp ⇒

Exp

Num → Exp ⇒

Num → Exp ⇒

Num → Exp ⇒

Exp “*” Exp → Exp ⇒

Exp “+” Exp → Exp ⇒⇒

binary expressions reduction

Formal Grammars 41

3 * +7 21

3 * +7 21

Exp ExpExp

Exp

Exp

parser

The word problem is about membership. But what about structure?

Formal Grammars 42

syntax trees

Formal Grammars 43

Exp

Num

Exp

+Exp Exp

Exp

−Exp Exp

Exp

*Exp Exp

Exp

/Exp Exp

Exp

Exp( )

context-free grammars tree construction rules

Formal Grammars 44

binary expressions tree construction

3 + *4 5

Formal Grammars 44

binary expressions tree construction

Exp

3 + *4 5

Formal Grammars 44

binary expressions tree construction

Exp Exp

3 + *4 5

Formal Grammars 44

binary expressions tree construction

Exp Exp

3 + *4 5

Exp

Formal Grammars 44

binary expressions tree construction

Exp

Exp

Exp

3 + *4 5

Exp

Formal Grammars 44

binary expressions tree construction

Exp

Exp

Exp

3 + *4 5

Exp

Exp

Formal Grammars 45

binary expressions ambiguity

Exp

Exp

Exp

3 + *4 5

Exp

Exp

Exp

Exp

Exp

3 + *4 5

Exp

Exp

Formal Grammars 46

syntax trees

different trees for same sentence

derivations

different leftmost derivations for same sentence

different rightmost derivations for same sentence

NOT just different derivations for same sentence

context-free grammars ambiguity

Formal Grammars 47

parse trees

parent node: nonterminal symbol

child nodes: terminal symbols

abstract syntax trees (ASTs)

abstract over terminal symbols

convey information at parent nodes

abstract over injective production rules

syntax trees parse trees & abstract syntax trees

Formal Grammars 48

binary expressions parse tree & abstract syntax tree

Exp

Exp

Exp Exp

Exp

(3 + *4 5 )

Exp

Formal Grammars 48

binary expressions parse tree & abstract syntax tree

Const

Mul

Const

3 4 5

Const

Add

Exp

Exp

Exp Exp

Exp

(3 + *4 5 )

Exp

Formal Grammars 49

Except where otherwise noted, this work is licensed under

Recommended