bootstrapping meta-languages of language workbenches
TRANSCRIPT
Bootstrapping Meta-Languages of
Language WorkbenchesGabriël Konat
Joint work with: Sebastian Erdweg, Eelco Visser
2
Tools and environment to develop languages
3
Spoofax Language Workbench
4
Domain-specific meta-languages
Syntax Name binding Type system Dynamic semantics
5
Bootstrap the meta-languages
Syntax Name binding Type system Dynamic semantics
6
Syntax Name binding Type system Dynamic semanticsHigher-level implementation
7
Syntax Name binding Type system Dynamic semanticsHigher-level implementation
Large-scale test case
8
Syntax Name binding Type system Dynamic semanticsHigher-level implementation
Large-scale test case
Coverage
9
Syntax Name binding Type system Dynamic semanticsHigher-level implementation
Large-scale test case
Coverage
Improvement dissemination
Bootstrapping Meta-Languages
11
SDFStratego
12
SDFStratego
context-free syntaxDef .Ent = <ent <Id> {<Decl*>}>Decl.Prop = <<Id>:<Type>>Type.Str = <String>
13
SDFStratego
context-free syntaxDef .Ent = <ent <Id> {<Decl*>}>Decl.Prop = <<Id>:<Type>>Type.Str = <String>
PT-gen PT
14
SDFStratego
context-free syntaxDef .Ent = <ent <Id> {<Decl*>}>Decl.Prop = <<Id>:<Type>>Type.Str = <String>
PT-gen PT
Parser ASTParseEnt("person",[ Prop("addr", Str())])
ent person { addr:String}
15
SDFStratego
context-free syntaxDef .Ent = <ent <Id> {<Decl*>}>Decl.Prop = <<Id>:<Type>>Type.Str = <String>
PT-gen PT
Parser ASTParseEnt("person",[ Prop("addr", Str())])
ent person { addr:String}
SigSig-gen
Types
signaturesEnt : Id * List(Decl) -> DefProp : Id * Type -> DeclStr : Type
16
SDFStratego
context-free syntaxDef .Ent = <ent <Id> {<Decl*>}>Decl.Prop = <<Id>:<Type>>Type.Str = <String>
PT-gen PT
Parser ASTParseEnt("person",[ Prop("addr", Str())])
ent person { addr:String}
SigSig-gen
Types
signaturesEnt : Id * List(Decl) -> DefProp : Id * Type -> DeclStr : Type
PP-gen
PP
17
SDFStratego
context-free syntaxDef .Ent = <ent <Id> {<Decl*>}>Decl.Prop = <<Id>:<Type>>Type.Str = <String>
PT-gen PT
Parser ASTParseEnt("person",[ Prop("addr", Str())])
ent person { addr:String}
SigSig-gen
Types
signaturesEnt : Id * List(Decl) -> DefProp : Id * Type -> DeclStr : Type
PP-gen
PPtransformation rulestojava: Ent(e, ds) -> Class(…)tojava: Prop(p, t) -> Field(…)tojava: Str() -> Type(…)
18
SDFStratego
context-free syntaxDef .Ent = <ent <Id> {<Decl*>}>Decl.Prop = <<Id>:<Type>>Type.Str = <String>
PT-gen PT
Parser ASTParseEnt("person",[ Prop("addr", Str())])
ent person { addr:String}
SigSig-gen
Types
signaturesEnt : Id * List(Decl) -> DefProp : Id * Type -> DeclStr : Type
PP-gen
PPtransformation rulestojava: Ent(e, ds) -> Class(…)tojava: Prop(p, t) -> Field(…)tojava: Str() -> Type(…)
ASTTransform
19
SDF
Sig-gen
PP-gen
Stratego
20
SDF Stratego (STR)Sig-gen
PP-gen
21
SDF STRSig-gen
PP-gen
22
SDF STRSig-gen
PP-gen
23
SDF STRSig-gen
PP-gen
24
SDF STRSig-gen
PP-gen
25
SDF STRSig-gen
PP-gen
26
SDF STR
Sig
SigSig-gen
PP-gen
27
SDF STR
Sig
Sig
PP
PP
Sig-gen
PP-gen
28
SDF STRSig-gen
PP-gen
Sig
Sig
PP
PP
Sig-gen : STR
PP-gen : STR
29
SDF STRSig-gen
PP-gen
Sig
Sig
PP
PP
Sig-gen : STR
PP-gen : STR
Sig : STR
Sig : STR
PP : STR
PP : STR
30
SDF STRSig-gen
PP-gen
Sig
Sig
PP
PP
Sig-gen : STR
PP-gen : STR
Sig : STR
Sig : STR
PP : STR
PP : STR
31
SDF STR
Multiple meta-languages
32
SDF STR
Self and mutual dependency
33
SDF STRSig-gen
PP-gen
Sig
Sig
PP
PP
Sig-gen : STR
PP-gen : STR
Sig : STR
Sig : STR
PP : STR
PP : STR
Generate files of each other
34
SDF STRSig-gen
PP-gen
Sig
Sig
PP
PP
Use files of each other
Sig-gen : STR
PP-gen : STR
Sig : STR
Sig : STR
PP : STR
PP : STR
35
SDF STRSig-gen
PP-gen
Sig
Sig
PP
PP
Complex to bootstrap
Sig-gen : STR
PP-gen : STR
Sig : STR
Sig : STR
PP : STR
PP : STR
36
SDF STR
Sig
Sig
PP
PP
Sig-gen
PP-gen
Sig-gen : STR
PP-gen : STRPP-gen* : STR
Sig : STR
Sig : STR
PP : STR
PP : STR
37
SDF STR
Sig
Sig
PP
PP
Sig-gen
PP-gen
Sig : STR
Sig : STR
PP : STR
PP : STR
Sig-gen : STR
PP-gen : STR PP : STRPP-gen* : STR
38
Bootstrap to find defects
SDF STR
Sig
Sig
PP
PP
Sig-gen
PP-gen
Sig : STR
Sig : STR
PP : STR
PP : STR
Sig-gen : STR
PP-gen : STR PP : STRPP-gen* : STR
39
SDF STRSig-genPP-gen PP
Baseline
40
SDF STRSig-genPP-gen PP
Baseline
STR
PP
Iteration 1Fixpoint bootstrapping
41
SDF STRSig-genPP-gen PP
Baseline
STR
PP
Iteration 1 SDF
Sig-genPP-gen*
Sig
String(s)->Op("S", [Str(s), Str(";")])
String(s)->Op("S", [Str(s)])
42
SDF STRSig-genPP-gen PP
Baseline
STR
PP
Iteration 1 SDF
Sig-genPP-gen*
Sig
String(s)->Op("S", [Str(s), Str(";")])
String(s)->Op("S", [Str(s)])
Hidden defect
43
SDF STRSig-genPP-gen PP
Baseline
STR
PP
Iteration 1 SDF
Sig-genPP-gen*
Sig
SDF STRSig
Sig-genPP-gen PP
Iteration 2
pp-Decl : Signature(t) -> [ H([ SOpt(HS(), "0") , S("signatures") , S(";") ]) , <pp-Sig> t]
44
SDF STRSig-genPP-gen PP
Baseline
STR
PP
Iteration 1 SDF
Sig-genPP-gen*
Sig
SDF STRSig
Sig-genPP-gen PP
Iteration 2
SDF STRSig
Sig-genPP-gen PP
Iteration 3
pp-Decl : Signature(t) -> [ H([ SOpt(HS(), "0") , S("signatures") , S(";") ]) , <pp-Sig> t]
45
SDF STRSig-genPP-gen PP
Baseline
STR
PP
Iteration 1 SDF
Sig-genPP-gen*
Sig
SDF STRSig
Sig-genPP-gen PP
Iteration 2
SDF STRSig
Sig-genPP-gen PP
Iteration 3
SDF Sig
Sig-genPP-gen
Iteration 4
module; signatures/sorts/Sorts-sigsignatures; :; String ->; SortSort :; Sort ->; SymbolPSort :; Sort *; List(;Symbol); ->; Symbol
Defect found
46
SDF STRSig-genPP-gen PP
Baseline
STR
PP
Iteration 1 SDF
Sig-genPP-gen*
Sig
SDF STRSig
Sig-genPP-gen PP
Iteration 2
SDF STRSig
Sig-genPP-gen PP
Iteration 3
SDF Sig
Sig-genPP-gen
Iteration 4
module; signatures/sorts/Sorts-sigsignatures; :; String ->; SortSort :; Sort ->; SymbolPSort :; Sort *; List(;Symbol); ->; Symbol
Defect found
47
SDF STRSig-genPP-gen PP
Baseline
STR
PP
Iteration 1 SDF
Sig-genPP-gen*
Sig
SDF STRSig
Sig-genPP-gen PP
Iteration 2
SDF STRSig
Sig-genPP-gen PP
Iteration 3
SDF Sig
Sig-genPP-gen
Iteration 4
modulesignatures SortPSort
47
Dynsem
NaBL2
TSNaBL
ESV
Stratego
SDF3
SDF2
48
SDF STRSig-genPP-gen PP
Baseline
STR
PP
Iteration 1 SDF
Sig-genPP-gen*
Sig
SDF STRSig
Sig-genPP-gen PP
Iteration 2
SDF STRSig
Sig-genPP-gen PP
Iteration 3
SDF Sig
Sig-genPP-gen
Iteration 4
modulesignatures SortPSort
Fixpoint bootstrapping
49
SDF STRSig-genPP-gen PP
Baseline
STR
PP
Iteration 1 SDF
Sig-genPP-gen*
Sig
SDF STRSig
Sig-genPP-gen PP
Iteration 2
SDF STRSig
Sig-genPP-gen PP
Iteration 3
SDF Sig
Sig-genPP-gen
Iteration 4
modulesignatures SortPSort
Fixpoint bootstrapping
Binary comparison
50
SDF STRSig-genPP-gen PP
Baseline
STR
PP
Iteration 1 SDF
Sig-genPP-gen*
Sig
SDF STRSig
Sig-genPP-gen PP
Iteration 2
SDF STRSig
Sig-genPP-gen PP
Iteration 3
SDF Sig
Sig-genPP-gen
Iteration 4
modulesignatures SortPSort
Fixpoint bootstrapping
Binary comparison
Existing baseline
51
SDF STRSig-genPP-gen PP
Baseline
STR
PP
Iteration 1 SDF
Sig-genPP-gen*
Sig
SDF STRSig
Sig-genPP-gen PP
Iteration 2
SDF STRSig
Sig-genPP-gen PP
Iteration 3
SDF Sig
Sig-genPP-gen
Iteration 4
modulesignatures SortPSort
Fixpoint bootstrapping
Binary comparison
Existing baseline
Deterministic compilers
52
SDF STRSig-genPP-gen PP
Baseline
STR
PP
Iteration 1 SDF
Sig-genPP-gen*
Sig
SDF STRSig
Sig-genPP-gen PP
Iteration 2
SDF STRSig
Sig-genPP-gen PP
Iteration 3
SDF Sig
Sig-genPP-gen
Iteration 4
modulesignatures SortPSort
Fixpoint bootstrapping
Binary comparison
Existing baseline
Deterministic compilers
Produce baselines
53
SDF STRSig-genPP-gen PP
Baseline
STR
PP
Iteration 1 SDF
Sig-genPP-gen*
Sig
SDF STRSig
Sig-genPP-gen PP
Iteration 2
SDF STRSig
Sig-genPP-gen PP
Iteration 3
SDF Sig
Sig-genPP-gen
Iteration 4
modulesignatures SortPSort
Fixpoint bootstrapping
Binary comparison
Existing baseline
Deterministic compilers
Produce baselines
Roll back on defects
54
SDF STRSig-genPP-gen PP
Baseline
STR
PP
Iteration 1 SDF
Sig-genPP-gen*
Sig
SDF STRSig
Sig-genPP-gen PP
Iteration 2
SDF STRSig
Sig-genPP-gen PP
Iteration 3
SDF Sig
Sig-genPP-gen
Iteration 4
modulesignatures SortPSort
Fixpoint bootstrapping
Binary comparison
Existing baseline
Deterministic compilers
Produce baselines
Roll back on defects
General
Systematic Meta-Language Bootstrapping
Model
56
SDF1SDF1
Language definition
Model
57
SDF1SDF1VersioningLanguage definition
Model
58
SDF1SDF1
Sig-gen : STR
Grammar : SDFSource artifacts
Model
59
SDF1SDF1
Sig-gen : STR
Grammar : SDF
SDF0 STR0 Language product
Model
60
SDF1SDF1
Sig-gen : STR
Grammar : SDF
SDF0 STR0 Language productBaseline: set of products
Model
61
SDF1SDF1
Sig-gen : STR
Grammar : SDF
SDF0 STR0
Sig : STR Export artifacts
Model
62
SDF1SDF1
Sig-gen : STR
Grammar : SDF
SDF0 STR0
Sig : STR
Sig-gen : SDF ⇒ STR Export generators
Model
63
SDF1SDF1
Sig-gen : STR
Grammar : SDF
SDF0 STR0
Sig : STR
Sig-gen : SDF ⇒ STR
Dependency
Model
64
SDF1SDF1
Sig-gen : STR
Grammar : SDF
SDF0 STR0
Sig : STR
Sig-gen : SDF ⇒ STR STR2Java :
STR ⇒ JAR
Compilation
SDF1
Sig-gen : STR
Grammar : SDF
SDF0 STR0
Sig : STR
Sig-gen : SDF ⇒ STR STR2Java :
STR ⇒ JAR
65
SDF1Compile
Compilation
SDF1
Sig-gen : STR
Grammar : SDF
SDF0 STR0
Sig : STR
Sig-gen : SDF ⇒ STR STR2Java :
STR ⇒ JAR
66
SDF1CompileGrammar : SDF
Compilation
SDF1
Sig-gen : STR
Grammar : SDF
SDF0 STR0
Sig : STR
Sig-gen : SDF ⇒ STR STR2Java :
STR ⇒ JAR
67
SDF1CompileGrammar : SDF
SDF0
Compilation
SDF1
Sig-gen : STR
Grammar : SDF
SDF0 STR0
Sig : STR
Sig-gen : SDF ⇒ STR STR2Java :
STR ⇒ JAR
68
SDF1CompileGrammar : SDF
SDF0
Sig-gen : SDF ⇒ STR
Compilation
SDF1
Sig-gen : STR
Grammar : SDF
SDF0 STR0
Sig : STR
Sig-gen : SDF ⇒ STR STR2Java :
STR ⇒ JAR
69
SDF1CompileGrammar : SDF
SDF0
Sig-gen : SDF ⇒ STR
Sig : STR
Compilation
SDF1
Sig-gen : STR
Grammar : SDF
SDF0 STR0
Sig : STR
Sig-gen : SDF ⇒ STR STR2Java :
STR ⇒ JAR
Sig : STR
SDF1Compile
70
Sig-gen : STR
Compilation
SDF1
Sig-gen : STR
Grammar : SDF
SDF0 STR0
Sig : STR
Sig-gen : SDF ⇒ STR STR2Java :
STR ⇒ JAR
Sig : STR
SDF1Compile
71
Sig-gen : STR
STR0
STR2Java : STR ⇒ JAR
Compilation
SDF1
Sig-gen : STR
Grammar : SDF
SDF0 STR0
Sig : STR
Sig-gen : SDF ⇒ STR STR2Java :
STR ⇒ JAR
Sig : STR
SDF1Compile
72
Sig-gen : STR
STR0
STR2Java : STR ⇒ JAR
SDF0
Sig : STR
Compilation
SDF1
Sig-gen : STR
Grammar : SDF
SDF0 STR0
Sig : STR
Sig-gen : SDF ⇒ STR STR2Java :
STR ⇒ JAR
Sig : STR
SDF1Compile
73
Sig-gen : STR
STR0
STR2Java : STR ⇒ JAR
SDF0
Sig : STR
Sig-gen : SDF ⇒ STR
Bootstrapping
Bootstrapping - inputs
Bootstrapping - inputs
76
STR0
SDF0*
Set of language definitions
Bootstrapping - inputs
77
STR0
SDF0*
STR0
SDF0
Baseline
Bootstrapping - inputs
78
STR0
SDF0*
STR0
SDF0
Baseline
Bootstrapping - inputs
79
STR0
SDF0*
STR0
SDF01
Version number
80
STR0
SDF0*
STR1
SDF1*
STR0
SDF0
Bootstrapping - first iteration
Apply version number
Bootstrapping - first iteration
81
STR0
SDF0*
STR1
SDF1* SDF1
STR1STR0
SDF0
Compile
Bootstrapping - first iteration
82
STR0
SDF0*
STR1
SDF1*
STR0SDF0
SDF1
STR1
Store baseline
Bootstrapping - first iteration
83
STR0
SDF0
STR0
SDF0*
STR1
SDF1*
STR0SDF0
STR1
SDF1
Use compiled products
Bootstrapping - first iteration
84
STR0
SDF0
STR0
SDF0*
STR1
SDF1*
STR0SDF0
STR1
SDF1
Use compiled products
Fixpoint Bootstrapping
85
STR0
SDF0
STR0
SDF0*
STR1
SDF1* SDF1
STR1
STR0SDF0
STR1
SDF1
Fixpoint Bootstrapping
86
STR0
SDF0
STR0
SDF0*
STR1
SDF1* SDF1
STR1
STR0SDF0
STR1
SDF1
STR0
SDF0
STR1
SDF1
STR1
SDF1
Binary comparison
Fixpoint Bootstrapping
87
STR0
SDF0
STR0
SDF0*
STR1
SDF1* SDF1
STR1
STR0SDF0
STR1
SDF1
STR0
SDF0
STR1
SDF1
STR1
SDF1
Binary comparison
STR1
SDF1
STR1
SDF1
Fixpoint Bootstrapping
88
STR0
SDF0
STR0
SDF0*
STR1
SDF1* SDF1
STR1
STR0SDF0
STR1
SDF1
STR0
SDF0
STR1
SDF1
STR1
SDF1
STR1
SDF1
STR1
SDF1
Binary comparison
Fixpoint Bootstrapping
89
STR0
SDF0
STR0
SDF0*
STR1
SDF1* SDF1
STR1
STR0SDF0
STR1
SDF1
STR0
SDF0
STR1
SDF1
STR1
SDF1
STR1
SDF1
STR1
SDF1
STR1SDF1
Fixpoint Bootstrapping
90
STR0
SDF0
STR0
SDF0*
STR1
SDF1* SDF1
STR0SDF0
STR1
SDF1
Found defects
Fixpoint Bootstrapping
91
STR0
SDF0*
STR1
SDF1*
STR0SDF0
Discard products
Fixpoint Bootstrapping
92
STR0
SDF0*
STR1
SDF1*
STR0
SDF0
Rollback
Fixpoint Bootstrapping
93
STR0
SDF0*
STR0
SDF0
Undo version changes
Fixpoint Bootstrapping
94
STR0
SDF0*
STR0
SDF0 SDF0*
Store error
STR0
SDF0
STR0
SDF0* SDF1
STR1
STR0SDF0
9595
General (language-parametric)
STR0
SDF0
STR0
SDF0* SDF1
STR1
STR0SDF0
9696
General (language-parametric)
Fully automated
97
-- Model for languages, language definitions with sources, and language products with artifacts and generators.
type Version = Int
type Lang = String
data LangID = LangID { name :: Lang, version :: Version }
data Artifact = Artifact { aname :: String, alang :: Lang, acontent :: String }
data LangDef = LangDef { dlang :: LangID, dsources :: [Artifact], dartDeps :: [LangID], dgenDeps :: [LangID] }
data Generator = Generator { gname :: String, gsource :: Lang, gtarget :: Lang, generate :: Artifact -> Artifact }
data LangProd = LangProd { plang :: LangID, partifacts :: [Artifact], pgenerators :: [Generator] }
type Baseline = [LangProd]
getProd :: LangID -> Baseline -> LangProd
getProd lang baseline = fromJust $ find (\prod -> lang == plang prod) baseline
-- Compile. Sort languages by generator source/target and run relevant generators against relevant artifacts.
compile :: LangDef -> Baseline -> LangProd
compile def baseline = createLangProd def (runGenerators sortedLangs generators inputs)
where inputs = dsources def ++ [ a | l <- dartDeps def, a <- partifacts (getProd l baseline) ]
generators = [ g | l <- dgenDeps def, g <- pgenerators (getProd l baseline) ]
sortedLangs = topsort [ l | LangID l _ <- dgenDeps def ] [ (gsource g,gtarget g) | g <- generators]
runGenerators :: [Lang] -> [Generator] -> [Artifact] -> [Artifact]
runGenerators [] gens inputs = inputs
runGenerators (lang:langs) gens inputs = runGenerators langs gens (inputs ++ runGeneratorsFor lang gens inputs)
runGeneratorsFor :: Lang -> [Generator] -> [Artifact] -> [Artifact]
runGeneratorsFor lang gens inputs = [ generate g a | g <- gens, a <- inputs, gsource g == lang, alang a == lang ]
createLangProd :: LangDef -> [Artifact] -> LangProd -- Implemented by the language workbench
-- Fixpoint bootstrap language definitions with a baseline. Update versions in the first iteration, then fixpoint.
bootstrap :: Version -> [LangDef] -> Baseline -> (Baseline, [LangDef])
bootstrap v defs baseline =
let firstBuild = [ compile (setVersion v def) baseline | def <- defs ] in
bootstrapFixpoint (prepareFixpoint v defs) firstBuild
bootstrapFixpoint :: [LangDef] -> Baseline -> (Baseline, [LangDef])
bootstrapFixpoint defs baseline =
let newBaseline = [ compile def baseline | def <- defs ] in
if baseline == newBaseline
then (newBaseline, defs)
else bootstrapFixpoint defs newBaseline
setVersion :: Version -> LangDef -> LangDef
setVersion v (LangDef (LangID l _) srcs gdeps adeps) = LangDef (LangID l v) srcs gdeps adeps
prepareFixpoint :: Version -> [LangDef] -> [LangDef]
prepareFixpoint v defs = [ prepareFixpointDef v bootstrappedLangs def | def <- defs ]
where bootstrappedLangs = [ l | LangDef (LangID l _) _ _ _ <- defs ]
prepareFixpointDef :: Version -> [Lang] -> LangDef -> LangDef
prepareFixpointDef v langs (LangDef (LangID l _) srcs adeps gdeps) =
LangDef (LangID l v) srcs [ updateDep v langs dep | dep <- adeps ] [ updateDep v langs dep | dep <- gdeps ]
updateDep :: Version -> [Lang] -> LangID -> LangID
updateDep v langs (LangID l vold) = if l �elem� langs then LangID l v else LangID l vold
Figure 2. Model for sound bootstrapping, with algorithms for compilation and fixpoint bootstrapping, encoded in Haskell.
3.3 Fixpoint Bootstrapping
We can now use compilation to define fixpoint bootstrapping.In general, there is no way to know how many bootstrappingiterations are required before it is safe to stop. Therefore, weiteratively bootstrap meta-languages until reaching a fixpoint.We define a general fixpoint bootstrapping algorithm usingthe model and compilation algorithm from above.
Function bootstrap takes the version of the new baseline,a list of meta-language definitions, and an existing baseline,and it produces a new baseline of the given version. The basicidea of the algorithm is to compile meta-language definitionsin iterations, until we reach a fixpoint. However, to avoidbuilding against the old baseline repeatedly, we have to updatethe versions of the language definitions in the first iteration.
6 2016/10/12
Source Code in our paper
55 lines of Haskell code
Model Compilation algorithm
Bootstrapping algorithm
Implementation
Implementation in Spoofax
99
Implementation in Spoofax
100
Implementation in Spoofax
101
Evaluation
103
Dynsem
NaBL2
TSNaBL
ESV
Stratego
SDF3
SDF2
Bootstrapped 8 of Spoofax’s
Meta-languagesDynsem
NaBL2
TSNaBL
ESV
Stratego
SDF3
SDF2
104
Dynsem
NaBL2
TSNaBL
ESV
Stratego
SDF3
SDF2
Bootstrapped 8 of Spoofax’s
Meta-languages
Complex dependencies
105
Dynsem
NaBL2
TSNaBL
ESV
Stratego
SDF3
SDF2
Bootstrapped 8 of Spoofax’s
Meta-languages
Complex dependencies
Results in paper and online
35
SDF STRSig-gen
PP-gen
Sig
Sig
PP
PP
Complex to bootstrap
Sig : STR
Sig : STR
PP : STR
PP : STR
Sig-gen : STR
PP-gen : STR
44
SDF STRSig-genPP-gen PP
Baseline
STR
PP
Iteration 1 SDF
Sig-genPP-gen*
Sig
SDF STRSig
Sig-genPP-gen PP
Iteration 2
SDF STRSig
Sig-genPP-gen PP
Iteration 3
SDF Sig
Sig-genPP-gen
Iteration 4
module; signatures/sorts/Sorts-sigsignatures; :; String ->; SortSort :; Sort ->; SymbolPSort :; Sort *; List(;Symbol); ->; Symbol
Defect found
35
SDF STRSig-gen
PP-gen
Sig
Sig
PP
PP
Complex to bootstrap
Sig : STR
Sig : STR
PP : STR
PP : STR
Sig-gen : STR
PP-gen : STR
44
SDF STRSig-genPP-gen PP
Baseline
STR
PP
Iteration 1 SDF
Sig-genPP-gen*
Sig
SDF STRSig
Sig-genPP-gen PP
Iteration 2
SDF STRSig
Sig-genPP-gen PP
Iteration 3
SDF Sig
Sig-genPP-gen
Iteration 4
module; signatures/sorts/Sorts-sigsignatures; :; String ->; SortSort :; Sort ->; SymbolPSort :; Sort *; List(;Symbol); ->; Symbol
Defect found
Compilation
SDF1
Sig-gen : STR
Grammar : SDF
SDF0 STR0
Sig : STR
Sig-gen : SDF ⇒ STR STR2Java :
STR ⇒ JAR
Sig : STR
SDF1Compile
71
Sig-gen : STR
STR0
STR2Java : STR ⇒ JAR
SDF0
Sig : STR
Sig-gen : SDF ⇒ STR
Fixpoint Bootstrapping
86
STR0
SDF0
STR0
SDF0*
STR1
SDF1* SDF1
STR1
STR0SDF0
STR1
SDF1
STR0
SDF0
STR1
SDF1
STR1
SDF1
STR1
SDF1
STR1
SDF1
STR1SDF1
35
SDF STRSig-gen
PP-gen
Sig
Sig
PP
PP
Complex to bootstrap
Sig : STR
Sig : STR
PP : STR
PP : STR
Sig-gen : STR
PP-gen : STR
44
SDF STRSig-genPP-gen PP
Baseline
STR
PP
Iteration 1 SDF
Sig-genPP-gen*
Sig
SDF STRSig
Sig-genPP-gen PP
Iteration 2
SDF STRSig
Sig-genPP-gen PP
Iteration 3
SDF Sig
Sig-genPP-gen
Iteration 4
module; signatures/sorts/Sorts-sigsignatures; :; String ->; SortSort :; Sort ->; SymbolPSort :; Sort *; List(;Symbol); ->; Symbol
Defect found
Compilation
SDF1
Sig-gen : STR
Grammar : SDF
SDF0 STR0
Sig : STR
Sig-gen : SDF ⇒ STR STR2Java :
STR ⇒ JAR
Sig : STR
SDF1Compile
71
Sig-gen : STR
STR0
STR2Java : STR ⇒ JAR
SDF0
Sig : STR
Sig-gen : SDF ⇒ STR
Fixpoint Bootstrapping
86
STR0
SDF0
STR0
SDF0*
STR1
SDF1* SDF1
STR1
STR0SDF0
STR1
SDF1
STR0
SDF0
STR1
SDF1
STR1
SDF1
STR1
SDF1
STR1
SDF1
STR1SDF1Implementation in Spoofax
99 104
Dynsem
NaBL2
TSNaBL
ESV
Stratego
SDF3
SDF2
Bootstrapped 8 of Spoofax’s
Meta-languages
Complex dependencies
7 changes
35
SDF STRSig-gen
PP-gen
Sig
Sig
PP
PP
Complex to bootstrap
Sig : STR
Sig : STR
PP : STR
PP : STR
Sig-gen : STR
PP-gen : STR
44
SDF STRSig-genPP-gen PP
Baseline
STR
PP
Iteration 1 SDF
Sig-genPP-gen*
Sig
SDF STRSig
Sig-genPP-gen PP
Iteration 2
SDF STRSig
Sig-genPP-gen PP
Iteration 3
SDF Sig
Sig-genPP-gen
Iteration 4
module; signatures/sorts/Sorts-sigsignatures; :; String ->; SortSort :; Sort ->; SymbolPSort :; Sort *; List(;Symbol); ->; Symbol
Defect found
Compilation
SDF1
Sig-gen : STR
Grammar : SDF
SDF0 STR0
Sig : STR
Sig-gen : SDF ⇒ STR STR2Java :
STR ⇒ JAR
Sig : STR
SDF1Compile
71
Sig-gen : STR
STR0
STR2Java : STR ⇒ JAR
SDF0
Sig : STR
Sig-gen : SDF ⇒ STR
Fixpoint Bootstrapping
86
STR0
SDF0
STR0
SDF0*
STR1
SDF1* SDF1
STR1
STR0SDF0
STR1
SDF1
STR0
SDF0
STR1
SDF1
STR1
SDF1
STR1
SDF1
STR1
SDF1
STR1SDF1Implementation in Spoofax
99 104
Dynsem
NaBL2
TSNaBL
ESV
Stratego
SDF3
SDF2
Bootstrapped 8 of Spoofax’s
Meta-languages
Complex dependencies
7 changes
Systematic Meta-Language Bootstrapping