SlideShare a Scribd company logo
Domain-Specific Langua ges for
   Composable Editor Plugins




LDTA 2009, York, UK

Lennart Kats (me),     Delft University of Technology
Karl Trygve Kalleberg, University of Bergen
Eelco Visser,          Delft University of Technology
March 19, 2009



Software Engineering Research Group
The Framework
     is the
  Language
The IDE
  is the
Language
Implementing IDEs:
The Two Faces of Eclipse

Eclipse platform:
• Cross-platform, open-source
• People have it
• People use it
   • Java, ...
Implementing IDEs:
The Two Faces of Eclipse

Huge, low-level API
• SWT widgets
• synchronization
• I/O
• regexes
Implementing IDEs:
The Two Faces of Eclipse

Weakly typed interfaces
• XML
• java.lang.Object, IAdaptable
• CoreException
  "A checked exception representing a failure."
II.
Composable
Languages
DSLs and Language Extensions

Domain-specific         void browse() {
                          List<Book> books =
• Database queries
                           <| SELECT *
• Regular expressions          FROM books
• XML processing               WHERE price < 100.00
                             |>;
• Matrices
• Complex numbers           …
• ...
                            for (int i = 0; i < books.size(); i++)
                               books.get(i).title =~ s/^The //;
                        }
Meta-programming with
Concrete Object Syntax
• Program transformation
• Stratego with WebDSL, Java, XML


    webdsl-action-to-java-method:
     |[ action x_action(farg*) { stat* } ]| ->
     |[ public void x_action(param*) { bstm* } ]|
     with param* := <map(action-arg-to-java)> farg*;
           bstm* := <statements-to-java> stat*
III.
Introducing
Spoofax/IMP
IDE development environments
(Or: How to Learn to Stop Worrying and Love Eclipse)

• Abstraction
   • avoid Eclipse framework complexity
• Modularity
   • separation of concerns
   • reuse
• Extensibility and customization
   • integration with existing compilers, tools
Introducing Spoofax/IMP

• Three pillars:
   • SDF grammars
   • DSLs for service descriptors
   • Implemented using
     Spoofax and IMP frameworks (“SAFARI”)
An IDE plugin created with Spoofax/IMP
SDF and SGLR (1)

• Unified lexical and context-free syntax

  module WebDSL
  imports MixHQL[HQL] AccessControl ...
  exports
   lexical syntax
     [a-zA-Z][a-zA-Z0-9_]* → Id
     ...
   context-free syntax
     "module" Id Section*              → Unit    {cons("Module")}
     "section" SectionName Def*        → Section {cons("Section")}
     "define" Mod* Id "{" Element* "}" → Def     {cons("SimpleDef")}
     ...
SDF and SGLR (2)

• Scannerless Generalized-LR Parsing
   • Full class of context-free grammars
   • Compositional
   • Declarative disambiguation filters



                   module Stratego-WebDSL-Java-XML
                   imports
                    Stratego-Java-15
                    Stratego-WebDSL
                    Stratego-XML
Modular Editor Service Definitions

• Main file
• Definition for each service
• Generated definitions
Reuse and Modularity in IDE plugins

  Stratego + WebDSL editor =
  StrategoWebDSL editor

• Declarative specifications
• (Backdoor available)
Creating a brand new IDE plugin

Requires:             Gives you:
• Syntax definition   • Service templates
• Language name       • Generated services
• File extension(s)   • plugin.xml, ...

                      And:
                      • Basic IDE functionality:
                        Coloring, outline, folding
In the Beginning: WebDSL.main.esv
module WebDSL.main

imports
 WebDSL-Analysis WebDSL-Colorer WebDSL-...

language Description

 name : WebDSL
 aliases : WebDiesel
 id      : org.strategoxt.imp.generated.webdsl

 description : "Spoofax/IMP-generated editor for the WebDSL language"
 url         : http://strategoxt.org

language Files and parsing

 [...]
In the Beginning: WebDSL.main.esv
module WebDSL.main

imports
 WebDSL-Analysis WebDSL-...
                 WebDSL-Colorer WebDSL-...

language Description

 [...]

language Files and parsing

 extensions
 [...]         : app
 table         : include/WebDSL.tbl
 start symbols : Unit
In the Beginning (2): Generated Services
• Based on heuristics
• Rapid prototyping
• Starting point
   • functioning as an example
   • self-documenting

