SlideShare a Scribd company logo
Challenge the future
Delft
University of
Technology
Course IN4303 2013/14
Compiler Construction
Guido Wachsmuth
Declarative Semantics Definition
Term Rewriting
today’s lecture
Term Rewriting
Overview
manual implementation
• static analysis & error checking
• code generation
• semantic editor services
domain-specific language
• Stratego
• transform ASTs
• working on ATerms
• declarative style
2
Term Rewriting
overview
I
3
architecture
Term Rewriting
Modern Compilers in IDEs
4
Source
Code
architecture
Term Rewriting
Modern Compilers in IDEs
4
Source
Code
parse
architecture
Term Rewriting
Modern Compilers in IDEs
4
Source
Code
parse
check
architecture
Term Rewriting
Modern Compilers in IDEs
4
Source
Code
parse
check
architecture
Term Rewriting
Modern Compilers in IDEs
4
Source
Code
parse generate
Machine
Code
check
manual implementation
Term Rewriting
Traditional Compiler Compilers
5
Language
Implementation
compile
Compiler
compilation + compilation
Term Rewriting
Traditional Compiler Compilers
6
Language
Implementation
compile
Compiler
Language
Definition
compile
compilation + interpretation
Term Rewriting
Traditional Compiler Compilers
7
interpret
Interpreter
Language
Definition
compile
Language
Implementation
compilation + interpretation
Term Rewriting
Spoofax Language Workbench
8
interpret
Generic
Parser
Syntax
Definition
compile
Parse Table
manual implementation
Term Rewriting
Spoofax Language Workbench
Stratego
• declarative DSL
• domain: program transformation
• means to manipulate ASTs
• working on ATerms
• compiles to C or Java
Stratego in Spoofax
• static analysis & error checking
• code generation
• semantic editor services
9
concepts
Term Rewriting
Stratego
signatures
rewrite rules
• transform term to term
• left-hand side
• pattern matching & variable binding
• right-hand side
• pattern instantiation & variable substitution
rewrite strategies
• algorithm for applying rewrite rules
10
example
Term Rewriting
Stratego
module desugar
imports
include/Tiger
operators
strategies
	
desugar-all = innermost(desugar)
	
rules
desugar: IfThen(e1, e2) -> IfThenElse(e1, e2, NoVal())
11
Term Rewriting
signatures
II
12
context-free syntax
"-" Exp -> Exp {cons("Uminus")}
Exp "+" Exp -> Exp {cons("Plus")}
Exp "-" Exp -> Exp {cons("Minus")}
Exp "*" Exp -> Exp {cons("Times")}
Exp "/" Exp -> Exp {cons("Divide")}
	 	
Exp "=" Exp -> Exp {cons("Eq")}
Exp "<>" Exp -> Exp {cons("Neq")}
Exp ">" Exp -> Exp {cons("Gt")}
Exp "<" Exp -> Exp {cons("Lt")}
Exp ">=" Exp -> Exp {cons("Geq")}
Exp "<=" Exp -> Exp {cons("Leq")}
	 	
Exp "&" Exp -> Exp {cons("And")}
Exp "|" Exp -> Exp {cons("Or")}
Term Rewriting
Signatures
signature
constructors
Uminus : Exp -> Exp
Plus : Exp * Exp -> Exp
Minus : Exp * Exp -> Exp
Times : Exp * Exp -> Exp
Divide : Exp * Exp -> Exp
Eq : Exp * Exp -> Exp
Neq : Exp * Exp -> Exp
Gt : Exp * Exp -> Exp
Lt : Exp * Exp -> Exp
Geq : Exp * Exp -> Exp
Leq : Exp * Exp -> Exp
And : Exp * Exp -> Exp
Or : Exp * Exp -> Exp
13
signature
Term Rewriting
signature
constructors
Constructor : Cons -> Term
Application : Cons * List(Term) -> Term
List : List(Term) -> Term
Tuple : List(Term) -> Term
signature
constructors
Nil : -> List(a)
Cons : a * List(a) -> List(a)
Conc : List(a) * List(a) -> List(a)
14
ATerms in Stratego
Term Rewriting
rewrite rules
III
15
Term Rewriting
Desugaring
if x then
printint(x)
16
if x then
printint(x)
else
()
Term Rewriting
Desugaring
if x then
printint(x)
16
if x then
printint(x)
else
()
IfThen(
Var("x")
, Call(
"printint"
, [Var("x")]
)
)
IfThenElse(
Var("x")
, Call(
"printint"
, [Var("x")]
)
, NoVal()
)
desugar: IfThen(e1, e2) -> IfThenElse(e1, e2, NoVal())
Term Rewriting
Desugaring
if x then
printint(x)
16
if x then
printint(x)
else
()
IfThen(
Var("x")
, Call(
"printint"
, [Var("x")]
)
)
IfThenElse(
Var("x")
, Call(
"printint"
, [Var("x")]
)
, NoVal()
)
desugar: IfThen(e1, e2) -> IfThenElse(e1, e2, NoVal())
Term Rewriting
Desugaring
if x then
printint(x)
16
if x then
printint(x)
else
()
IfThen(
Var("x")
, Call(
"printint"
, [Var("x")]
)
)
IfThenElse(
Var("x")
, Call(
"printint"
, [Var("x")]
)
, NoVal()
)
pattern matching
desugar: IfThen(e1, e2) -> IfThenElse(e1, e2, NoVal())
Term Rewriting
Desugaring
if x then
printint(x)
16
if x then
printint(x)
else
()
IfThen(
Var("x")
, Call(
"printint"
, [Var("x")]
)
)
IfThenElse(
Var("x")
, Call(
"printint"
, [Var("x")]
)
, NoVal()
)
pattern matching
e1
e2
desugar: IfThen(e1, e2) -> IfThenElse(e1, e2, NoVal())
Term Rewriting
Desugaring
if x then
printint(x)
16
if x then
printint(x)
else
()
IfThen(
Var("x")
, Call(
"printint"
, [Var("x")]
)
)
IfThenElse(
Var("x")
, Call(
"printint"
, [Var("x")]
)
, NoVal()
)
pattern matching pattern instantiation
e1
e2
desugar: IfThen(e1, e2) -> IfThenElse(e1, e2, NoVal())
Term Rewriting
Desugaring
if x then
printint(x)
16
if x then
printint(x)
else
()
IfThen(
Var("x")
, Call(
"printint"
, [Var("x")]
)
)
IfThenElse(
Var("x")
, Call(
"printint"
, [Var("x")]
)
, NoVal()
)
pattern matching pattern instantiation
e1
e2
desugar: Uminus(e) 		 -> Bop(MINUS(), Int("0"), e)
	
