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

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Embedding Languages Without Breaking Tools

4,492

Published on

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.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
4,492
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
12
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Embedding Languages without Breaking Tools Lukas Renggli, Tudor Gîrba, Oscar Nierstrasz CHOOSE Swiss Group for Object-Oriented Systems and Environments
  • 2. Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
  • 3. Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
  • 4. Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
  • 5. § § § Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
  • 6. Language Engineering
  • 7. Multiple Context Dependent Languages
  • 8. Homogeneous Data Abstraction
  • 9. Homogeneous Tool Integration
  • 10. Existing Host Language
  • 11. Context Specific Languages with Homogeneous Tool Integration
  • 12. x=1 x=2 y=1 Package Name (2, 1) y=2 (1, 2) (2, 2)
  • 13. 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)
  • 14. 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)
  • 15. AST Transformation
  • 16. ➊ Pidgin syntax ‧ vocabulary ‧ semantics
  • 17. 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)
  • 18. 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)
  • 19. Custom Parser AST Transformation
  • 20. ➋ Creole syntax ‧ vocabulary ‧ semantics
  • 21. 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)
  • 22. ➌ Argot syntax ‧ vocabulary ‧ semantics
  • 23. Transactional Memory Object Relationships
  • 24. How does Helvetia work?
  • 25. Rules <parse> <transform> <attribute> <bytecode> Source Smalltalk Semantic Bytecode Executable Code Parser Analysis Generation Code Traditional Smalltalk Compiler
  • 26. Rules <parse> <transform> <attribute> <bytecode> Source Smalltalk Semantic Bytecode Executable Code Parser Analysis Generation Code Traditional Smalltalk Compiler
  • 27. Rules <parse> <transform> <attribute> <bytecode> Source Smalltalk Semantic Bytecode Executable Code Parser Analysis Generation Code Traditional Smalltalk Compiler
  • 28. ... <complete> <highlight> ... Rules <parse> <transform> <attribute> <bytecode> Source Smalltalk Semantic Bytecode Executable Code Parser Analysis Generation Code Traditional Smalltalk Compiler
  • 29. ... <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
  • 30. Rule Types ‣ Conditional Rule Reflection ‣ Source Rule Parser, Regex ‣ AST Rule Tree Matcher
  • 31. Rule Actions ‣ Transformations ‣ Code blocks ‣ Call other rules
  • 32. <complete> <highlight> ... Rules <parse> <transform> <attribute> <bytecode> Source Smalltalk Semantic Bytecode Executable Code Parser Analysis Generation Code Traditional Smalltalk Compiler
  • 33. IV + VII = XI
  • 34. 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]
  • 35. Existing Host Language
  • 36. Multiple Context Dependent Languages
  • 37. Homogeneous Data Abstraction
  • 38. Homogeneous Tool Integration
  • 39. http://scg.unibe.ch/research/helvetia
  • 40. Rules
  • 41. Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
  • 42. Marco Zanoli, cc-by-sa, 2.5, www.wikipedia.de, 2006
  • 43. 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.
  • 44. http://scg.unibe.ch/research/helvetia

×