module WebDSL-Colorer.generated

// ...documentation...

colorer Default highlighting rules
 keyword : "Keywords" = magenta bold
 string   : "Strings"    = blue
 number : "Numbers" = darkgreen
 ...
Example: The colorer service
                    module Stratego-WebDSL-Colorer

                    imports
                     Stratego
                     WebDSL

                    colorer Variables

                     _.Var : green italic

                    colorer Concrete syntax

                     environment _.ToMetaExpr:
                      _ gray

                     environment _.FromMetaExpr:
                      _ white
Example: The folding service
                    module Java-Folding

                    imports
                     Java-Folding.generated

                    folding Customization

                     CompilationUnit
                     NewInstance
                     QNewInstance

                     ImportDec* (folded)
                     Block      (disable)
Syntactic Editor Services

•   Syntax errors
•   Code folding
•   Outline view
•   Brace matching
•   Comments
•   Source code formatting
Semantic Editor Services

•   Error reporting
•   Reference resolving
•   Reference info
•   Occurrence highlighting
Stratego integration


Stratego:
• Rewrite rules
• Strategies to control
   their application
• Used for e.g., WebDSL, Stratego, Java   [OOPSLA'08]
Interfacing with Stratego
• Interface based on rewrite rules
• Adapted primitives for parsing, caching

                              Offending term + message tuples
                                 [(Var(“auhtor”), “undeclared”), ...]

editor­analyze:
  (ast, path, fullpath) ­> (errors, warnings, infos)
  with
    ...
    (errors, warnings, infos) := <collect­all­markers> ast
    ...
Interfacing with Stratego
• Interface based on rewrite rules
• Adapted primitives for parsing, caching

                               Referenced declaration
                                 Property(“author”, ...)

reference­resolve:
  (ast, path, fullpath, reference) ­> declaration
  with
    ...
    declaration := <find­decl> reference
    ...
Using Stratego:
   A Global-to-Local Transformation
entity User {
  username :: String (id)               entity User {
  password :: Secret                      username :: String (id)
  isAdmin :: Bool                         password :: Secret
}                                         isAdmin :: Bool
                            normalize     name       :: String
                                          manager -> User
extend entity User {                      employees -> Set<User>
  name      :: String                   }
  manager -> User
  employees -> Set<User>
}
Term Rewriting with Origin Tracking
                                        [Van Deursen et al 1993]

entity User {
  username :: String (id)                  entity User {
  password :: Secret                         username :: String (id)
  isAdmin :: Bool                            password :: Secret
}                                            isAdmin :: Bool
                            normalize        name       :: String
                                             manager -> User
extend entity User {                         employees -> Set<User>
  name      :: String                      }
  manager -> User
  employees -> Set<User>
}
Program Object Model (POM) adapter
                            [Kalleberg et al, LDTA'07]

Interpret term operations as API calls
• Using Spoofax interpreter
• Intercept applications of rewrite rules
   in strategies
• Override term building, 'all', 'some', and 'one'
   for origin tracking
The Ubiquitous Eclipse
Dynamic Building and Loading:
The Editor Service Builder
• Verifies all service descriptors
   • Syntax
   • Existing sorts
   • ...
• Updates plugin.xml, etc.
• Builds parse tables
Dynamic Building and Loading:
Dynamically Loading Editor Services
                                     <<language>>
• IMP provides:                    DynamicRoot
                            DynamicColor : Colorer
   • static, XML-based      dynamicFolder : Folder
     editor declarations    ...

   • language inheritance
                                     <<language>>
                                       WebDSL
• Base language
   • Defines default services
   • May be overridden
     by dynamic or “backdoor” implementations
Looking back

LDTA'07: Spoofax




                   Embedded Java code
Looking back

LDTA'08: sdf2imp

No:
• Semantic services
• Dynamic loading
• Modular definitions
Looking forward (to)

• Complete Stratego-based DSL environment
   • compiler for Java
   • SDF bundle
• Expansion of editor services
   • e.g. content completion
Looking forward (to)

• Integration with Aster [CC 2009]
• Better interactive parser
   • performance
   • error handling
   • content completion
Concluding Remarks
    • Declarative DSLs
      • Avoid Eclipse API complexity
      • Specialized syntax
      • Compositionality
      • Co-evolution of language and IDE


Domain­Specific Languages for Composable Editor Plugins.
Lennart C. L. Kats, Karl T. Kalleberg, and Eelco Visser. LDTA 2009.

http://www.strategoxt.org/Stratego/Spoofax­IMP
Ad

More Related Content

What's hot (20)

Scoobi - Scala for Startups
Scoobi - Scala for StartupsScoobi - Scala for Startups
Scoobi - Scala for Startups
bmlever
 
Dartprogramming
DartprogrammingDartprogramming
Dartprogramming
Ali Parmaksiz
 
Advanced Php - Macq Electronique 2010
Advanced Php - Macq Electronique 2010Advanced Php - Macq Electronique 2010
Advanced Php - Macq Electronique 2010
Michelangelo van Dam
 
11. session 11 functions and objects
11. session 11   functions and objects11. session 11   functions and objects
11. session 11 functions and objects
Phúc Đỗ
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
Betclic Everest Group Tech Team
 
Scala DSLの作り方
Scala DSLの作り方Scala DSLの作り方
Scala DSLの作り方
Tomoharu ASAMI
 
concurrency gpars
concurrency gparsconcurrency gpars
concurrency gpars
Paul King
 
Requery overview
Requery overviewRequery overview
Requery overview
Sunghyouk Bae
 
Kotlin @ Coupang Backend 2017
Kotlin @ Coupang Backend 2017Kotlin @ Coupang Backend 2017
Kotlin @ Coupang Backend 2017
Sunghyouk Bae
 
Scalding for Hadoop
Scalding for HadoopScalding for Hadoop
Scalding for Hadoop
Chicago Hadoop Users Group
 
concurrency with GPars
concurrency with GParsconcurrency with GPars
concurrency with GPars
Paul King
 
GPars (Groovy Parallel Systems)
GPars (Groovy Parallel Systems)GPars (Groovy Parallel Systems)
GPars (Groovy Parallel Systems)
Gagan Agrawal
 
Kotlin @ Coupang Backed - JetBrains Day seoul 2018
Kotlin @ Coupang Backed - JetBrains Day seoul 2018Kotlin @ Coupang Backed - JetBrains Day seoul 2018
Kotlin @ Coupang Backed - JetBrains Day seoul 2018
Sunghyouk Bae
 
Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)
Jonas Bonér
 
Spring data
Spring dataSpring data
Spring data
명철 강
 
Dart
DartDart
Dart
anandvns
 
The Xtext Grammar Language
The Xtext Grammar LanguageThe Xtext Grammar Language
The Xtext Grammar Language
Dr. Jan Köhnlein
 
Xtext Eclipse Con
Xtext Eclipse ConXtext Eclipse Con
Xtext Eclipse Con
Sven Efftinge
 
awesome groovy
awesome groovyawesome groovy
awesome groovy
Paul King
 
Alternatives of JPA/Hibernate
Alternatives of JPA/HibernateAlternatives of JPA/Hibernate
Alternatives of JPA/Hibernate
Sunghyouk Bae
 
Scoobi - Scala for Startups
Scoobi - Scala for StartupsScoobi - Scala for Startups
Scoobi - Scala for Startups
bmlever
 
Advanced Php - Macq Electronique 2010
Advanced Php - Macq Electronique 2010Advanced Php - Macq Electronique 2010
Advanced Php - Macq Electronique 2010
Michelangelo van Dam
 
11. session 11 functions and objects
11. session 11   functions and objects11. session 11   functions and objects
11. session 11 functions and objects
Phúc Đỗ
 
concurrency gpars
concurrency gparsconcurrency gpars
concurrency gpars
Paul King
 
Kotlin @ Coupang Backend 2017
Kotlin @ Coupang Backend 2017Kotlin @ Coupang Backend 2017
Kotlin @ Coupang Backend 2017
Sunghyouk Bae
 
concurrency with GPars
concurrency with GParsconcurrency with GPars
concurrency with GPars
Paul King
 
GPars (Groovy Parallel Systems)
GPars (Groovy Parallel Systems)GPars (Groovy Parallel Systems)
GPars (Groovy Parallel Systems)
Gagan Agrawal
 
Kotlin @ Coupang Backed - JetBrains Day seoul 2018
Kotlin @ Coupang Backed - JetBrains Day seoul 2018Kotlin @ Coupang Backed - JetBrains Day seoul 2018
Kotlin @ Coupang Backed - JetBrains Day seoul 2018
Sunghyouk Bae
 
Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)
Jonas Bonér
 
