Upload
eelco-visser
View
60
Download
0
Embed Size (px)
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
Formal Grammars 50
attribution
slide title author license
1 The Pine, Saint Tropez Paul Signac public domain
2, 3, 35, 41 PICOL icons Melih Bilgil CC BY 3.0
9 Writing Caitlin Regan CC BY 2.0
10 Latin Grammar Anthony Nelzin
13, 15, 29-34, 38 Noam Chomsky Fellowsisters CC BY-NC-SA 2.0