desugar: Plus(e1, e2) -> Bop(PLUS(), e1, e2)
desugar: Minus(e1, e2) -> Bop(MINUS(), e1, e2)
desugar: Times(e1, e2) -> Bop(MUL(), e1, e2)
desugar: Divide(e1, e2) -> Bop(DIV(), e1, e2)
	
desugar: Eq(e1, e2) -> Rop(EQ(), e1, e2)
desugar: Neq(e1, e2) -> Rop(NE(), e1, e2)
desugar: Leq(e1, e2) -> Rop(LE(), e1, e2)
desugar: Lt(e1, e2) -> Rop(LT(), e1, e2)
desugar: Geq(e1, e2) -> Rop(LE(), e2, e1)
desugar: Gt(e1, e2) -> Rop(LT(), e2, e1)
desugar: And(e1, e2) -> IfThenElse(e1, e2, Int("0"))
desugar: Or(e1, e2) -> IfThenElse(e1, Int("1"), e2)
Term Rewriting
More Desugaring
signature constructors
PLUS: 	 BinOp
MINUS: 	BinOp
MUL: 	 BinOp
DIV: 	 BinOp
	
EQ: 	RelOp
NE: 	RelOp
LE: 	RelOp
LT: 	RelOp
	
Bop: BinOp * Expr * Expr -> Expr
Rop: RelOp * Expr * Expr -> Expr
17
Term Rewriting
Constant Folding
x := 21 + 21 + x
18
x := 42 + x
Term Rewriting
Constant Folding
x := 21 + 21 + x
18
x := 42 + x
Assign(
Var("x")
, Plus(
Plus(
Int("21")
, Int("21")
)
, Var("x")
)
)
Assign(
Var("x")
, Plus(
Int("42")
, Var("x")
)
)
eval: Bop(PLUS(), Int(i1), Int(i2)) -> Int(i3)
where <addS> (i1, i2) => i3
Term Rewriting
Constant Folding
x := 21 + 21 + x
18
x := 42 + x
Assign(
Var("x")
, Plus(
Plus(
Int("21")
, Int("21")
)
, Var("x")
)
)
Assign(
Var("x")
, Plus(
Int("42")
, Var("x")
)
)
eval: Bop(PLUS(), Int(i1), Int(i2)) -> Int(<addS> (i1, i2))
eval: Bop(MINUS(), Int(i1), Int(i2)) -> Int(<subtS> (i1, i2))
eval: Bop(MUL(), Int(i1), Int(i2)) -> Int(<mulS> (i1, i2))
eval: Bop(DIV(), Int(i1), Int(i2)) -> Int(<divS> (i1, i2))
	
eval: Rop(EQ(), Int(i), Int(i)) -> Int("1")
eval: Rop(EQ(), Int(i1), Int(i2)) -> Int("0") where not( <eq> (i1, i2) )
eval: Rop(NE(), Int(i), Int(i)) -> Int("0")
eval: Rop(NE(), Int(i1), Int(i2)) -> Int("1") where not( <eq> (i1, i2) )
	
eval: Rop(LT(), Int(i1), Int(i2)) -> Int("1") where <ltS> (i1, i2)
eval: Rop(LT(), Int(i1), Int(i2)) -> Int("0") where not( <ltS> (i1, i2) )
	