awesome groovy
awesome groovyawesome groovy
awesome groovy
Paul King
 
Alternatives of JPA/Hibernate
Alternatives of JPA/HibernateAlternatives of JPA/Hibernate
Alternatives of JPA/Hibernate
Sunghyouk Bae
 

Similar to Domain-Specific Languages for Composable Editor Plugins (LDTA 2009) (20)

Smoothing Your Java with DSLs
Smoothing Your Java with DSLsSmoothing Your Java with DSLs
Smoothing Your Java with DSLs
intelliyole
 
Grails 101
Grails 101Grails 101
Grails 101
David Jacobs
 
Lightbend Lagom: Microservices Just Right
Lightbend Lagom: Microservices Just RightLightbend Lagom: Microservices Just Right
Lightbend Lagom: Microservices Just Right
mircodotta
 
MSc Enterprise Systems Development Guest Lecture at UniS (2/12/09)
MSc Enterprise Systems Development Guest Lecture at UniS (2/12/09)MSc Enterprise Systems Development Guest Lecture at UniS (2/12/09)
MSc Enterprise Systems Development Guest Lecture at UniS (2/12/09)
Daniel Bryant
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
Fabio Franzini
 
Angular JS2 Training Session #1
Angular JS2 Training Session #1Angular JS2 Training Session #1
Angular JS2 Training Session #1
Paras Mendiratta
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
Balint Erdi
 
