language boxes — bending the host language with modular language changes
DESCRIPTION
As domain-specific modeling begins to attract widespread acceptance, pressure is increasing for the development of new domain-specific languages. Unfortunately these DSLs typically conflict with the grammar of the host language, making it difficult to compose hybrid code except at the level of strings; few mechanisms (if any) exist to control the scope of usage of multiple DSLs; and, most seriously, existing host language tools are typically unaware of the DSL extensions, thus hampering the development process. Language boxes address these issues by offering a simple, modular mechanism to encapsulate (i) compositional changes to the host language, (ii) transformations to address various concerns such as compilation and syntax highlighting, and (iii) scoping rules to control visibility of fine-grained language extensions. We describe the design and implementation of language boxes, and show with the help of several examples how modular extensions can be introduced to a host language and environment.TRANSCRIPT
![Page 1: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/1.jpg)
Language BoxesBending the Host Language
with Modular Language Changes
Lukas Renggli, Marcus Denker, Oscar Nierstrasz
![Page 2: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/2.jpg)
Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
![Page 3: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/3.jpg)
Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
![Page 4: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/4.jpg)
Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
![Page 5: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/5.jpg)
§
§§
Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
![Page 6: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/6.jpg)
Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
![Page 7: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/7.jpg)
Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
![Page 8: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/8.jpg)
Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
![Page 9: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/9.jpg)
§
§§
Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
![Page 10: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/10.jpg)
![Page 11: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/11.jpg)
Host Environment
![Page 12: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/12.jpg)
Host Environment
Tool Infrastructure
![Page 13: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/13.jpg)
Editor
Compiler
Debugger
Syntax
Language 1
Language 2
![Page 14: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/14.jpg)
Editor
Compiler
Debugger
Syntax
Language 1
Language 2
![Page 15: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/15.jpg)
Editor
Compiler
Debugger
Syntax
Language 1
Language 2
![Page 16: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/16.jpg)
Editor
Compiler
Debugger
Syntax
Language 1
Language 2
![Page 17: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/17.jpg)
Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
![Page 18: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/18.jpg)
Host Environment
Tool Infrastructure
![Page 19: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/19.jpg)
Host Environment
Tool Infrastructure
Language Boxes
![Page 20: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/20.jpg)
Language BoxModel
![Page 21: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/21.jpg)
LanguageChange
LanguageConcern
LanguageScope
LanguageBox
*
*
*
*
![Page 22: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/22.jpg)
IV + VII = XI
![Page 23: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/23.jpg)
LanguageChange
LanguageConcern
LanguageScope
LanguageBox
*
*
*
*
![Page 24: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/24.jpg)
Language Change
Insert FRAGMENT(before|after) PRODUCTION
as (choice|sequence|replacement)
![Page 25: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/25.jpg)
Language Change
Insert RomanNumberbefore NumberLiteral
as a choice.
![Page 26: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/26.jpg)
Language Change
Literal: BooleanLiteral
NilLiteral
NumberLiteral
StringLiteral
ArrayLiteral
NumberLiteral: IntegerLiteral
FloatLiteral
![Page 27: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/27.jpg)
Language Change
'I' .. 'M'RomanNumber:
![Page 28: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/28.jpg)
Language Change
Literal: BooleanLiteral
NilLiteral
NumberLiteral'
StringLiteral
ArrayLiteral
NumberLiteral': RomanNumber
NumberLiteral
![Page 29: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/29.jpg)
Language Change
1st Class Grammar
Scannerless, Packrat
![Page 30: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/30.jpg)
Language Concern
Production Action
![Page 31: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/31.jpg)
Language Concern
Compiler
aToken value romanToArabic lift
![Page 32: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/32.jpg)
Highlighting
aToken -> Color gray
Language Concern
![Page 33: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/33.jpg)
Custom Actions
Language Concern
![Page 34: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/34.jpg)
Language Scope
Active?
![Page 35: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/35.jpg)
Language Scope
System
![Page 36: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/36.jpg)
Language Scope
Packages
![Page 37: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/37.jpg)
Language Scope
Classes
![Page 38: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/38.jpg)
Language Scope
Methods
![Page 39: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/39.jpg)
LanguageChange
LanguageConcern
LanguageScope
*
*
*
*
LanguageBox
![Page 40: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/40.jpg)
Conflicts
![Page 41: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/41.jpg)
LanguageBox 1
LanguageBox 2
LanguageBox 3
LanguageBox 4
![Page 42: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/42.jpg)
LanguageBox 1
LanguageBox 2
LanguageBox 3
LanguageBox 4
LanguageBox 3
![Page 43: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/43.jpg)
LanguageBox 3
LanguageBox 1
LanguageBox 2
LanguageBox 4
![Page 44: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/44.jpg)
LanguageBox 3
LanguageBox 1
LanguageBox 2
LanguageBox 4
HostGrammar
![Page 45: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/45.jpg)
LanguageBox 3
LanguageBox 1
LanguageBox 2
LanguageBox 4
HostGrammar
![Page 46: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/46.jpg)
LanguageBox 3
LanguageBox 1
LanguageBox 2
LanguageBox 4
HostGrammar
![Page 47: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/47.jpg)
LanguageBox 3
LanguageBox 1
LanguageBox 2
LanguageBox 4
![Page 48: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/48.jpg)
![Page 49: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/49.jpg)
HostGrammar'
![Page 50: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/50.jpg)
HostGrammar'
might consist
of unused parts
![Page 51: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/51.jpg)
HostGrammar'
might beambiguousmight consist
of unused parts
![Page 52: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/52.jpg)
HostGrammar'
PackratParser
![Page 53: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/53.jpg)
SELECT * FROM users
![Page 54: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/54.jpg)
SELECT * FROM users<SQL: >
![Page 55: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/55.jpg)
Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
![Page 56: Language Boxes — Bending the Host Language with Modular Language Changes](https://reader034.vdocuments.net/reader034/viewer/2022051818/549feefaac79590b768b4b10/html5/thumbnails/56.jpg)
scg.unibe.ch/research/helvetia