eval: Rop(LE(), Int(i1), Int(i2)) -> Int("1") where <leqS> (i1, i2)
eval: Rop(LE(), Int(i1), Int(i2)) -> Int("0") where not( <leqS> (i1, i2))
Term Rewriting
More Constant Folding
19
parameters
Term Rewriting
Rewrite Rules
f(x,y|a,b): lhs -> rhs
• strategy or rule parameters x,y
• term parameters a,b
• no matching
f(|a,b): lhs -> rhs
• optional strategy parameters
f(x,y): lhs -> rhs
• optional term parameters
f: lhs -> rhs
20
example: map
Term Rewriting
Rules with Parameters
21
[ 1
, 2
, 3
]
[ 2
, 3
, 4
]
map(inc)
example: map
Term Rewriting
Rules with Parameters
21
[ 1
, 2
, 3
]
[ 2
, 3
, 4
]
map(inc)
inc
1
2
3
2
3
4inc
inc
example: map
Term Rewriting
Rules with Parameters
map(s): [] -> []	
map(s): [x|xs] -> [<s> x | <map(s)> xs]
21
[ 1
, 2
, 3
]
[ 2
, 3
, 4
]
map(inc)
inc
1
2
3
2
3
4inc
inc
example: zip
Term Rewriting
Rules with Parameters
22
[ 1
, 2
, 3
]
[ (1,4)
, (2,5)
, (3,6)
]
[ 4
, 5
, 6
]zip
example: zip
Term Rewriting
Rules with Parameters
22
[ 1
, 2
, 3
]
[ (1,4)
, (2,5)
, (3,6)
]
[ 4
, 5
, 6
]zip
[ 1
, 2
, 3
]
[ 5
, 7
, 9
]
[ 4
, 5
, 6
]zip(add)
example: zip
Term Rewriting
Rules with Parameters
22
[ 1
, 2
, 3
]
[ (1,4)
, (2,5)
, (3,6)
]
[ 4
, 5
, 6
]zip
[ 1
, 2
, 3
]
[ 5
, 7
, 9
]
[ 4
, 5
, 6
]zip(add)
map(add)
example: zip
Term Rewriting
Rules with Parameters
zip(s): ([],[]) -> []	
zip(s): ([x|xs],[y|ys]) -> [<s> (x,y) | <zip(s)> (xs,ys)]
zip = zip(id)
22
[ 1
, 2
, 3
]
[ (1,4)
, (2,5)
, (3,6)
]
[ 4
, 5
, 6
]zip
[ 1
, 2
, 3
]
[ 5
, 7
, 9
]
[ 4
, 5
, 6
]zip(add)
map(add)
example: fold
Term Rewriting
Rules with Parameters
23
[1,2,3] foldr(!0,add) 6
example: fold
Term Rewriting
Rules with Parameters
23
[1,2,3] foldr(!0,add) 6
[]
0
[3]
3
[2,3]
56
[1,2,3]
example: fold
Term Rewriting
Rules with Parameters
foldr(s1,s2): [] -> <s1>	
foldr(s1,s2): [x|xs] -> <s2> (x,<foldr(s1,s2)> xs)
23
[1,2,3] foldr(!0,add) 6
[]
0
[3]
3
[2,3]
56
[1,2,3]
example: inverse
Term Rewriting
Rules with Parameters
24
[1,2,3] inverse(|[]) [3,2,1]
example: inverse
Term Rewriting
Rules with Parameters
24
[1,2,3] inverse(|[]) [3,2,1]
[2,3]
[1][]
[1,2,3] [3]
[2,1] [3,2,1]
[]
example: inverse
Term Rewriting
Rules with Parameters
inverse(|is): [] -> is	
inverse(|is): [x|xs] -> <inverse(|[x|is])> xs
24
[1,2,3] inverse(|[]) [3,2,1]
[2,3]
[1][]
[1,2,3] [3]
[2,1] [3,2,1]
[]
Term Rewriting 25
coffee break
Term Rewriting
rewrite strategies
IV
26
rules and strategies
Term Rewriting
Transformation Definitions
rewrite rules
• term to term
• left-hand side matching
• right-hand side instantiation
• conditional
• partial transformation
rewrite strategies
• rule selection
• algorithm
• composition of transformations
27
example
Term Rewriting
Stratego
module desugar
imports
include/Tiger
operators
strategies
	
desugar-all = innermost(desugar)
	
rules
desugar: IfThen(e1, e2) -> IfThenElse(e1, e2, NoVal())
28
example
Term Rewriting
Stratego
module eval
imports
include/Tiger
operators
desugar
strategies
eval-all = innermost(desugar + eval)
	
