This document discusses using Xtext to create domain-specific languages (DSLs) for Java. It describes how Xtext allows defining a DSL grammar and then generates Java code from that DSL. This includes inferring models from the DSL that map to Java classes and methods. Xtext also supports integrating DSLs with Java typesystems and other Java elements.
14. grammar inheritance
Grammar (Parser, Lexer)
Linker
Type System
JvmModel
MyLanguage Interpreter /
Advanced Editor
Eclipse Integration
Debugger
JvmModelInferrer
Mittwoch, 27. März 13
15. Model Inference
Class Customer
entity Customer {
name: String Field name
address: Address
purchasedItems: Item* Method getName
double sales() {
purchasedItems
returnType String
.map[price]
.reduce[a,b|a+b]
} Method setName
}
parameter name
type String
Mittwoch, 27. März 13
16. Model Inference
entity Customer {
name: String
address: Address
purchasedItems: Item*
double sales() { Method sales
purchasedItems
.map[price] returnType double
.reduce[a,b|a+b]
}
body Expression
}
Mittwoch, 27. März 13
17. class ScriptingJvmModelInferrer extends AbstractModelInferrer {
@Inject extension JvmTypesBuilder
def dispatch void infer(Script script,
IJvmDeclaredTypeAcceptor acceptor,
boolean isPreIndexingPhase) {
acceptor.accept(script.toClass('MyClass'))
.initializeLater [
// the class gets one main method
members += script.toMethod(
'main',
script.newTypeRef(Void::TYPE)) [
parameters += script.toParameter("args",
script.newTypeRef(typeof(String))
.addArrayTypeDimension)
static = true
varArgs = true
// Associate the script as the body of the main method
body = script
]
]
}
}
Mittwoch, 27. März 13
18. The 7 Languages
Scripting Language
DSL for MongoDB
Http Routing Language
Templates Language
DSL for Guice
Build Language
Tortoise
Mittwoch, 27. März 13
19. Find more at
www.eclipse.org/Xtext/7languages.html
Mittwoch, 27. März 13