8

我需要以编程方式将符合 XText 语法的文本转换为符合 XText 从相同语法生成的 Ecore 元模型的 AST。

我知道 XText 也会生成实现此类解析器的 Java 类,但我不知道它们在哪里以及如何使用它。

4

2 回答 2

7

这个问题的完整答案可以在 Eclipse wiki的Xtext 页面上找到。

 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) 更改为您自己的语言扩展名。

于 2012-08-15T09:13:04.000 回答
4

这是代码:

@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

于 2012-08-09T10:47:53.180 回答