rules
eval: Bop(PLUS(),Int(i1),Int(i2)) -> Int(i3)
where <addS> (i1, i2) => i3
29
Term Rewriting
Strategy Combinators
identity
id
30
Term Rewriting
Strategy Combinators
identity
id
failure
fail
30
Term Rewriting
Strategy Combinators
identity
id
failure
fail
sequential composition
s1 ; s2
30
Term Rewriting
Strategy Combinators
identity
id
failure
fail
sequential composition
s1 ; s2
deterministic choice
s1 <+ s2
30
Term Rewriting
Strategy Combinators
identity
id
failure
fail
sequential composition
s1 ; s2
deterministic choice
s1 <+ s2
non-deterministic choice
s1 + s2
30
Term Rewriting
Strategy Combinators
identity
id
failure
fail
sequential composition
s1 ; s2
deterministic choice
s1 <+ s2
non-deterministic choice
s1 + s2
guarded choice
s1 < s2 + s3
30
variables
Term Rewriting
Strategy Combinators
pattern matching
?t
31
variables
Term Rewriting
Strategy Combinators
pattern matching
?t
pattern instantiation
!t
31
variables
Term Rewriting
Strategy Combinators
pattern matching
?t
pattern instantiation
!t
strategy application
<s> t ≣ !t ; s
31
variables
Term Rewriting
Strategy Combinators
pattern matching
?t
pattern instantiation
!t
strategy application
<s> t ≣ !t ; s
result matching
s => t ≣ s ; ?t
<s> t1 => t2
t2 := <s> t1
31
variables
Term Rewriting
Strategy Combinators
pattern matching
?t
pattern instantiation
!t
strategy application
<s> t ≣ !t ; s
result matching
s => t ≣ s ; ?t
<s> t1 => t2
t2 := <s> t1
variable scope
{x,y: s}
31
rules and strategies
Term Rewriting
Strategy Combinators
named rewrite rule
l: t1 -> t2 where s ≣ l = ?t1 ; s ; !t2
32
rules and strategies
Term Rewriting
Strategy Combinators
named rewrite rule
l: t1 -> t2 where s ≣ l = ?t1 ; s ; !t2
unscoped rewrite rule
(t1 -> t2 where s) ≣ ?t1 ; s ; !t2
32
rules and strategies
Term Rewriting
Strategy Combinators
named rewrite rule
l: t1 -> t2 where s ≣ l = ?t1 ; s ; !t2
unscoped rewrite rule
(t1 -> t2 where s) ≣ ?t1 ; s ; !t2
strategy definition
f(x,y|a,b) = s
32
examples
Term Rewriting
Strategy Combinators
try(s) = s <+ id
repeat(s) = try(s ; repeat(s))
33
examples
Term Rewriting
Strategy Combinators
try(s) = s <+ id
repeat(s) = try(s ; repeat(s))
topdown(s) = s ; all(topdown(s))
33
examples
Term Rewriting
Strategy Combinators
try(s) = s <+ id
repeat(s) = try(s ; repeat(s))
topdown(s) = s ; all(topdown(s))
alltd(s) = s <+ all(alltd(s))
33
examples
Term Rewriting
Strategy Combinators
try(s) = s <+ id
repeat(s) = try(s ; repeat(s))
topdown(s) = s ; all(topdown(s))
alltd(s) = s <+ all(alltd(s))
bottomup(s) = all(bottomup(s)) ; s
innermost(s) = bottomup(try(s ; innermost(s)))
oncetd(s) = s <+ one(oncetd(s))
contains(|t) = oncetd(?t)
33
examples
Term Rewriting
Strategy Combinators
try(s) = s <+ id
repeat(s) = try(s ; repeat(s))
topdown(s) = s ; all(topdown(s))
alltd(s) = s <+ all(alltd(s))
bottomup(s) = all(bottomup(s)) ; s
innermost(s) = bottomup(try(s ; innermost(s)))
oncetd(s) = s <+ one(oncetd(s))
contains(|t) = oncetd(?t)
33
examples
Term Rewriting
Strategy Combinators
try(s) = s <+ id
repeat(s) = try(s ; repeat(s))
topdown(s) = s ; all(topdown(s))
alltd(s) = s <+ all(alltd(s))
bottomup(s) = all(bottomup(s)) ; s
innermost(s) = bottomup(try(s ; innermost(s)))
oncetd(s) = s <+ one(oncetd(s))
contains(|t) = oncetd(?t)
33
examples
Term Rewriting
Strategy Combinators
try(s) = s <+ id
repeat(s) = try(s ; repeat(s))
topdown(s) = s ; all(topdown(s))
alltd(s) = s <+ all(alltd(s))
bottomup(s) = all(bottomup(s)) ; s
innermost(s) = bottomup(try(s ; innermost(s)))
oncetd(s) = s <+ one(oncetd(s))
contains(|t) = oncetd(?t)
33
examples
Term Rewriting
Strategy Combinators
try(s) = s <+ id
repeat(s) = try(s ; repeat(s))
topdown(s) = s ; all(topdown(s))
alltd(s) = s <+ all(alltd(s))
bottomup(s) = all(bottomup(s)) ; s
innermost(s) = bottomup(try(s ; innermost(s)))
oncetd(s) = s <+ one(oncetd(s))
contains(|t) = oncetd(?t)
33
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
topdown(s) = s ; all(topdown(s))
topdown(switch)
34
Const
Mul
Const
3 4 5
Const
Add
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
topdown(s) = s ; all(topdown(s))
topdown(switch)
34
Const
Mul
Const
3 4 5
Const
Add1
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
topdown(s) = s ; all(topdown(s))
topdown(switch)
35
Mul
Const
3
Const
4 5
Const
Add1
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
topdown(s) = s ; all(topdown(s))
topdown(switch)
35
Mul
Const
3
Const
4 5
Const
Add1
2
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
topdown(s) = s ; all(topdown(s))
topdown(switch)
36
Mul
Const
3
Const
5 4
Const
Add1
2
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
topdown(s) = s ; all(topdown(s))
topdown(switch)
36
Mul
Const
3
Const
5 4
Const
Add1
2
3
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
topdown(s) = s ; all(topdown(s))
topdown(try(switch))
37
Const
Mul
Const
3 4 5
Const
Add
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
topdown(s) = s ; all(topdown(s))
topdown(try(switch))
37
Const
Mul
Const
3 4 5
Const
Add1
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
topdown(s) = s ; all(topdown(s))
topdown(try(switch))
38
Mul
Const
3
Const
4 5
Const
Add1
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
topdown(s) = s ; all(topdown(s))
topdown(try(switch))
38
Mul
Const
3
Const
4 5
Const
Add1
2
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
topdown(s) = s ; all(topdown(s))
topdown(try(switch))
39
Mul
Const
3
Const
5 4
Const
Add1
2
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
topdown(s) = s ; all(topdown(s))
topdown(try(switch))
39
Mul
Const
3
Const
5 4
Const
Add1
2
3
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
topdown(s) = s ; all(topdown(s))
topdown(try(switch))
39
Mul
Const
3
Const
5 4
Const
Add1
2
3
4
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
topdown(s) = s ; all(topdown(s))
topdown(try(switch))
39
Mul
Const
3
Const
5 4
Const
Add1
2
3
4
5
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
topdown(s) = s ; all(topdown(s))
topdown(try(switch))
39
Mul
Const
3
Const
5 4
Const
Add1
2
3
4
5
6
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
topdown(s) = s ; all(topdown(s))
topdown(try(switch))
39
Mul
Const
3
Const
5 4
Const
Add1
2
3
4
5
6
7
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
topdown(s) = s ; all(topdown(s))
topdown(try(switch))
39
Mul
Const
3
Const
5 4
Const
Add1
2
3
4
5
6
7
8
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
alltd(s) = s <+ all(alltd(s))
alltd(switch)
40
Const
Mul
Const
3 4 5
Const
Add
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
alltd(s) = s <+ all(alltd(s))
alltd(switch)
40
Const
Mul
Const
3 4 5
Const
Add1
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
alltd(s) = s <+ all(alltd(s))
alltd(switch)
41
Mul
Const
3
Const
4 5
Const
Add1
example
Term Rewriting
Stratego
switch: Mul(e1, e2) -> Mul(e2, e1)
alltd(s) = s <+ all(alltd(s))
alltd(switch)
42
Const
Mul
Const
3 4 5
Const
Add
example
Term Rewriting
Stratego
switch: Mul(e1, e2) -> Mul(e2, e1)
alltd(s) = s <+ all(alltd(s))
alltd(switch)
42
Const
Mul
Const
3 4 5
Const
Add1
example
Term Rewriting
Stratego
switch: Mul(e1, e2) -> Mul(e2, e1)
alltd(s) = s <+ all(alltd(s))
alltd(switch)
42
Const
Mul
Const
3 4 5
Const
Add1
2
example
Term Rewriting
Stratego
switch: Mul(e1, e2) -> Mul(e2, e1)
alltd(s) = s <+ all(alltd(s))
alltd(switch)
42
Const
Mul
Const
3 4 5
Const
Add1
2
3
example
Term Rewriting
Stratego
switch: Mul(e1, e2) -> Mul(e2, e1)
alltd(s) = s <+ all(alltd(s))
alltd(switch)
42
Const
Mul
Const
3 4 5
Const
Add1
2
3
4
example
Term Rewriting
Stratego
switch: Mul(e1, e2) -> Mul(e2, e1)
alltd(s) = s <+ all(alltd(s))
alltd(switch)
43
Const
Mul
Const
3 5 4
Const
Add1
2
3
4
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
bottomup(s) = all(bottomup(s)) ; s
bottomup(switch)
44
Const
Mul
Const
3 4 5
Const
Add
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
bottomup(s) = all(bottomup(s)) ; s
bottomup(switch)
44
Const
Mul
Const
3 4 5
Const
Add1
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
bottomup(s) = all(bottomup(s)) ; s
bottomup(switch)
44
Const
Mul
Const
3 4 5
Const
Add1
2
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
bottomup(s) = all(bottomup(s)) ; s
bottomup(switch)
44
Const
Mul
Const
3 4 5
Const
Add1
2
3
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
bottomup(s) = all(bottomup(s)) ; s
bottomup(try(switch))
45
Const
Mul
Const
3 4 5
Const
Add
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
bottomup(s) = all(bottomup(s)) ; s
bottomup(try(switch))
45
Const
Mul
Const
3 4 5
Const
Add1
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
bottomup(s) = all(bottomup(s)) ; s
bottomup(try(switch))
45
Const
Mul
Const
3 4 5
Const
Add1
2
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
bottomup(s) = all(bottomup(s)) ; s
bottomup(try(switch))
45
Const
Mul
Const
3 4 5
Const
Add1
2
3
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
bottomup(s) = all(bottomup(s)) ; s
bottomup(try(switch))
45
Const
Mul
Const
3 4 5
Const
Add1
2
3
4
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
bottomup(s) = all(bottomup(s)) ; s
bottomup(try(switch))
45
Const
Mul
Const
3 4 5
Const
Add1
2
3
4
5
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
bottomup(s) = all(bottomup(s)) ; s
bottomup(try(switch))
45
Const
Mul
Const
3 4 5
Const
Add1
2
3
4
5
6
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
bottomup(s) = all(bottomup(s)) ; s
bottomup(try(switch))
45
Const
Mul
Const
3 4 5
Const
Add1
2
3
4
5
6
7
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
bottomup(s) = all(bottomup(s)) ; s
bottomup(try(switch))
45
Const
Mul
Const
3 4 5
Const
Add1
2
3
4
5
6
7
8
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
bottomup(s) = all(bottomup(s)) ; s
bottomup(try(switch))
46
Const
Mul
Const
3 4 5
Const
Add1
2
3
4
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
bottomup(s) = all(bottomup(s)) ; s
bottomup(try(switch))
47
Const
Mul
Const
3 5 4
Const
Add1
2
3
4
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
bottomup(s) = all(bottomup(s)) ; s
bottomup(try(switch))
48
Const
Mul
Const
3 5 4
Const
Add1
Mul
Const
3
Const
5 4
Const
Add
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
bottomup(s) = all(bottomup(s)) ; s
bottomup(try(switch))
49
1
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
innermost(s) = bottomup(try(s ; innermost(s)))
innermost(switch)
50
Const
Mul
Const
3 4 5
Const
Add
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
innermost(s) = bottomup(try(s ; innermost(s)))
innermost(switch)
50
Const
Mul
Const
3 4 5
Const
Add1
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
innermost(s) = bottomup(try(s ; innermost(s)))
innermost(switch)
50
Const
Mul
Const
3 4 5
Const
Add1
2
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
innermost(s) = bottomup(try(s ; innermost(s)))
innermost(switch)
50
Const
Mul
Const
3 4 5
Const
Add1
2
3
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
innermost(s) = bottomup(try(s ; innermost(s)))
innermost(switch)
50
Const
Mul
Const
3 4 5
Const
Add1
2
3
4
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
innermost(s) = bottomup(try(s ; innermost(s)))
innermost(switch)
50
Const
Mul
Const
3 4 5
Const
Add1
2
3
4
5
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
innermost(s) = bottomup(try(s ; innermost(s)))
innermost(switch)
50
Const
Mul
Const
3 4 5
Const
Add1
2
3
4
5
6
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
innermost(s) = bottomup(try(s ; innermost(s)))
innermost(switch)
50
Const
Mul
Const
3 4 5
Const
Add1
2
3
4
5
6
7
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
innermost(s) = bottomup(try(s ; innermost(s)))
innermost(switch)
50
Const
Mul
Const
3 4 5
Const
Add1
2
3
4
5
6
7
8
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
innermost(s) = bottomup(try(s ; innermost(s)))
innermost(switch)
51
Const
Mul
Const
3 4 5
Const
Add1
2
3
4
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
innermost(s) = bottomup(try(s ; innermost(s)))
innermost(switch)
52
Const
Mul
Const
3 5 4
Const
Add1
2
3
4
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
innermost(s) = bottomup(try(s ; innermost(s)))
innermost(switch)
52
Const
Mul
Const
3 5 4
Const
Add1
2
3
4
9
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
innermost(s) = bottomup(try(s ; innermost(s)))
innermost(switch)
52
Const
Mul
Const
3 5 4
Const
Add1
2
3
4
9
10
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
innermost(s) = bottomup(try(s ; innermost(s)))
innermost(switch)
52
Const
Mul
Const
3 5 4
Const
Add1
2
3
4
9
10
11
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
innermost(s) = bottomup(try(s ; innermost(s)))
innermost(switch)
52
Const
Mul
Const
3 5 4
Const
Add1
2
3
4
9
10
11
12
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
innermost(s) = bottomup(try(s ; innermost(s)))
innermost(switch)
53
Const
Mul
Const
3 5 4
Const
Add1
2
3
4
example
Term Rewriting
Stratego
switch: Add(e1, e2) -> Add(e2, e1)
switch: Mul(e1, e2) -> Mul(e2, e1)
innermost(s) = bottomup(try(s ; innermost(s)))
innermost(switch)
54
Const
Mul
Const
3 4 5
Const
Add1
2
3
4
Term Rewriting
summary
V
55
lessons learned
Term Rewriting
Summary
56
lessons learned
Term Rewriting
Summary
How do you define AST transformations in Stratego?
• signatures
• rewrite rules
• rewrite strategies
• strategy combinators
56
lessons learned
Term Rewriting
Summary
How do you define AST transformations in Stratego?
• signatures
• rewrite rules
• rewrite strategies
• strategy combinators
What kind of strategies can you find in the Stratego library?
• arithmetics
• map, zip, foldr
• generic traversals
56
learn more
Term Rewriting
Literature
57
learn more
Term Rewriting
Literature
Spoofax
Lennart C. L. Kats, Eelco Visser: The Spoofax Language Workbench.
Rules for Declarative Specification of Languages and IDEs. OOPSLA
2010
http://www.spoofax.org
57
learn more
Term Rewriting
Literature
Spoofax
Lennart C. L. Kats, Eelco Visser: The Spoofax Language Workbench.
Rules for Declarative Specification of Languages and IDEs. OOPSLA
2010
http://www.spoofax.org
Stratego
Martin Bravenboer, Karl Trygve Kalleberg, Rob Vermaas, Eelco Visser:
Stratego/XT 0.17. A language and toolset for program transformation.
Science of Computer Programming, 72(1-2), 2008.
http://www.strategoxt.org
57
coming next
Term Rewriting
Outlook
declarative semantics definition
• Lecture 5: Static Analysis and Error Checking
• Lecture 6: Code Generation
Assignment Oct 2: MiniJava grammar in SDF
• submit on Blackboard
Lab Oct 03
• syntactic editor services
• pretty-printer for MiniJava
58
Term Rewriting 59
attribution & copyrights
Term Rewriting
Pictures
Slides 1, 9, 10, 20, 27: Stratego by Kendrick Arnett, some rights reserved
Slides 23-26, 28, 31, 37-39, 41-43: PICOL icons by Melih Bilgil, some rights reserved
Slide 14: Thesaurus by Enoch Lau, some rights reserved
Slide 21: Google Maps Street View Camera by Ian Britton, some rights reserved
Slide 22: Zipper by Rabensteiner, some rights reserved
Slide 23: Fold by Kim Piper Werker, some rights reserved
Slide 24: Inverse by lanchongzi, some rights reserved
Slide 25: Maxwell's by Dominica Williamson, some rights reserved
Slide 58: Reichstag by Wolfgang Staudt, some rights reserved
60

