+ All Categories
Home > Technology > Language Boxes — Bending the Host Language with Modular Language Changes

Language Boxes — Bending the Host Language with Modular Language Changes

Date post: 26-Dec-2014
Category:
Upload: lukas-renggli
View: 1,653 times
Download: 0 times
Share this document with a friend
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.
56
Language Boxes Bending the Host Language with Modular Language Changes Lukas Renggli, Marcus Denker, Oscar Nierstrasz
Transcript
Page 1: Language Boxes — Bending the Host Language with Modular Language Changes

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

Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006

Page 3: Language Boxes — Bending the Host Language with Modular Language Changes

Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006

Page 4: Language Boxes — Bending the Host Language with Modular Language Changes

Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006

Page 5: Language Boxes — Bending the Host Language with Modular Language Changes

§

§§

Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006

Page 6: Language Boxes — Bending the Host Language with Modular Language Changes

Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006

Page 7: Language Boxes — Bending the Host Language with Modular Language Changes

Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006

Page 8: Language Boxes — Bending the Host Language with Modular Language Changes

Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006

Page 9: Language Boxes — Bending the Host Language with Modular Language Changes

§

§§

Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006

Page 10: Language Boxes — Bending the Host Language with Modular Language Changes
Page 11: Language Boxes — Bending the Host Language with Modular Language Changes

Host Environment

Page 12: Language Boxes — Bending the Host Language with Modular Language Changes

Host Environment

Tool Infrastructure

Page 13: Language Boxes — Bending the Host Language with Modular Language Changes

Editor

Compiler

Debugger

Syntax

Language 1

Language 2

Page 14: Language Boxes — Bending the Host Language with Modular Language Changes

Editor

Compiler

Debugger

Syntax

Language 1

Language 2

Page 15: Language Boxes — Bending the Host Language with Modular Language Changes

Editor

Compiler

Debugger

Syntax

Language 1

Language 2

Page 16: Language Boxes — Bending the Host Language with Modular Language Changes

Editor

Compiler

Debugger

Syntax

Language 1

Language 2

Page 17: Language Boxes — Bending the Host Language with Modular Language Changes

Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006

Page 18: Language Boxes — Bending the Host Language with Modular Language Changes

Host Environment

Tool Infrastructure

Page 19: Language Boxes — Bending the Host Language with Modular Language Changes

Host Environment

Tool Infrastructure

Language Boxes

Page 20: Language Boxes — Bending the Host Language with Modular Language Changes

Language BoxModel

Page 21: Language Boxes — Bending the Host Language with Modular Language Changes

LanguageChange

LanguageConcern

LanguageScope

LanguageBox

*

*

*

*

Page 22: Language Boxes — Bending the Host Language with Modular Language Changes

IV + VII = XI

Page 23: Language Boxes — Bending the Host Language with Modular Language Changes

LanguageChange

LanguageConcern

LanguageScope

LanguageBox

*

*

*

*

Page 24: Language Boxes — Bending the Host Language with Modular Language Changes

Language Change

Insert FRAGMENT(before|after) PRODUCTION

as (choice|sequence|replacement)

Page 25: Language Boxes — Bending the Host Language with Modular Language Changes

Language Change

Insert RomanNumberbefore NumberLiteral

as a choice.

Page 26: Language Boxes — Bending the Host Language with Modular Language Changes

Language Change

Literal: BooleanLiteral

NilLiteral

NumberLiteral

StringLiteral

ArrayLiteral

NumberLiteral: IntegerLiteral

FloatLiteral

Page 27: Language Boxes — Bending the Host Language with Modular Language Changes

Language Change

'I' .. 'M'RomanNumber:

Page 28: Language Boxes — Bending the Host Language with Modular Language Changes

Language Change

Literal: BooleanLiteral

NilLiteral

NumberLiteral'

StringLiteral

ArrayLiteral

NumberLiteral': RomanNumber

NumberLiteral

Page 29: Language Boxes — Bending the Host Language with Modular Language Changes

Language Change

1st Class Grammar

Scannerless, Packrat

Page 30: Language Boxes — Bending the Host Language with Modular Language Changes

Language Concern

Production Action

Page 31: Language Boxes — Bending the Host Language with Modular Language Changes

Language Concern

Compiler

aToken value romanToArabic lift

Page 32: Language Boxes — Bending the Host Language with Modular Language Changes

Highlighting

aToken -> Color gray

Language Concern

Page 33: Language Boxes — Bending the Host Language with Modular Language Changes

Custom Actions

Language Concern

Page 34: Language Boxes — Bending the Host Language with Modular Language Changes

Language Scope

Active?

Page 35: Language Boxes — Bending the Host Language with Modular Language Changes

Language Scope

System

Page 36: Language Boxes — Bending the Host Language with Modular Language Changes

Language Scope

Packages

Page 37: Language Boxes — Bending the Host Language with Modular Language Changes

Language Scope

Classes

Page 38: Language Boxes — Bending the Host Language with Modular Language Changes

Language Scope

Methods

Page 39: Language Boxes — Bending the Host Language with Modular Language Changes

LanguageChange

LanguageConcern

LanguageScope

*

*

*

*

LanguageBox

Page 40: Language Boxes — Bending the Host Language with Modular Language Changes

Conflicts

Page 41: Language Boxes — Bending the Host Language with Modular Language Changes

LanguageBox 1

LanguageBox 2

LanguageBox 3

LanguageBox 4

Page 42: Language Boxes — Bending the Host Language with Modular Language Changes

LanguageBox 1

LanguageBox 2

LanguageBox 3

LanguageBox 4

LanguageBox 3

Page 43: Language Boxes — Bending the Host Language with Modular Language Changes

LanguageBox 3

LanguageBox 1

LanguageBox 2

LanguageBox 4

Page 44: Language Boxes — Bending the Host Language with Modular Language Changes

LanguageBox 3

LanguageBox 1

LanguageBox 2

LanguageBox 4

HostGrammar

Page 45: Language Boxes — Bending the Host Language with Modular Language Changes

LanguageBox 3

LanguageBox 1

LanguageBox 2

LanguageBox 4

HostGrammar

Page 46: Language Boxes — Bending the Host Language with Modular Language Changes

LanguageBox 3

LanguageBox 1

LanguageBox 2

LanguageBox 4

HostGrammar

Page 47: Language Boxes — Bending the Host Language with Modular Language Changes

LanguageBox 3

LanguageBox 1

LanguageBox 2

LanguageBox 4

Page 48: Language Boxes — Bending the Host Language with Modular Language Changes
Page 49: Language Boxes — Bending the Host Language with Modular Language Changes

HostGrammar'

Page 50: Language Boxes — Bending the Host Language with Modular Language Changes

HostGrammar'

might consist

of unused parts

Page 51: Language Boxes — Bending the Host Language with Modular Language Changes

HostGrammar'

might beambiguousmight consist

of unused parts

Page 52: Language Boxes — Bending the Host Language with Modular Language Changes

HostGrammar'

PackratParser

Page 53: Language Boxes — Bending the Host Language with Modular Language Changes

SELECT * FROM users

Page 54: Language Boxes — Bending the Host Language with Modular Language Changes

SELECT * FROM users<SQL: >

Page 55: Language Boxes — Bending the Host Language with Modular Language Changes

Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006

Page 56: Language Boxes — Bending the Host Language with Modular Language Changes

scg.unibe.ch/research/helvetia


Recommended