2012-08-08 24 views
7

में एक डीएसएल स्क्रिप्ट को पार्सल रूप से पार्स करने के लिए मुझे एक एक्सटीक्स्ट व्याकरण के अनुरूप एक पाठ को प्रोग्राम करने के लिए एक ही व्याकरण से XText द्वारा जेनरेट किए गए एक ईकोर मेटा-मॉडल के अनुरूप एक पाठ को बदलना होगा।एक्सटेक्स्ट प्रोग्रार्मिक रूप से एक ईकोर मॉडल

मुझे पता है कि एक्सटेक्स्ट ऐसे पार्सर को लागू करने वाले जावा क्लास भी उत्पन्न करता है लेकिन मुझे नहीं पता कि वे कहां हैं और इसका उपयोग कैसे करें।

@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) 
} 

भी http://www.eclipse.org/Xtext/documentation.html#TutorialUnitTests देखें:

उत्तर

7

इस प्रश्न का पूरा उत्तर ग्रहण विकी के Xtext page पर पाया जा सकता है।

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); 

बदलें फाइल एक्सटेंशन (mydsl) अपनी खुद की भाषा विस्तार करने के लिए।

संबंधित मुद्दे