More Related Content

PDF
Term Rewriting
PDF
Introduction - Imperative and Object-Oriented Languages
PDF
Declarative Semantics Definition - Static Analysis and Error Checking
PDF
Static Analysis
PDF
Pure and Declarative Syntax Definition: Paradise Lost and Regained
PDF
Static name resolution
PDF
Declarative Syntax Definition - Grammars and Trees
PDF
Lexical Analysis
Term Rewriting
Introduction - Imperative and Object-Oriented Languages
Declarative Semantics Definition - Static Analysis and Error Checking
Static Analysis
Pure and Declarative Syntax Definition: Paradise Lost and Regained
Static name resolution
Declarative Syntax Definition - Grammars and Trees
Lexical Analysis

What's hot (20)

PDF
Syntax Definition
PDF
Dynamic Semantics
PDF
Syntax Definition
PDF
Formal Grammars
PDF
Declare Your Language: Syntactic (Editor) Services
PDF
LL Parsing
PDF
Compiler Components and their Generators - Traditional Parsing Algorithms
PDF
Declare Your Language: Syntax Definition
KEY
Compiler Components and their Generators - Lexical Analysis
PDF
Declare Your Language: Type Checking
PDF
Declare Your Language: Transformation by Strategic Term Rewriting
PDF
Declare Your Language: Name Resolution
PDF
Compiler Construction | Lecture 8 | Type Constraints
PDF
Compiler Construction | Lecture 5 | Transformation by Term Rewriting
PDF
CS4200 2019 | Lecture 5 | Transformation by Term Rewriting
PDF
Programming languages
PDF
Compiler Construction | Lecture 9 | Constraint Resolution
PDF
Dynamic Semantics Specification and Interpreter Generation
PDF
Ch04
PDF
Declarative Type System Specification with Statix
Syntax Definition
Dynamic Semantics
Syntax Definition
Formal Grammars
Declare Your Language: Syntactic (Editor) Services
LL Parsing
Compiler Components and their Generators - Traditional Parsing Algorithms
Declare Your Language: Syntax Definition
Compiler Components and their Generators - Lexical Analysis
Declare Your Language: Type Checking
Declare Your Language: Transformation by Strategic Term Rewriting
Declare Your Language: Name Resolution
Compiler Construction | Lecture 8 | Type Constraints
Compiler Construction | Lecture 5 | Transformation by Term Rewriting
CS4200 2019 | Lecture 5 | Transformation by Term Rewriting
Programming languages
Compiler Construction | Lecture 9 | Constraint Resolution
Dynamic Semantics Specification and Interpreter Generation
Ch04
Declarative Type System Specification with Statix
Ad

