Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF...
Transcript of Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF...
![Page 1: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/1.jpg)
Budapes( Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék
Textual DSL Crea.on III.
Xtext – Advanced capabili.es
![Page 2: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/2.jpg)
Previously ! Xtext workflow ! Grammar specifica.on ! AST inference ! Basic customiza.on (in lab)
2
![Page 3: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/3.jpg)
Usage process Define abstract
syntax
Define concrete syntax
Code genera.on
Customiza.on
Evalua.on/Use
Ecore metamodel (opcional)
Grammar + metamodel inference
MWE workflow
Extensible via Java
![Page 4: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/4.jpg)
Languages and models
Language
Textual descrip.on
Metamodel
Instance model
Inference
Parsing
![Page 5: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/5.jpg)
Customiza(on
5
![Page 6: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/6.jpg)
Customiza.on ! Re-‐defineable services
o Scoping: to help link resolu(on o FormaFng: rule-‐based preIy prin(ng
o Valida(on: well-‐formedness constraint valida(on o Content Assist: e.g. filtering o Labeling: based on JFace Label Provider API o Outline: Outline view customiza.on o Quick Fix: sugges.ng automa.c fixes
6
![Page 7: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/7.jpg)
Scoping ! Problem:
o Variables/objects have scope defined
o Scoping is language-‐dependant
o Xtext default • Only container and sibling object available
7
![Page 8: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/8.jpg)
Scoping ! Problem:
o Variables/objects have scope defined
o Scoping is language-‐dependant
o Xtext default • Only container and sibling object available
community BME { community FTSRG } person UjhelyiZoltan { member … }
8
![Page 9: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/9.jpg)
Scoping ! Problem:
o Variables/objects have scope defined
o Scoping is language-‐dependant
o Xtext default • Only container and sibling object available
community BME { community FTSRG } person UjhelyiZoltan { member … }
9
Which communi.es are visible here?
![Page 10: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/10.jpg)
Scoping ! Problem:
o Variables/objects have scope defined
o Scoping is language-‐dependant
o Xtext default • Only container and sibling object available
community BME { community FTSRG } person UjhelyiZoltan { member … }
10
Only BME
Which communi.es are visible here?
![Page 11: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/11.jpg)
Scoping service ! Problem
o List all possible targets for a selected reference o Ignore name
! Implementa.on o Global scoping • For references crossing files • Usually based on explicit import declara.ons
o Local scoping • For lis.ng targets from the current file • Declara(ve, rule-‐based approach
11
![Page 12: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/12.jpg)
Declara.ve scoping ! AbstractDeclara.veScopeProvider class
o Two kind of generic solu.ons • IScope scope_<RefDeclaringEClass>_<Reference> (ContextType> ctx, EReference ref)
• IScope scope_<TypeToReturn> (<ContextType> ctx, EReference ref)
o Similar to visitor padern • But without all the required methods in base class
– Parent classes does not list all possible scope_* methods – Selected via (EMF) reflec.ve API
12
![Page 13: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/13.jpg)
Declara.ve scoping ! Methods used to
o Enumerate all available items o Parameters: • Source of reference (context, or declaring item) • Type of reference (EClass)
13
![Page 14: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/14.jpg)
Declara.ve scoping: Example public IScope scope_Person_membership(final Person context, EReference reference) { //Naive scoping SocialNetwork network = (SocialNetwork) context.eContainer(); Iterable<Community> communities =
Iterables.filter(network.getEntities(),Community.class); List<Community> communityList = new ArrayList<Community>(); for (Community community : communities) { addChildren(communityList, community); } return Scopes.scopeFor(communityList); }
14
![Page 15: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/15.jpg)
Google Collec.ons ! Google Guava
o hdp://code.google.com/p/guava-‐libraries/
! Func.onal-‐style collec.on opera.ons o Closures o Lazy evalua.on
! Precondi.ons
15
![Page 16: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/16.jpg)
Valida.on ! Well-‐formedness valida.on
o Aker parsing/resolu.on finishes o Approach • Any EMF-‐based approach might work (e.g. OCL) • Xtext provides a rule-‐based validator
16
![Page 17: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/17.jpg)
Java-‐based validator ! Valida.on rule: a method
o Annotated with @Check • Parameter selects how oken it should be validated
o Single parameter: a type from the AST
! Base class defines warning/error methods o EMF metamodel literals are used to locate error o Error code can be added o Addi.onal informa.on might be added • Untyped object array • Usable by quick fixes
17
![Page 18: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/18.jpg)
Validator example @Check public void noNameCollision(Community entity) { noNameCollision(entity, entity.eContainer().eContents(), SocialNetworkPackage.Literals.SOCIAL_ENTITY__NAME); }
private void noNameCollision(EObject eObject, List<EObject> siblings, EStructuralFeature nameFeature) { String name = (String) eObject.eGet(nameFeature); for (EObject sibling : siblings) {
if(name.equals(sibling.eGet(nameFeature)) && eObject != sibling) {
error("Duplicate name", nameFeature.getFeatureID()); }
} }
18
![Page 19: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/19.jpg)
Formader ! Automa.c code gormamng:
o Inserts white space characters ! When to execute
o Started by user o Aker AST edi.ng during serializa.on
! Formamng rules o Selec.ng lexer tokens o Adds selected white spaces o Defined in Java
19
![Page 20: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/20.jpg)
Selec.on primi.ves ! aker(token) ! before(token) ! around(token) ! between(token1, token2) ! bounds(token1, token2) ! range(token1, token2)
20
![Page 21: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/21.jpg)
White space inser.on ! setIndenta.onIncrement ! setIndenta.onDecrement ! setLinewrap ! setSpace ! setNoSpace
21
![Page 22: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/22.jpg)
Formamng example protected void configureFormaFng(FormaFngConfig c) { SocialNetworkGrammarAccess access = (SocialNetworkGrammarAccess) getGrammarAccess(); SocialNetworkElements sne = access.getSocialNetworkAccess(); c.setLinewrap(1, 1, 1).aker(sne.getLekCurlyBracketKeyword_2()); c.setLinewrap(1, 1, 1).before
(sne.getRightCurlyBracketKeyword_5()); c.setLinewrap(1, 1, 1).aker(sne.getEn..esAssignment_3()); c.setLinewrap(2, 2, 2).before
(sne.getAcquaintancesAcquaintanceParserRuleCall_4_0()); c.setIndenta.onIncrement().aker
(sne.getLekCurlyBracketKeyword_2()); c.setIndenta.onDecrement().before
(sne.getRightCurlyBracketKeyword_5());
22
![Page 23: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/23.jpg)
Service Registra(on in Xtext
23
![Page 24: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/24.jpg)
Xtext Service Registra.on
24
![Page 25: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/25.jpg)
Xtext Service Registra.on ! Based on dependency injec.on
o Google Guice: hdp://code.google.com/p/google-‐guice/
! Uses Genera.on gap padern extensively o Generic and Generated implementa.ons of services o Custom implementa.ons can be injected
25
![Page 26: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/26.jpg)
Xtext Service Registra.on ! Based on dependency injec.on
o Google Guice: hdp://code.google.com/p/google-‐guice/
! Uses Genera.on gap padern extensively o Generic and Generated implementa.ons of services o Custom implementa.ons can be injected
26
![Page 27: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/27.jpg)
Dependency Injec.on
27
![Page 28: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/28.jpg)
Dependency Injec.on ! Depedency injec.on design padern
o A class should not instan.ate its dependencies o Instead sedable via seders or constructor parameters
! DI frameworks available o Annota.on-‐based injec.on o Management of injectable services/components
28
![Page 29: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/29.jpg)
Dependency Injec.on ! Depedency injec.on design padern
o A class should not instan.ate its dependencies o Instead sedable via seders or constructor parameters
! DI frameworks available o Annota.on-‐based injec.on o Management of injectable services/components
29
![Page 30: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/30.jpg)
Dependency Injec.on: Example public interface IGenerator {
/** * @param input -‐ the input for which to generate resources * @param fsa -‐ file system access to be used to generate files */ public void doGenerate(Resource input, IFileSystemAccess fsa);
}
30
File System Access: abstrac.on of file opera.ons
![Page 31: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/31.jpg)
Dependency Injec.on in Xtext – 1. ! Injectable services are configured in modules
o Run.meModule • Core services • Works in any Java applica.on
o UIModule • Editor, user interface • Eclipse-‐specific services
o TestModule • Test implementa.ons • Might include sources
31
![Page 32: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/32.jpg)
Registering Services
32
![Page 33: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/33.jpg)
Dependency Injec.on in Xtext – 2. ! Abstract module parents generated ! Overridable descendant available
o Custom implementa.on registra.on o Custom service registra.on
33
![Page 34: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/34.jpg)
Xbase
34
![Page 35: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/35.jpg)
Xbase ! Expression language
o Embeddable into custom DSL (base language)
! Code generator via inferred JVM model o Generated code always in Java
! Extra features o Debugger o IDE links
35
![Page 36: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/36.jpg)
Integra(on with EMF technologies
![Page 37: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/37.jpg)
Integra.on with EMF technologies
Resource XMIResource
Code Generator GMF Editor Other EMF
XMI
37
![Page 38: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/38.jpg)
Integra.on ! Xtext
o Custom EMF resource implementa.on o Registered via EMF extension point • org.eclipse.emf.ecore.extension_parser
o Can be handled transparently • Except when using Xbase " • In case of Xbase addi.onal registra.on required
38
![Page 39: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/39.jpg)
GMF editor ! Domain model can be Xtext resource
o Automa.c synchroniza.on on save
! GMF editor must maintain serializability! o GMF does not know grammar o Luckily, not much is required here
39
![Page 40: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/40.jpg)
GMF and Xtext editor
40
![Page 41: Textual(DSL(Creaon(III.( - inf.mit.bme.hu · PDF fileBudapes()Műszaki)és)Gazdaságtudományi)Egyetem) Méréstechnika)és)Információs)RendszerekTanszék Textual(DSL(Creaon(III.(Xtext–Advanced(](https://reader034.fdocument.pub/reader034/viewer/2022051718/5a709f2f7f8b9aa7538c3116/html5/thumbnails/41.jpg)
Summary -‐ Xtext ! Easy to extend implementa.on
o Sane defaults o Easy to use
! Problems o Xbase is highly experimental o Can be quite complex o Somewhat large dependecy list
41