http://live.eclipse.org/node/705
Eclipse Live Webinar on
Sven Efftinge, Heiko Behrens
itemis
Agenda
What is Xtext?
DSLs - An Example
Underlying Technology
Advanced Topics
Questions & Answers
?
What is
A Language Framework
Yet another
Parser Generator?
JavaCC
Yet another
Parser Generator?
t ha t!
than
ore
it’sm
No,
JavaCC
How does Xtext
relate to ...
IDE Meta-tooling Platform (IMP)
Dynamic Language Toolkit (DLTK)
How does Xtext
relate to ...
IDE Meta-tooling Platform (IMP) !
at
an th
o re th
t is m
Xt ex Language Toolkit (DLTK)
Dynamic
Is it a language workbench?
JetBrains Meta Programming System
Intentional Domain Workbench Microsoft Oslo
Is it a language workbench?
le te ly
m p rc e!
it’s co s ou
ut en
JetBrains Meta Programming System
,b op
Y es a nd
as ed
t ex t-b
Intentional Domain Workbench Microsoft Oslo
Xtext is a complete environment
for development of textual
- programming languages and
- domain-specific languages.
It is implemented in Java and is
based on Eclipse, EMF, and Antlr.
Domain-Specific Language (DSL)
A DSL is a formal, processable language
targeting at a specific viewpoint or
aspect of a software system.
Its semantics, flexibility and notation is
designed in order to support working
with that viewpoint as good as possible.
Rd2-c2
“ Queen to c7.
Check.”
“ Rd2-c2 ,
rook at d2 moves to c2.”
Moves in Chess:
!ook at a1 moves to a5.
P
iece S q uare A
ction
De stin ation
"ishop at c8 captures knight at h3.n
P
iece S q uare io
Action
D
es tinat
# b1 x c3
Piece S qua re ction stination
AD e
$2 - g4
ation
S A D
quar
e ction e stin
ar
Model
m
m
ra
G
Generator Fragments
Generator
Runtime
Superclass
Subclass Class
LL(*) Parser ecore meta model editor
Composable
Code Generator
! generator is composed of “fragments”
! fragments can contribute to:
! Manifest.MF
! plugin.xml
! Guice modules
! Add your own fragments
ar
Model
m
m
ra
G
Generator
Runtime
Google Guice
Superclass
Subclass Class
LL(*) Parser ecore meta model editor
licensed by http://www.wordle.net/
MyCustomLabelProvider
licensed by http://www.wordle.net/
Dependency Injection with
Googlee
!No dependency to concrete implementation
!No explicit construction
!Easy testing
!Easy composition
Configuration of Components
in Xtext
/**
* used to register components to be used within the IDE.
*/
public class DomainmodelUiModule
! ! extends GeneratedDomainmodelUiModule {
!
! @Override
! public Class<? extends ILabelProvider> bindILabelProvider() {
! ! return MySpecialLabelProvider.class;
! }
}
DEMO
Advanced Topics
Integration with EMF
eclipse
Any EMF-based modeling
Code Generator GMF Editor P R O J E C T
Component
<<abstract>> XMI
XMIResource
Resource
XtextResource Text
Parser Linker Serializer
ValueConverter ScopeProvider Formatter
Working with Xtext
// initialization and setup (only needed in standalone mode)
new EntityStandaloneSetup().createInjectorAndDoEMFRegistration();
// standard EMF API usage
ResourceSet resourceSet = new ResourceSet();
Resource resource = resourceSet.getResource(uriToModelFile, true);
Model model = (Model) resource.getContents().get(0);
// print the name of all types to the console
for (Type type : model.getElements()) {
System.out.println(type.getName());
}
Eclipse Helios
•Model Index
• Grammar Mixins
• Base Language
• UI Features
0 comments
Post a comment