JAVA DSLs MIT VOLLER BANDBREITE Sebastian Zarnekow itemis AG
DOMAIN SPECIFIC LANGUAGE
DOMAIN SPECIFIC LANGUAGE A Domain-Specific Language is an executable programming language which is tailored and designed to solve a particular class of problems very well.
com.springsource.roo.pizzashop roo> entity --class ~.domain.topping --testautomatically ~.domain.topping roo> field string --fieldname name --notnull --sizemin 2 ~.domain.topping roo> entity --class ~.domain.base --testautomatically ~.domain.base roo> field string --fieldname name --notnull --sizemin 2 ~.domain.base roo> entity --class ~.domain.pizza --testautomatically ~.domain.pizza roo> field string --fieldname name --notnull --sizemin 2 ~.domain.pizza roo> field number --fieldname price --type java.lang.float ~.domain.pizza roo> field set --fieldname toppings --type ~.domain.topping ~.domain.pizza roo> field reference --fieldname base --type ~.domain.base ~.domain.pizza roo> entity --class ~.domain.pizzaorder --testautomatically ~.domain.pizzaorder roo> field string --fieldname name --notnull --sizemin 2 ~.domain.pizzaorder roo> field string --fieldname address --sizemax 30 ~.domain.pizzaorder roo> field number --fieldname total --type java.lang.float ~.domain.pizzaorder roo> field date --fieldname deliverydate --type java.util.date ~.domain.pizzaorder roo> field set --fieldname pizzas --type ~.domain.pizza
com.springsource.roo.pizzashop roo> entity --class ~.domain.topping --testautomatically ~.domain.topping roo> field string --fieldname name --notnull --sizemin 2 ~.domain.topping roo> entity --class ~.domain.base --testautomatically ~.domain.base roo> field string --fieldname name --notnull --sizemin 2 ~.domain.base roo> entity --class ~.domain.pizza --testautomatically ~.domain.pizza roo> field string --fieldname name --notnull --sizemin 2 ~.domain.pizza roo> field number --fieldname price --type java.lang.float ~.domain.pizza roo> field set --fieldname toppings --type ~.domain.topping ~.domain.pizza roo> field reference --fieldname base --type ~.domain.base ~.domain.pizza roo> entity --class ~.domain.pizzaorder --testautomatically ~.domain.pizzaorder roo> field string --fieldname name --notnull --sizemin 2 ~.domain.pizzaorder roo> field string --fieldname address --sizemax 30 ~.domain.pizzaorder roo> field number --fieldname total --type java.lang.float ~.domain.pizzaorder roo> field date --fieldname deliverydate --type java.util.date ~.domain.pizzaorder roo> field set --fieldname pizzas --type ~.domain.pizza
com.springsource.roo.pizzashop roo> entity --class ~.domain.topping --testautomatically ~.domain.topping roo> field string --fieldname name --notnull --sizemin 2 ~.domain.topping roo> entity --class ~.domain.base --testautomatically ~.domain.base roo> field string --fieldname name --notnull --sizemin 2 ~.domain.base roo> entity --class ~.domain.pizza --testautomatically ~.domain.pizza roo> field string --fieldname name --notnull --sizemin 2 ~.domain.pizza roo> field number --fieldname price --type java.lang.float ~.domain.pizza roo> field set --fieldname toppings --type ~.domain.topping ~.domain.pizza roo> field reference --fieldname base --type ~.domain.base ~.domain.pizza roo> entity --class ~.domain.pizzaorder --testautomatically ~.domain.pizzaorder roo> field string --fieldname name --notnull --sizemin 2 ~.domain.pizzaorder roo> field string --fieldname address --sizemax 30 ~.domain.pizzaorder roo> field number --fieldname total --type java.lang.float ~.domain.pizzaorder roo> field date --fieldname deliverydate --type java.util.date ~.domain.pizzaorder roo> field set --fieldname pizzas --type ~.domain.pizza
DESTILLIERT com.springsource.roo.pizzashop.domain { entity Topping { string name notnull sizemin 2 } entity Base { string name notnull sizemin 2 } entity Pizza { string name notnull sizemin 2 number price set Topping toppings reference Base base } entity PizzaOrder { string name notnull sizemin 2 string address sizemax 30 number total date deliverydate set Pizza pizzas } }
DESTILLIERT com.springsource.roo.pizzashop.domain { entity Topping { string name } entity Base { string name } entity Pizza { string name number price set Topping toppings reference Base base } entity PizzaOrder { string name string address nullable sizemax 30 number total date deliverydate set Pizza pizzas } }
DESTILLIERT com.springsource.roo.pizzashop.domain { entity Topping { string name } entity Base { string name } entity Pizza { string name number price set Topping toppings reference Base base } entity PizzaOrder { string name string address nullable sizemax 30 number total date deliverydate set Pizza pizzas } }
Eclipse
Eclipse Sprache Definieren
Eclipse Sprache Definieren IDE Generieren
Eclipse Sprache Definieren IDE Generieren Codieren
IDE Framework
(DOMAIN SPECIFIC ) LANGUAGE FRAMEWORK
Eclipse Platform (JFace Text, etc.)
Java Development Tools (JDT) Eclipse Platform (JFace Text, etc.)
Java Development Tools (JDT) Eclipse Platform (JFace Text, etc.)
Java Development Tools (JDT) Eclipse Platform (JFace Text, etc.) Eclipse Modeling Framework (EMF)
Java Development Tools (JDT) Eclipse Platform (JFace Text, etc.) Antlr Parser Generator Eclipse Modeling Framework (EMF)
Advanced Language-Specific Editing Features by Default Refactoring Template Proposals Go To Declaration Global Indexing Content Assist Quick Fixes Outline View Find References Incremental Builders Validation Syntax Coloring Wizards Rich Hovers Auto Editing Code Folding Bracket Matching
DSLs für Java Entwickler?
DSLs für Java Entwickler? import java.util.* package hello.world { entity Person { firstname: String lastname: String friends: List<Person> op getfullname() : String { DEMO firstname + ' ' + lastname } } } op sortedfriends() : List<Person> { friends.sortby [p p.fullname] }
DSLs für Java Entwickler! Java Typsystem (Arrays, Generics,...) Java Bibliotheken, Frameworks und Code DSL Java DSL Code in die Java Applikation integrieren DSL auf JVM ausführen
DSL AST
.class AST DSL.java
.class AST DSL Typ-Modell.java
.class AST DSL Typ-Modell (referenziert).java
.class AST DSL Typ-Modell (referenziert).java Infrastruktur
.class AST DSL Typ-Modell (referenziert).java für Infrastruktur
.class AST DSL (referenziert).java
.class AST DSL.java
.class AST Abgeleitete Java Klassen DSL.java
.class AST Abgeleitete Java Klassen DSL.java
.class AST Abgeleitete Java Klassen DSL.java
.class AST Abgeleitete Java Klassen DSL.java
.class DSL.java.java
.class DSL.java.java
7 AUF EINEN STREICH Scripting Language DSL für MongoDB Http Routing Definition Templates Language DSL für Google Guice Build Language Tortoise
DEMO
WRAP UP
WRAP UP
WRAP UP www.xtext.org Seit 03.09.2013 - Xtext 2.4.3