Viewers also liked (16)

PDF
Declarative Semantics Definition - Code Generation
KEY
Declarative Syntax Definition - Pretty Printing
KEY
Compiling Imperative and Object-Oriented Languages - Activation Records
KEY
Compiling Imperative and Object-Oriented Languages - Dataflow Analysis
PDF
Domain-Specific Type Systems
KEY
Compiling Imperative and Object-Oriented Languages - Register Allocation
PDF
K to 12 TLE Curriculum Guide for Automotive
PDF
Compiler Components and their Generators - LR Parsing
KEY
Compiling Imperative and Object-Oriented Languages - Garbage Collection
PDF
Language
PPT
Definition Of Terms
PDF
K to 12 automotive teachers guide
PDF
K to 12 Automotive Learning Module
PPTX
Beginners' Guide to Powerpoint
PPSX
Research or Proposal Writing - DEFINITION OF TERMS
PDF
K to 12 TLE Curriculum Guide
Declarative Semantics Definition - Code Generation
Declarative Syntax Definition - Pretty Printing
Compiling Imperative and Object-Oriented Languages - Activation Records
Compiling Imperative and Object-Oriented Languages - Dataflow Analysis
Domain-Specific Type Systems
Compiling Imperative and Object-Oriented Languages - Register Allocation
K to 12 TLE Curriculum Guide for Automotive
Compiler Components and their Generators - LR Parsing
Compiling Imperative and Object-Oriented Languages - Garbage Collection
Language
Definition Of Terms
K to 12 automotive teachers guide
K to 12 Automotive Learning Module
Beginners' Guide to Powerpoint
Research or Proposal Writing - DEFINITION OF TERMS
K to 12 TLE Curriculum Guide
Ad

