Embedding Languages Without Breaking Tools
Upcoming SlideShare
Loading in...5
×
 

Embedding Languages Without Breaking Tools

on

  • 4,461 views

Domain-specific languages (DSLs) are increasingly used as embedded languages within general-purpose host languages. DSLs provide a compact, dedicated syntax for specifying parts of an application ...

Domain-specific languages (DSLs) are increasingly used as embedded languages within general-purpose host languages. DSLs provide a compact, dedicated syntax for specifying parts of an application related to specialized domains. Unfortunately, such language extensions typically do not integrate well with the development tools of the host language. Editors, compilers and debuggers are either unaware of the extensions, or must be adapted at a non-trivial cost. We present a novel approach to embed DSLs into an existing host language by leveraging the underlying representation of the host language used by these tools. Helvetia is an extensible system that intercepts the compilation pipeline of the Smalltalk host language to seamlessly integrate language extensions. We validate our approach by case studies that demonstrate three fundamentally different ways to extend or adapt the host language syntax and semantics.

Statistics

Views

Total Views
4,461
Views on SlideShare
1,345
Embed Views
3,116

Actions

Likes
0
Downloads
11
Comments
0

7 Embeds 3,116

http://scg.unibe.ch 3099
http://translate.googleusercontent.com 7
url_unknown 6
http://static.slidesharecdn.com 1
http://www.slideshare.net 1
http://plus.url.google.com 1
https://www.google.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Embedding Languages Without Breaking Tools Embedding Languages Without Breaking Tools Presentation Transcript

  • Embedding Languages without Breaking Tools Lukas Renggli, Tudor Gîrba, Oscar Nierstrasz CHOOSE Swiss Group for Object-Oriented Systems 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
  • x=1 x=2 y=1 Package Name (2, 1) y=2 (1, 2) (2, 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; x=1 x=2 width: 200; y=1 Package Name (2, 1) height: 100; yourself) y=2 (1, 2) (2, 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; x=1 x=2 width: 200; y=1 Package Name (2, 1) height: 100. y=2 (1, 2) (2, 2)
  • AST Transformation
  • ➊ Pidgin syntax ‧ 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; x=1 x=2 width: 200; y=1 Package Name (2, 1) height: 100. y=2 (1, 2) (2, 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; x=1 x=2 borderWidth: 1; width: 200; y=1 Package Name (2, 1) height: 100; } y=2 (1, 2) (2, 2)
  • Custom Parser AST Transformation
  • ➋ Creole syntax ‧ 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; x=1 x=2 borderWidth: 1; width: 200; y=1 Package Name (2, 1) height: 100; } y=2 (1, 2) (2, 2)
  • ➌ Argot syntax ‧ vocabulary ‧ semantics
  • Transactional Memory Object Relationships
  • How does Helvetia work?
  • Rules <parse> <transform> <attribute> <bytecode> Source Smalltalk Semantic Bytecode Executable Code Parser Analysis Generation Code Traditional Smalltalk Compiler
  • Rules <parse> <transform> <attribute> <bytecode> Source Smalltalk Semantic Bytecode Executable Code Parser Analysis Generation Code Traditional Smalltalk Compiler
  • Rules <parse> <transform> <attribute> <bytecode> Source Smalltalk Semantic Bytecode Executable Code Parser Analysis Generation Code Traditional Smalltalk Compiler
  • ... <complete> <highlight> ... Rules <parse> <transform> <attribute> <bytecode> Source Smalltalk Semantic Bytecode Executable Code Parser Analysis Generation Code Traditional Smalltalk Compiler
  • ... <complete> <highlight> ... Creole path Rules Pidgin path Argot path <parse> <transform> <attribute> <bytecode> Source Smalltalk Semantic Bytecode Executable Code Parser Analysis Generation Code Traditional Smalltalk Compiler
  • Rule Types ‣ Conditional Rule Reflection ‣ Source Rule Parser, Regex ‣ AST Rule Tree Matcher
  • Rule Actions ‣ Transformations ‣ Code blocks ‣ Call other rules
  • <complete> <highlight> ... Rules <parse> <transform> <attribute> <bytecode> Source Smalltalk Semantic Bytecode Executable Code Parser Analysis Generation Code Traditional Smalltalk Compiler
  • IV + VII = XI
  • Assignments and Swapping Positional Arguments Automaton Quasiquoting and Unquoting Asynchronous Calls Regular Expression Brainfuck Roman Numbers Functional Language SQL Grammar Definition Schematic Tables Mondrian String Interpolation Object Relationships Transactional Memory Pattern Matching Tuple Spaces [http://scg.unibe.ch/research/helvetia/examples]
  • Existing Host Language
  • Multiple Context Dependent Languages
  • Homogeneous Data Abstraction
  • Homogeneous Tool Integration
  • http://scg.unibe.ch/research/helvetia
  • Rules
  • Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
  • Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
  • Language * Change Language * Language Box Concern * * Language Scope 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