The Spoofax Language Workbench (SPLASH 2010)

47
The Spoofax Language Workbench Eelco Visser Lennart Kats

Transcript of The Spoofax Language Workbench (SPLASH 2010)

Page 1: The Spoofax Language Workbench (SPLASH 2010)

The SpoofaxLanguage Workbench

Eelco VisserLennart Kats

Page 2: The Spoofax Language Workbench (SPLASH 2010)

Problem Software

implement

validate

Software Engineering

Page 3: The Spoofax Language Workbench (SPLASH 2010)

ProblemDomain HLL Machine

High-level languages reduce problem/solution gap

Page 4: The Spoofax Language Workbench (SPLASH 2010)

ProblemDomain HLL MachineDSL

DSLs further reduce gap between problem domain and implementation

Domain-Specific Languages

Page 5: The Spoofax Language Workbench (SPLASH 2010)

Example DSL:

Page 6: The Spoofax Language Workbench (SPLASH 2010)

paradigm: linguistic abstraction

Page 7: The Spoofax Language Workbench (SPLASH 2010)

making languages should be cheap

Page 8: The Spoofax Language Workbench (SPLASH 2010)

Compiler IngredientsSyntax definition

★ concrete syntax

★ abstract syntax

Static semantics

★ error checking

★ name resolution

★ type analysis

Model-to-model transformation

★ express constructs in core language

Code generation

★ translate core language models to implementation

parser generators

meta-programming

languages

meta-programming

libraries

templateengines

Page 9: The Spoofax Language Workbench (SPLASH 2010)
Page 10: The Spoofax Language Workbench (SPLASH 2010)
Page 11: The Spoofax Language Workbench (SPLASH 2010)
Page 12: The Spoofax Language Workbench (SPLASH 2010)
Page 13: The Spoofax Language Workbench (SPLASH 2010)
Page 14: The Spoofax Language Workbench (SPLASH 2010)

Editor Services

syntactic editor services

• syntax highlighting

• syntax checking

• outline view

• bracket matching, insertion

• automatic indentation

• syntax completion

• ...

semantic editor services

• error marking

• reference resolving

• hover help

• mark occurrences

• content completion

• refactoring

• ...

Page 15: The Spoofax Language Workbench (SPLASH 2010)

Syntax definition

Static semantics

Model-to-model transformation

Code generation

Syntactic Editor Services

Semantic Editor Services

} Languageworkbenches[Fowler ’05]

how can we make these things cheaply?

Page 16: The Spoofax Language Workbench (SPLASH 2010)

Language Workbench:

integrated environment for language definition

Page 17: The Spoofax Language Workbench (SPLASH 2010)

Holy Grail of Software Language Definition

Automatically derive efficient, scalable, incremental compiler + usable IDE from high-level, declarative language

definition

Page 18: The Spoofax Language Workbench (SPLASH 2010)

SDF

Stratego

Eclipse

IMP

Page 19: The Spoofax Language Workbench (SPLASH 2010)

SDF

Stratego

Eclipse

IMP

Language Definition by

Transformation

Page 20: The Spoofax Language Workbench (SPLASH 2010)

• <spoofax screenshot: lang def and lang use in Eclipse workspace>

Page 21: The Spoofax Language Workbench (SPLASH 2010)

SDF:Declarative

Syntax Definition

Page 22: The Spoofax Language Workbench (SPLASH 2010)
Page 23: The Spoofax Language Workbench (SPLASH 2010)

A syntax definitionspecifies a transformation

from text to trees

Page 24: The Spoofax Language Workbench (SPLASH 2010)

Syntax as Transformation

Page 25: The Spoofax Language Workbench (SPLASH 2010)

Syntax as Transformation

Page 26: The Spoofax Language Workbench (SPLASH 2010)

Syntax as Transformationtransform

Page 27: The Spoofax Language Workbench (SPLASH 2010)

Syntax as Transformationtransform

Page 28: The Spoofax Language Workbench (SPLASH 2010)

Syntax as Transformationtransform

Page 29: The Spoofax Language Workbench (SPLASH 2010)

Semantics=

transformation

Page 30: The Spoofax Language Workbench (SPLASH 2010)

Error Marking is a Transformation

transform

Page 31: The Spoofax Language Workbench (SPLASH 2010)

transform

Error Marking is a Transformation

Page 32: The Spoofax Language Workbench (SPLASH 2010)

transform

Error Marking is a Transformation

transform

Page 33: The Spoofax Language Workbench (SPLASH 2010)

transform

Error Marking is a Transformation

transform

Page 34: The Spoofax Language Workbench (SPLASH 2010)

transform

Error Marking is a Transformation

transform

Page 35: The Spoofax Language Workbench (SPLASH 2010)

Outline View is aTransformation

transform

Page 36: The Spoofax Language Workbench (SPLASH 2010)

Hyperlinking is aTransformation

tran

sfor

m

Page 37: The Spoofax Language Workbench (SPLASH 2010)

Content Completion is aTransformation

tran

sform

tran

sfor

m

Page 38: The Spoofax Language Workbench (SPLASH 2010)

Code Generation is aTransformation

transform

Page 39: The Spoofax Language Workbench (SPLASH 2010)

Need for single, unified language specification:

• Editor services

• Model transformations

• Code generation

Page 40: The Spoofax Language Workbench (SPLASH 2010)

Stratego:Rewriting Language

Page 41: The Spoofax Language Workbench (SPLASH 2010)

Rewrite rules

Strategies

Page 42: The Spoofax Language Workbench (SPLASH 2010)

Error Marking with Rewrite Rules

Page 43: The Spoofax Language Workbench (SPLASH 2010)

Error Marking with Rewrite Rules

Page 44: The Spoofax Language Workbench (SPLASH 2010)

transform

transformError Marking with Rewrite Rules

Origin tracking

Page 45: The Spoofax Language Workbench (SPLASH 2010)

Analysis with Rewrite Rules

Page 46: The Spoofax Language Workbench (SPLASH 2010)

Code Generation with Rewrite Rules

Page 47: The Spoofax Language Workbench (SPLASH 2010)

Conclusion

• Co-evolution of language and IDE

• Pure and declarative syntax definition

• Language definition by transformation

• www.spoofax.org: papers, tour, download