2012-08-08 16 views
7

Ich muss programmgesteuert einen Text, der einer XText-Grammatik entspricht, in ein AST-konformes Ecore-Metamodell umwandeln, das von XText aus derselben Grammatik generiert wird.XText programmieren programmatisch ein DSL-Skript in ein Ecore-Modell

Ich weiß XText auch generieren die Java-Klassen, die solche Parser implementieren, aber ich weiß nicht, wo sie sind und wie sie es verwenden.

Antwort

7

Eine vollständige Antwort auf diese Frage finden Sie auf der Xtext page des Eclipse-Wiki.

new org.eclipse.emf.mwe.utils.StandaloneSetup().setPlatformUri("../"); 
Injector injector = new MyDslStandaloneSetup().createInjectorAndDoEMFRegistration(); 
XtextResourceSet resourceSet = injector.getInstance(XtextResourceSet.class); 
resourceSet.addLoadOption(XtextResource.OPTION_RESOLVE_ALL, Boolean.TRUE); 
Resource resource = resourceSet.createResource(URI.createURI("dummy:/example.mydsl")); 
InputStream in = new ByteArrayInputStream("type foo type bar".getBytes()); 
resource.load(in, resourceSet.getLoadOptions()); 
Model model = (Model) resource.getContents().get(0); 

Ändern Sie die Dateierweiterung (mydsl), um Ihre eigene Spracherweiterung.

4

Hier ist der Code:

@Inject 
ParseHelper<Domainmodel> parser 

def void parseDomainmodel() { 
    // When in a vanilla Java application (i.e. not within Eclipse), 
    // you need to run a global setup: 
    val injector = new MyDslStandaloneSetup().createInjectorAndDoEMFRegistration 
    injector.injectMembers(this) // sets the field 'parser' 

    // this is how you can use it: 
    val model = parser.parse(
    "entity MyEntity { 
     parent: MyEntity 
    }") 
    val entity = model.elements.head as Entity 
    assertSame(entity, entity.features.head.type) 
} 

Siehe auch http://www.eclipse.org/Xtext/documentation.html#TutorialUnitTests.