我需要以编程方式将符合 XText 语法的文本转换为符合 XText 从相同语法生成的 Ecore 元模型的 AST。
我知道 XText 也会生成实现此类解析器的 Java 类,但我不知道它们在哪里以及如何使用它。
我需要以编程方式将符合 XText 语法的文本转换为符合 XText 从相同语法生成的 Ecore 元模型的 AST。
我知道 XText 也会生成实现此类解析器的 Java 类,但我不知道它们在哪里以及如何使用它。
这个问题的完整答案可以在 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
) 更改为您自己的语言扩展名。
这是代码:
@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。