当前位置: 首页 > 知识库问答 >
问题:

XText以编程方式将DSL脚本解析为Ecore模型

许昆
2023-03-14

我需要通过编程将符合XText语法的文本转换为符合XText从同一语法生成的Ecore元模型的AST。

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

共有2个答案

伏砚
2023-03-14

以下是代码:

@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.

白昊乾
2023-03-14

这个问题的完整答案可以在EclipseWiki的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)更改为您自己的语言扩展名。

 类似资料:
  • 我正在尝试使用Thymeleaf模板呈现XML/JSON。我不想使用模板名称渲染视图,只想解析模板,如下所示。问题是我得到的只是模板名,而不是它的内容。 设置: 模板(src/main/resources/templates/早餐菜单.xml): 用法: 使用Thymeleaf3.0。0.BETA01。

  • 简短:给定(groupId,artifactId,version,repository URL),我可以用编程方式让Maven解析工件URL吗? Long:给定(groupId、artifactId、version、repository URL),可以下载一个Maven工件。工件的URL通常如下所示: 方案://{repository}/{groupId}/{artifactId}/{versio

  • 如何将XSD 1.1模式自动转换为XSD 1.0模式,方法是去掉所有1.1功能,只保留与XSD 1.0兼容的子集? 我意识到这将限制您可以利用多少XSD 1.1功能,但是我想象的用例是一个模式,您可以发布XSD 1.1版本和更兼容的XSD 1.0版本,两者都描述相同的数据结构但是1.1版本有一些额外的

  • 问题内容: 是否可以通过命令在任何行停止执行python脚本? 喜欢 问题答案: sys.exit()可以完全满足您的要求。

  • 问题内容: 我可以下载并安装一封来自PyPI Python模块严格意义上的脚本中,不使用外壳 在所有 ? 我使用非标准的Python环境,即Autodesk Maya的Python解释器。它不带有“ easy_install”,也没有“ shell”,只有主要Maya可执行文件调用的python脚本解释器。将ez_setup.py的内容复制并粘贴到脚本编辑器窗口中并正确运行,将easy_insta

  • 我正在以编程方式运行Mwe2工作流,为了成功运行此工作流,我需要将Terminals.xtext的referencedResource添加到GenerateYourdsl.Mwe2文件中。提到的GenerateYourdsl.mwe2文件是在我创建新项目时由Xtext生成的--我没有修改它。是否有可能从这个工作流中获取对象,用Java访问它,并将这个属性添加到工作流组件属性的语言属性中? 以下是工