Slickdemo
SlickdemoSlickdemo
Slickdemo
Knoldus Inc.
 
Liferay (DXP) 7 Tech Meetup for Developers
Liferay (DXP) 7 Tech Meetup for DevelopersLiferay (DXP) 7 Tech Meetup for Developers
Liferay (DXP) 7 Tech Meetup for Developers
Azilen Technologies Pvt. Ltd.
 
Kerberizing Spark: Spark Summit East talk by Abel Rincon and Jorge Lopez-Malla
Kerberizing Spark: Spark Summit East talk by Abel Rincon and Jorge Lopez-MallaKerberizing Spark: Spark Summit East talk by Abel Rincon and Jorge Lopez-Malla
Kerberizing Spark: Spark Summit East talk by Abel Rincon and Jorge Lopez-Malla
Spark Summit
 
Scala and Spring
Scala and SpringScala and Spring
Scala and Spring
Eberhard Wolff
 
DotNet Introduction
DotNet IntroductionDotNet Introduction
DotNet Introduction
Wei Sun
 
Intro to .NET for Government Developers
Intro to .NET for Government DevelopersIntro to .NET for Government Developers
Intro to .NET for Government Developers
Frank La Vigne
 
Knolx session
Knolx sessionKnolx session
Knolx session
Knoldus Inc.
 
Building DSLs with the Spoofax Language Workbench
Building DSLs with the Spoofax Language WorkbenchBuilding DSLs with the Spoofax Language Workbench
Building DSLs with the Spoofax Language Workbench
Eelco Visser
 
U-SQL Killer Scenarios: Taming the Data Science Monster with U-SQL and Big Co...
U-SQL Killer Scenarios: Taming the Data Science Monster with U-SQL and Big Co...U-SQL Killer Scenarios: Taming the Data Science Monster with U-SQL and Big Co...
U-SQL Killer Scenarios: Taming the Data Science Monster with U-SQL and Big Co...
Michael Rys
 
Spring Day | Spring and Scala | Eberhard Wolff
Spring Day | Spring and Scala | Eberhard WolffSpring Day | Spring and Scala | Eberhard Wolff
Spring Day | Spring and Scala | Eberhard Wolff
JAX London
 
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Codemotion
 
Building DSLs On CLR and DLR (Microsoft.NET)
Building DSLs On CLR and DLR (Microsoft.NET)Building DSLs On CLR and DLR (Microsoft.NET)
Building DSLs On CLR and DLR (Microsoft.NET)
Vitaly Baum
 
Lobos Introduction
Lobos IntroductionLobos Introduction
Lobos Introduction
Nicolas Buduroi
 
Smoothing Your Java with DSLs
Smoothing Your Java with DSLsSmoothing Your Java with DSLs
Smoothing Your Java with DSLs
intelliyole
 
Lightbend Lagom: Microservices Just Right
Lightbend Lagom: Microservices Just RightLightbend Lagom: Microservices Just Right
Lightbend Lagom: Microservices Just Right
mircodotta
 
