declarative semantics definition - term rewriting
DESCRIPTION
Presentation slides for lecture 6 of course IN4303 on Compiler Construction at TU Delft.TRANSCRIPT
![Page 1: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/1.jpg)
Challenge the future
DelftUniversity ofTechnology
Course IN4303 2013/14Compiler Construction
Guido Wachsmuth
Declarative Semantics DefinitionTerm Rewriting
![Page 2: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/2.jpg)
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
![Page 3: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/3.jpg)
Term Rewriting
overview
I
3
![Page 4: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/4.jpg)
architecture
Term Rewriting
Modern Compilers in IDEs
4
SourceCode
![Page 5: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/5.jpg)
architecture
Term Rewriting
Modern Compilers in IDEs
4
SourceCode
parse
![Page 6: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/6.jpg)
architecture
Term Rewriting
Modern Compilers in IDEs
4
SourceCode
parse
check
![Page 7: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/7.jpg)
architecture
Term Rewriting
Modern Compilers in IDEs
4
SourceCode
parse
check
![Page 8: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/8.jpg)
architecture
Term Rewriting
Modern Compilers in IDEs
4
SourceCode
parse generate
MachineCode
check
![Page 9: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/9.jpg)
manual implementation
Term Rewriting
Traditional Compiler Compilers
5
LanguageImplementation
compile
Compiler
![Page 10: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/10.jpg)
compilation + compilation
Term Rewriting
Traditional Compiler Compilers
6
LanguageImplementation
compile
CompilerLanguageDefinition
compile
![Page 11: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/11.jpg)
compilation + interpretation
Term Rewriting
Traditional Compiler Compilers
7
interpret
InterpreterLanguageDefinition
compile
LanguageImplementation
![Page 12: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/12.jpg)
compilation + interpretation
Term Rewriting
Spoofax Language Workbench
8
interpret
GenericParser
SyntaxDefinition
compile
Parse Table
![Page 13: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/13.jpg)
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
![Page 14: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/14.jpg)
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
![Page 15: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/15.jpg)
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
![Page 16: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/16.jpg)
Term Rewriting
signatures
II
12
![Page 17: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/17.jpg)
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
![Page 18: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/18.jpg)
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
![Page 19: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/19.jpg)
Term Rewriting
rewrite rules
III
15
![Page 20: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/20.jpg)
Term Rewriting
Desugaring
if x then printint(x)
16
if x then printint(x) else ()
![Page 21: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/21.jpg)
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())
![Page 22: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/22.jpg)
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())
![Page 23: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/23.jpg)
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
![Page 24: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/24.jpg)
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
![Page 25: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/25.jpg)
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
![Page 26: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/26.jpg)
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
![Page 27: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/27.jpg)
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
![Page 28: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/28.jpg)
Term Rewriting
Constant Folding
x := 21 + 21 + x
18
x := 42 + x
![Page 29: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/29.jpg)
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") ))
![Page 30: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/30.jpg)
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") ))
![Page 31: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/31.jpg)
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
![Page 32: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/32.jpg)
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
![Page 33: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/33.jpg)
example: map
Term Rewriting
Rules with Parameters
21
[ 1, 2, 3]
[ 2, 3, 4]
map(inc)
![Page 34: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/34.jpg)
example: map
Term Rewriting
Rules with Parameters
21
[ 1, 2, 3]
[ 2, 3, 4]
map(inc)
inc
1
2
3
2
3
4inc
inc
![Page 35: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/35.jpg)
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
![Page 36: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/36.jpg)
example: zip
Term Rewriting
Rules with Parameters
22
[ 1, 2, 3]
[ (1,4), (2,5), (3,6)]
[ 4, 5, 6]zip
![Page 37: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/37.jpg)
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)
![Page 38: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/38.jpg)
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)
![Page 39: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/39.jpg)
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)
![Page 40: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/40.jpg)
example: fold
Term Rewriting
Rules with Parameters
23
[1,2,3] foldr(!0,add) 6
![Page 41: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/41.jpg)
example: fold
Term Rewriting
Rules with Parameters
23
[1,2,3] foldr(!0,add) 6
[]
0
[3]
3
[2,3]
56
[1,2,3]
![Page 42: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/42.jpg)
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]
![Page 43: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/43.jpg)
example: inverse
Term Rewriting
Rules with Parameters
24
[1,2,3] inverse(|[]) [3,2,1]
![Page 44: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/44.jpg)
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]
[]
![Page 45: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/45.jpg)
example: inverse
Term Rewriting
Rules with Parameters
inverse(|is): [] -> isinverse(|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]
[]
![Page 46: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/46.jpg)
Term Rewriting 25
coffee break
![Page 47: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/47.jpg)
Term Rewriting
rewrite strategies
IV
26
![Page 48: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/48.jpg)
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
![Page 49: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/49.jpg)
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
![Page 50: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/50.jpg)
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
![Page 51: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/51.jpg)
Term Rewriting
Strategy Combinators
identity
id
30
![Page 52: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/52.jpg)
Term Rewriting
Strategy Combinators
identity
id
failure
fail
30
![Page 53: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/53.jpg)
Term Rewriting
Strategy Combinators
identity
id
failure
fail
sequential composition
s1 ; s2
30
![Page 54: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/54.jpg)
Term Rewriting
Strategy Combinators
identity
id
failure
fail
sequential composition
s1 ; s2
deterministic choice
s1 <+ s2
30
![Page 55: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/55.jpg)
Term Rewriting
Strategy Combinators
identity
id
failure
fail
sequential composition
s1 ; s2
deterministic choice
s1 <+ s2
non-deterministic choice
s1 + s2
30
![Page 56: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/56.jpg)
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
![Page 57: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/57.jpg)
variables
Term Rewriting
Strategy Combinators
pattern matching
?t
31
![Page 58: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/58.jpg)
variables
Term Rewriting
Strategy Combinators
pattern matching
?t
pattern instantiation
!t
31
![Page 59: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/59.jpg)
variables
Term Rewriting
Strategy Combinators
pattern matching
?t
pattern instantiation
!t
strategy application
<s> t ≣ !t ; s
31
![Page 60: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/60.jpg)
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 => t2t2 := <s> t1
31
![Page 61: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/61.jpg)
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 => t2t2 := <s> t1
variable scope
{x,y: s}
31
![Page 62: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/62.jpg)
rules and strategies
Term Rewriting
Strategy Combinators
named rewrite rule
l: t1 -> t2 where s ≣ l = ?t1 ; s ; !t2
32
![Page 63: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/63.jpg)
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
![Page 64: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/64.jpg)
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
![Page 65: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/65.jpg)
examples
Term Rewriting
Strategy Combinators
try(s) = s <+ id
repeat(s) = try(s ; repeat(s))
33
![Page 66: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/66.jpg)
examples
Term Rewriting
Strategy Combinators
try(s) = s <+ id
repeat(s) = try(s ; repeat(s))
topdown(s) = s ; all(topdown(s))
33
![Page 67: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/67.jpg)
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
![Page 68: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/68.jpg)
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
![Page 69: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/69.jpg)
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
![Page 70: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/70.jpg)
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
![Page 71: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/71.jpg)
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
![Page 72: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/72.jpg)
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
![Page 73: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/73.jpg)
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
![Page 74: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/74.jpg)
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
![Page 75: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/75.jpg)
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
![Page 76: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/76.jpg)
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
![Page 77: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/77.jpg)
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
![Page 78: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/78.jpg)
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
![Page 79: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/79.jpg)
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
![Page 80: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/80.jpg)
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
![Page 81: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/81.jpg)
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
![Page 82: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/82.jpg)
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
![Page 83: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/83.jpg)
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
![Page 84: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/84.jpg)
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
![Page 85: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/85.jpg)
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
![Page 86: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/86.jpg)
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
![Page 87: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/87.jpg)
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
![Page 88: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/88.jpg)
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
![Page 89: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/89.jpg)
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
![Page 90: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/90.jpg)
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
![Page 91: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/91.jpg)
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
![Page 92: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/92.jpg)
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
![Page 93: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/93.jpg)
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
![Page 94: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/94.jpg)
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
![Page 95: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/95.jpg)
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
![Page 96: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/96.jpg)
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
![Page 97: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/97.jpg)
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
![Page 98: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/98.jpg)
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
![Page 99: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/99.jpg)
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
![Page 100: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/100.jpg)
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
![Page 101: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/101.jpg)
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
![Page 102: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/102.jpg)
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
![Page 103: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/103.jpg)
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
![Page 104: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/104.jpg)
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
![Page 105: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/105.jpg)
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
![Page 106: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/106.jpg)
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
![Page 107: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/107.jpg)
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
![Page 108: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/108.jpg)
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
![Page 109: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/109.jpg)
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
![Page 110: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/110.jpg)
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
![Page 111: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/111.jpg)
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
![Page 112: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/112.jpg)
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
![Page 113: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/113.jpg)
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
![Page 114: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/114.jpg)
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
![Page 115: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/115.jpg)
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
![Page 116: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/116.jpg)
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
![Page 117: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/117.jpg)
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
![Page 118: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/118.jpg)
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
![Page 119: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/119.jpg)
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
![Page 120: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/120.jpg)
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
![Page 121: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/121.jpg)
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
![Page 122: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/122.jpg)
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
![Page 123: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/123.jpg)
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
![Page 124: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/124.jpg)
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
![Page 125: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/125.jpg)
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
![Page 126: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/126.jpg)
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
![Page 127: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/127.jpg)
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
![Page 128: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/128.jpg)
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
![Page 129: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/129.jpg)
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
![Page 130: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/130.jpg)
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
![Page 131: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/131.jpg)
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
![Page 132: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/132.jpg)
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
![Page 133: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/133.jpg)
Term Rewriting
summary
V
55
![Page 134: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/134.jpg)
lessons learned
Term Rewriting
Summary
56
![Page 135: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/135.jpg)
lessons learned
Term Rewriting
Summary
How do you define AST transformations in Stratego?
• signatures
• rewrite rules
• rewrite strategies
• strategy combinators
56
![Page 136: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/136.jpg)
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
![Page 137: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/137.jpg)
learn more
Term Rewriting
Literature
57
![Page 138: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/138.jpg)
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
![Page 139: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/139.jpg)
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
![Page 140: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/140.jpg)
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
![Page 141: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/141.jpg)
Term Rewriting 59
![Page 142: Declarative Semantics Definition - Term Rewriting](https://reader034.vdocuments.net/reader034/viewer/2022042606/547d34ecb479599d508b48cd/html5/thumbnails/142.jpg)
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