Embedding Languages Without Breaking Tools
-
Upload
lukas-renggli -
Category
Technology
-
view
4.263 -
download
1
description
Transcript of Embedding Languages Without Breaking Tools
Embedding Languages without Breaking Tools
Lukas Renggli, Tudor Gîrba, Oscar Nierstrasz
CHOOSE Swiss Group forObject-OrientedSystems and Environments
Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
§
§§
Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
Language Engineering
Multiple Context Dependent Languages
Homogeneous Data Abstraction
Homogeneous Tool Integration
Existing Host Language
Context Specific Languages
with Homogeneous Tool Integration
Package Name
x = 1
y = 1 (2, 1)
(2, 2)(1, 2)
x = 2
y = 2
aBuilder row grow.aBuilder row fill.
aBuilder column grow.aBuilder column fill.
aBuilder x: 1 y: 1 add: (LabelShape new text: [ :each | each name ]; borderColor: #black; borderWidth: 1; yourself).aBuilder x: 1 y: 2 w: 2 h: 1 add: (RectangleShape new borderColor: #black; borderWidth: 1; width: 200; height: 100; yourself)
Package Name
x = 1
y = 1 (2, 1)
(2, 2)(1, 2)
x = 2
y = 2
row = grow.row = fill.
column = grow.column = fill.
(1 , 1) = label text: [ :each | each name ]; borderColor: #black; borderWidth: 1.
(1 , 2) - (2 , 1) = rectangle borderColor: #black; borderWidth: 1; width: 200; height: 100.
Package Name
x = 1
y = 1 (2, 1)
(2, 2)(1, 2)
x = 2
y = 2
AST Transformation
➊ Pidginsyntax ‧ vocabulary ‧ semantics
row = grow.row = fill.
column = grow.column = fill.
(1 , 1) = label text: [ :each | each name ]; borderColor: #black; borderWidth: 1.
(1 , 2) - (2 , 1) = rectangle borderColor: #black; borderWidth: 1; width: 200; height: 100.
Package Name
x = 1
y = 1 (2, 1)
(2, 2)(1, 2)
x = 2
y = 2
shape { cols: #grow, #fill; rows: #grow, #fill;}label { position: 1 , 1; text: [ :each | each name ]; borderColor: #black; borderWidth: 1;}rectangle { position: 1 , 2; colspan: 2; borderColor: #black; borderWidth: 1; width: 200; height: 100;}
Package Name
x = 1
y = 1 (2, 1)
(2, 2)(1, 2)
x = 2
y = 2
Custom ParserAST Transformation
➋ Creolesyntax ‧ vocabulary ‧ semantics
shape { cols: #grow, #fill; rows: #grow, #fill;}label { position: 1 , 1; text: [ :each | each name ]; borderColor: #black; borderWidth: 1;}rectangle { position: 1 , 2; colspan: 2; borderColor: #black; borderWidth: 1; width: 200; height: 100;}
Package Name
x = 1
y = 1 (2, 1)
(2, 2)(1, 2)
x = 2
y = 2
➌ Argotsyntax ‧ vocabulary ‧ semantics
Transactional Memory
Object Relationships
How does Helvetia work?
Traditional Smalltalk Compiler
Smalltalk
Parser
Semantic
Analysis
Bytecode
Generation
Executable
Code
Source
Code
<parse> <transform> <attribute> <bytecode>
Rules
Traditional Smalltalk Compiler
Smalltalk
Parser
Semantic
Analysis
Bytecode
Generation
Executable
Code
Source
Code
<parse> <transform> <attribute> <bytecode>
Rules
Traditional Smalltalk Compiler
Smalltalk
Parser
Semantic
Analysis
Bytecode
Generation
Executable
Code
Source
Code
<parse> <transform> <attribute> <bytecode>
Rules
... ...<complete> <highlight>
Traditional Smalltalk Compiler
Smalltalk
Parser
Semantic
Analysis
Bytecode
Generation
Executable
Code
Source
Code
<parse> <transform> <attribute> <bytecode>
Rules
<complete> <highlight>
Traditional Smalltalk Compiler
Smalltalk
Parser
Semantic
Analysis
Bytecode
Generation
Executable
Code
Source
Code
<parse> <transform> <attribute> <bytecode>
Rules
Pidgin path
Creole path
Argot path
... ...
‣ Conditional RuleReflection
‣ Source RuleParser, Regex
‣ AST RuleTree Matcher
Rule Types
Rule Actions
‣ Transformations
‣ Code blocks
‣ Call other rules
...<complete> <highlight>
Traditional Smalltalk Compiler
Smalltalk
Parser
Semantic
Analysis
Bytecode
Generation
Executable
Code
Source
Code
<parse> <transform> <attribute> <bytecode>
Rules
IV + VII = XI
Assignments and Swapping
Automaton
Asynchronous Calls
Brainfuck
Functional Language
Grammar Definition
Mondrian
Object Relationships
Pattern Matching
Positional Arguments
Quasiquoting and Unquoting
Regular Expression
Roman Numbers
SQL
Schematic Tables
String Interpolation
Transactional Memory
Tuple Spaces
[http://scg.unibe.ch/research/helvetia/examples]
Existing Host Language
Multiple ContextDependent Languages
Homogeneous Data Abstraction
Homogeneous Tool Integration
http://scg.unibe.ch/research/helvetia
Traditional Smalltalk Compiler
Smalltalk
Parser
Semantic
Analysis
Bytecode
Generation
Executable
Code
Source
Code
<parse> <transform> <attribute> <bytecode>
Rules
Pidgin path
Creole path
Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
LanguageChange
LanguageConcern
LanguageScope
LanguageBox
*
*
*
*
L. Renggli, M. Denker, O. Nierstrasz. Language Boxes: Bending the Host Language with Modular Language Changes. In SLE 2009, Denver, Colorado, October 5-6, 2009, LNCS 5969 p. 274—293, Springer, 2009.
http://scg.unibe.ch/research/helvetia