MSc Enterprise Systems Development Guest Lecture at UniS (2/12/09)
MSc Enterprise Systems Development Guest Lecture at UniS (2/12/09)MSc Enterprise Systems Development Guest Lecture at UniS (2/12/09)
MSc Enterprise Systems Development Guest Lecture at UniS (2/12/09)
Daniel Bryant
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
Fabio Franzini
 
Angular JS2 Training Session #1
Angular JS2 Training Session #1Angular JS2 Training Session #1
Angular JS2 Training Session #1
Paras Mendiratta
 
Kerberizing Spark: Spark Summit East talk by Abel Rincon and Jorge Lopez-Malla
Kerberizing Spark: Spark Summit East talk by Abel Rincon and Jorge Lopez-MallaKerberizing Spark: Spark Summit East talk by Abel Rincon and Jorge Lopez-Malla
Kerberizing Spark: Spark Summit East talk by Abel Rincon and Jorge Lopez-Malla
Spark Summit
 
DotNet Introduction
DotNet IntroductionDotNet Introduction
DotNet Introduction
Wei Sun
 
Intro to .NET for Government Developers
Intro to .NET for Government DevelopersIntro to .NET for Government Developers
Intro to .NET for Government Developers
Frank La Vigne
 
Building DSLs with the Spoofax Language Workbench
Building DSLs with the Spoofax Language WorkbenchBuilding DSLs with the Spoofax Language Workbench
Building DSLs with the Spoofax Language Workbench
Eelco Visser
 
U-SQL Killer Scenarios: Taming the Data Science Monster with U-SQL and Big Co...
U-SQL Killer Scenarios: Taming the Data Science Monster with U-SQL and Big Co...U-SQL Killer Scenarios: Taming the Data Science Monster with U-SQL and Big Co...
U-SQL Killer Scenarios: Taming the Data Science Monster with U-SQL and Big Co...
Michael Rys
 
Spring Day | Spring and Scala | Eberhard Wolff
Spring Day | Spring and Scala | Eberhard WolffSpring Day | Spring and Scala | Eberhard Wolff
Spring Day | Spring and Scala | Eberhard Wolff
JAX London
 
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Codemotion
 
Building DSLs On CLR and DLR (Microsoft.NET)
Building DSLs On CLR and DLR (Microsoft.NET)Building DSLs On CLR and DLR (Microsoft.NET)
Building DSLs On CLR and DLR (Microsoft.NET)
Vitaly Baum
 
Ad

More from lennartkats (10)

Docker at Cloud9 IDE
Docker at Cloud9 IDEDocker at Cloud9 IDE
Docker at Cloud9 IDE
lennartkats
 
Remix Your Language Tooling (JSConf.eu 2012)
Remix Your Language Tooling (JSConf.eu 2012)Remix Your Language Tooling (JSConf.eu 2012)
Remix Your Language Tooling (JSConf.eu 2012)
lennartkats
 
Language Engineering in the Cloud
Language Engineering in the CloudLanguage Engineering in the Cloud
Language Engineering in the Cloud
lennartkats
 
Test-driven language development
Test-driven language developmentTest-driven language development
Test-driven language development
lennartkats
 
Integrated Language Definition Testing: Enabling Test-Driven Language Develop...
Integrated Language Definition Testing: Enabling Test-Driven Language Develop...Integrated Language Definition Testing: Enabling Test-Driven Language Develop...
Integrated Language Definition Testing: Enabling Test-Driven Language Develop...
lennartkats
 
The Spoofax Language Workbench (SPLASH 2010)
The Spoofax Language Workbench (SPLASH 2010)The Spoofax Language Workbench (SPLASH 2010)
The Spoofax Language Workbench (SPLASH 2010)
lennartkats
 
Using Aspects for Language Portability (SCAM 2010)
Using Aspects for Language Portability (SCAM 2010)Using Aspects for Language Portability (SCAM 2010)
Using Aspects for Language Portability (SCAM 2010)
lennartkats
 