Similar to Declarative Semantics Definition - Term Rewriting (20)

PPT
Lex (lexical analyzer)
PPTX
R Language Introduction
PDF
CS4200 2019 | Lecture 4 | Syntactic Services
PPT
Chapter Eight(3)
PPT
Interm codegen
PPT
LEX lexical analyzer for compiler theory.ppt
PDF
Rcpp: Seemless R and C++
PDF
Design Patterns - Compiler Case Study - Hands-on Examples
PDF
Rcpp: Seemless R and C++
PPTX
HDL17_MIPS CPU Design using Verilog.pptx
PDF
ANSI C REFERENCE CARD
PDF
Compiler Construction | Lecture 14 | Interpreters
ODP
Scala as a Declarative Language
PPT
Profiling and optimization
PDF
[FT-11][suhorng] “Poor Man's” Undergraduate Compilers
PPTX
A Replay Approach to Software Validation
PPTX
Learning C++ - Introduction to c++ programming 1
PDF
Data-Oriented Programming with Clojure and Jackdaw (Charles Reese, Funding Ci...
PDF
cel shading as PDF and Python description
PDF
Faster Python, FOSDEM
Lex (lexical analyzer)
R Language Introduction
CS4200 2019 | Lecture 4 | Syntactic Services
Chapter Eight(3)
Interm codegen
LEX lexical analyzer for compiler theory.ppt
Rcpp: Seemless R and C++
Design Patterns - Compiler Case Study - Hands-on Examples
Rcpp: Seemless R and C++
HDL17_MIPS CPU Design using Verilog.pptx
ANSI C REFERENCE CARD
Compiler Construction | Lecture 14 | Interpreters
Scala as a Declarative Language
Profiling and optimization
[FT-11][suhorng] “Poor Man's” Undergraduate Compilers
A Replay Approach to Software Validation
Learning C++ - Introduction to c++ programming 1
Data-Oriented Programming with Clojure and Jackdaw (Charles Reese, Funding Ci...
cel shading as PDF and Python description
Faster Python, FOSDEM

Recently uploaded (20)

PPTX
Lesson notes of climatology university.
PDF
BÀI TẬP BỔ TRỢ 4 KỸ NĂNG TIẾNG ANH 9 GLOBAL SUCCESS - CẢ NĂM - BÁM SÁT FORM Đ...
PDF
TR - Agricultural Crops Production NC III.pdf
PPTX
1st Inaugural Professorial Lecture held on 19th February 2020 (Governance and...
PPTX
GDM (1) (1).pptx small presentation for students
PDF
RMMM.pdf make it easy to upload and study
PDF
O5-L3 Freight Transport Ops (International) V1.pdf
PPTX
Institutional Correction lecture only . . .
PDF
Abdominal Access Techniques with Prof. Dr. R K Mishra
PDF
STATICS OF THE RIGID BODIES Hibbelers.pdf
PPTX
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
PDF
Microbial disease of the cardiovascular and lymphatic systems
PDF
01-Introduction-to-Information-Management.pdf
PDF
Black Hat USA 2025 - Micro ICS Summit - ICS/OT Threat Landscape
PDF
Insiders guide to clinical Medicine.pdf
PDF
Complications of Minimal Access Surgery at WLH
PDF
FourierSeries-QuestionsWithAnswers(Part-A).pdf
PDF
grade 11-chemistry_fetena_net_5883.pdf teacher guide for all student
PPTX
Renaissance Architecture: A Journey from Faith to Humanism
PPTX
Introduction_to_Human_Anatomy_and_Physiology_for_B.Pharm.pptx
Lesson notes of climatology university.
BÀI TẬP BỔ TRỢ 4 KỸ NĂNG TIẾNG ANH 9 GLOBAL SUCCESS - CẢ NĂM - BÁM SÁT FORM Đ...
TR - Agricultural Crops Production NC III.pdf
1st Inaugural Professorial Lecture held on 19th February 2020 (Governance and...
GDM (1) (1).pptx small presentation for students
RMMM.pdf make it easy to upload and study
O5-L3 Freight Transport Ops (International) V1.pdf
Institutional Correction lecture only . . .
Abdominal Access Techniques with Prof. Dr. R K Mishra
STATICS OF THE RIGID BODIES Hibbelers.pdf
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
Microbial disease of the cardiovascular and lymphatic systems
01-Introduction-to-Information-Management.pdf
Black Hat USA 2025 - Micro ICS Summit - ICS/OT Threat Landscape
Insiders guide to clinical Medicine.pdf
Complications of Minimal Access Surgery at WLH
FourierSeries-QuestionsWithAnswers(Part-A).pdf
grade 11-chemistry_fetena_net_5883.pdf teacher guide for all student
Renaissance Architecture: A Journey from Faith to Humanism
Introduction_to_Human_Anatomy_and_Physiology_for_B.Pharm.pptx

Declarative Semantics Definition - Term Rewriting

Editor's Notes