Providing Rapid Feedback in Generated Modular Language Environments (OOPSLA 2...
Providing Rapid Feedback in Generated Modular Language Environments (OOPSLA 2...Providing Rapid Feedback in Generated Modular Language Environments (OOPSLA 2...
Providing Rapid Feedback in Generated Modular Language Environments (OOPSLA 2...
lennartkats
 
Decorated Attribute Grammars (CC 2009)
Decorated Attribute Grammars (CC 2009)Decorated Attribute Grammars (CC 2009)
Decorated Attribute Grammars (CC 2009)
lennartkats
 
Mixing Source and Bytecode: A Case for Compilation By Normalization (OOPSLA 2...
Mixing Source and Bytecode: A Case for Compilation By Normalization (OOPSLA 2...Mixing Source and Bytecode: A Case for Compilation By Normalization (OOPSLA 2...
Mixing Source and Bytecode: A Case for Compilation By Normalization (OOPSLA 2...
lennartkats
 
Docker at Cloud9 IDE
Docker at Cloud9 IDEDocker at Cloud9 IDE
Docker at Cloud9 IDE
lennartkats
 
Remix Your Language Tooling (JSConf.eu 2012)
Remix Your Language Tooling (JSConf.eu 2012)Remix Your Language Tooling (JSConf.eu 2012)
Remix Your Language Tooling (JSConf.eu 2012)
lennartkats
 
Language Engineering in the Cloud
Language Engineering in the CloudLanguage Engineering in the Cloud
Language Engineering in the Cloud
lennartkats
 
Test-driven language development
Test-driven language developmentTest-driven language development
Test-driven language development
lennartkats
 
Integrated Language Definition Testing: Enabling Test-Driven Language Develop...
Integrated Language Definition Testing: Enabling Test-Driven Language Develop...Integrated Language Definition Testing: Enabling Test-Driven Language Develop...
Integrated Language Definition Testing: Enabling Test-Driven Language Develop...
lennartkats
 
The Spoofax Language Workbench (SPLASH 2010)
The Spoofax Language Workbench (SPLASH 2010)The Spoofax Language Workbench (SPLASH 2010)
The Spoofax Language Workbench (SPLASH 2010)
lennartkats
 
Using Aspects for Language Portability (SCAM 2010)
Using Aspects for Language Portability (SCAM 2010)Using Aspects for Language Portability (SCAM 2010)
Using Aspects for Language Portability (SCAM 2010)
lennartkats
 
Providing Rapid Feedback in Generated Modular Language Environments (OOPSLA 2...
Providing Rapid Feedback in Generated Modular Language Environments (OOPSLA 2...Providing Rapid Feedback in Generated Modular Language Environments (OOPSLA 2...
Providing Rapid Feedback in Generated Modular Language Environments (OOPSLA 2...
lennartkats
 
Decorated Attribute Grammars (CC 2009)
Decorated Attribute Grammars (CC 2009)Decorated Attribute Grammars (CC 2009)
Decorated Attribute Grammars (CC 2009)
lennartkats
 
Mixing Source and Bytecode: A Case for Compilation By Normalization (OOPSLA 2...
Mixing Source and Bytecode: A Case for Compilation By Normalization (OOPSLA 2...Mixing Source and Bytecode: A Case for Compilation By Normalization (OOPSLA 2...
Mixing Source and Bytecode: A Case for Compilation By Normalization (OOPSLA 2...
lennartkats
 
Ad

Recently uploaded (20)

Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Aqusag Technologies
 
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
BookNet Canada
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
organizerofv
 
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-UmgebungenHCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
panagenda
 
Andrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell: Transforming Business Strategy Through Data-Driven InsightsAndrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell
 
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath MaestroDev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
UiPathCommunity
 
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded DevelopersLinux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Toradex
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
 
How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?
Daniel Lehner
 
Role of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered ManufacturingRole of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered Manufacturing
Andrew Leo
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...
Vishnu Singh Chundawat
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
Cybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure ADCybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure AD
VICTOR MAESTRE RAMIREZ
 
Greenhouse_Monitoring_Presentation.pptx.
Greenhouse_Monitoring_Presentation.pptx.Greenhouse_Monitoring_Presentation.pptx.
Greenhouse_Monitoring_Presentation.pptx.
hpbmnnxrvb
 
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager APIUiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPathCommunity
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
HCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser EnvironmentsHCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser Environments
panagenda
 
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Massive Power Outage Hits Spain, Portugal, and France: Causes, Impact, and On...
Aqusag Technologies
 
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
BookNet Canada
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
organizerofv
 
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-UmgebungenHCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
panagenda
 
Andrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell: Transforming Business Strategy Through Data-Driven InsightsAndrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell
 
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath MaestroDev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
UiPathCommunity
 
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded DevelopersLinux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Toradex
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
 
How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?
Daniel Lehner
 
Role of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered ManufacturingRole of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered Manufacturing
Andrew Leo
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...
Vishnu Singh Chundawat
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
Cybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure ADCybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure AD
VICTOR MAESTRE RAMIREZ
 
Greenhouse_Monitoring_Presentation.pptx.
Greenhouse_Monitoring_Presentation.pptx.Greenhouse_Monitoring_Presentation.pptx.
Greenhouse_Monitoring_Presentation.pptx.
hpbmnnxrvb
 
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager APIUiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPathCommunity
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
HCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser EnvironmentsHCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser Environments
panagenda
 

Domain-Specific Languages for Composable Editor Plugins (LDTA 2009)

  • 1. Domain-Specific Langua ges for Composable Editor Plugins LDTA 2009, York, UK Lennart Kats (me), Delft University of Technology Karl Trygve Kalleberg, University of Bergen Eelco Visser, Delft University of Technology March 19, 2009 Software Engineering Research Group
  • 2. The Framework is the Language
  • 3. The IDE is the Language
  • 4. Implementing IDEs: The Two Faces of Eclipse Eclipse platform: • Cross-platform, open-source • People have it • People use it • Java, ...
  • 5. Implementing IDEs: The Two Faces of Eclipse Huge, low-level API • SWT widgets • synchronization • I/O • regexes
  • 6. Implementing IDEs: The Two Faces of Eclipse Weakly typed interfaces • XML • java.lang.Object, IAdaptable • CoreException "A checked exception representing a failure."
  • 8. DSLs and Language Extensions Domain-specific void browse() { List<Book> books = • Database queries <| SELECT * • Regular expressions FROM books • XML processing WHERE price < 100.00 |>; • Matrices • Complex numbers … • ... for (int i = 0; i < books.size(); i++) books.get(i).title =~ s/^The //; }
  • 9. Meta-programming with Concrete Object Syntax • Program transformation • Stratego with WebDSL, Java, XML webdsl-action-to-java-method: |[ action x_action(farg*) { stat* } ]| -> |[ public void x_action(param*) { bstm* } ]| with param* := <map(action-arg-to-java)> farg*; bstm* := <statements-to-java> stat*
  • 11. IDE development environments (Or: How to Learn to Stop Worrying and Love Eclipse) • Abstraction • avoid Eclipse framework complexity • Modularity • separation of concerns • reuse • Extensibility and customization • integration with existing compilers, tools
  • 12. Introducing Spoofax/IMP • Three pillars: • SDF grammars • DSLs for service descriptors • Implemented using Spoofax and IMP frameworks (“SAFARI”)
  • 13. An IDE plugin created with Spoofax/IMP
  • 14. SDF and SGLR (1) • Unified lexical and context-free syntax module WebDSL imports MixHQL[HQL] AccessControl ... exports lexical syntax [a-zA-Z][a-zA-Z0-9_]* → Id ... context-free syntax "module" Id Section* → Unit {cons("Module")} "section" SectionName Def* → Section {cons("Section")} "define" Mod* Id "{" Element* "}" → Def {cons("SimpleDef")} ...
  • 15. SDF and SGLR (2) • Scannerless Generalized-LR Parsing • Full class of context-free grammars • Compositional • Declarative disambiguation filters module Stratego-WebDSL-Java-XML imports Stratego-Java-15 Stratego-WebDSL Stratego-XML
  • 16. Modular Editor Service Definitions • Main file • Definition for each service • Generated definitions
  • 17. Reuse and Modularity in IDE plugins Stratego + WebDSL editor = StrategoWebDSL editor • Declarative specifications • (Backdoor available)
  • 18. Creating a brand new IDE plugin Requires: Gives you: • Syntax definition • Service templates • Language name • Generated services • File extension(s) • plugin.xml, ... And: • Basic IDE functionality: Coloring, outline, folding
  • 19. In the Beginning: WebDSL.main.esv module WebDSL.main imports WebDSL-Analysis WebDSL-Colorer WebDSL-... language Description name : WebDSL aliases : WebDiesel id : org.strategoxt.imp.generated.webdsl description : "Spoofax/IMP-generated editor for the WebDSL language" url : http://strategoxt.org language Files and parsing [...]
  • 20. In the Beginning: WebDSL.main.esv module WebDSL.main imports WebDSL-Analysis WebDSL-... WebDSL-Colorer WebDSL-... language Description [...] language Files and parsing extensions [...] : app table : include/WebDSL.tbl start symbols : Unit
  • 21. In the Beginning (2): Generated Services • Based on heuristics • Rapid prototyping • Starting point • functioning as an example • self-documenting module WebDSL-Colorer.generated // ...documentation... colorer Default highlighting rules keyword : "Keywords" = magenta bold string : "Strings" = blue number : "Numbers" = darkgreen ...
  • 22. Example: The colorer service module Stratego-WebDSL-Colorer imports Stratego WebDSL colorer Variables _.Var : green italic colorer Concrete syntax environment _.ToMetaExpr: _ gray environment _.FromMetaExpr: _ white
  • 23. Example: The folding service module Java-Folding imports Java-Folding.generated folding Customization CompilationUnit NewInstance QNewInstance ImportDec* (folded) Block (disable)
  • 24. Syntactic Editor Services • Syntax errors • Code folding • Outline view • Brace matching • Comments • Source code formatting
  • 25. Semantic Editor Services • Error reporting • Reference resolving • Reference info • Occurrence highlighting
  • 26. Stratego integration Stratego: • Rewrite rules • Strategies to control their application • Used for e.g., WebDSL, Stratego, Java [OOPSLA'08]
  • 27. Interfacing with Stratego • Interface based on rewrite rules • Adapted primitives for parsing, caching Offending term + message tuples [(Var(“auhtor”), “undeclared”), ...] editor­analyze:   (ast, path, fullpath) ­> (errors, warnings, infos)   with     ...     (errors, warnings, infos) := <collect­all­markers> ast     ...
  • 28. Interfacing with Stratego • Interface based on rewrite rules • Adapted primitives for parsing, caching Referenced declaration Property(“author”, ...) reference­resolve:   (ast, path, fullpath, reference) ­> declaration   with     ...     declaration := <find­decl> reference     ...
  • 29. Using Stratego: A Global-to-Local Transformation entity User { username :: String (id) entity User { password :: Secret username :: String (id) isAdmin :: Bool password :: Secret } isAdmin :: Bool normalize name :: String manager -> User extend entity User { employees -> Set<User> name :: String } manager -> User employees -> Set<User> }
  • 30. Term Rewriting with Origin Tracking [Van Deursen et al 1993] entity User { username :: String (id) entity User { password :: Secret username :: String (id) isAdmin :: Bool password :: Secret } isAdmin :: Bool normalize name :: String manager -> User extend entity User { employees -> Set<User> name :: String } manager -> User employees -> Set<User> }
  • 31. Program Object Model (POM) adapter [Kalleberg et al, LDTA'07] Interpret term operations as API calls • Using Spoofax interpreter • Intercept applications of rewrite rules in strategies • Override term building, 'all', 'some', and 'one' for origin tracking
  • 33. Dynamic Building and Loading: The Editor Service Builder • Verifies all service descriptors • Syntax • Existing sorts • ... • Updates plugin.xml, etc. • Builds parse tables
  • 34. Dynamic Building and Loading: Dynamically Loading Editor Services <<language>> • IMP provides: DynamicRoot DynamicColor : Colorer • static, XML-based dynamicFolder : Folder editor declarations ... • language inheritance <<language>> WebDSL • Base language • Defines default services • May be overridden by dynamic or “backdoor” implementations
  • 35. Looking back LDTA'07: Spoofax Embedded Java code
  • 36. Looking back LDTA'08: sdf2imp No: • Semantic services • Dynamic loading • Modular definitions
  • 37. Looking forward (to) • Complete Stratego-based DSL environment • compiler for Java • SDF bundle • Expansion of editor services • e.g. content completion
  • 38. Looking forward (to) • Integration with Aster [CC 2009] • Better interactive parser • performance • error handling • content completion
  • 39. Concluding Remarks • Declarative DSLs • Avoid Eclipse API complexity • Specialized syntax • Compositionality • Co-evolution of language and IDE Domain­Specific Languages for Composable Editor Plugins. Lennart C. L. Kats, Karl T. Kalleberg, and Eelco Visser. LDTA 2009. http://www.strategoxt.org/Stratego/Spoofax­IMP