2

我花了几天时间试图想出一个在 Xtext DSL 中引用 C++ 类型的解决方案。至此,我已经非常熟悉用于引用 Java/JVM 类型的 Xtext/Eclipse 机制了。

大概要执行类似于 JVM 导入机制的操作,我必须将现有的(可能相当大的)CDT 索引保存为 Ecore,并将该 Ecore 导入我的 Xtext Grammar。

我正在考虑的另一种选择是对现有 CDT 索引的一些编程挂钩。似乎这个选项可能更难,因为它可能涉及更多的自定义代码来实现。

有没有人在 Xtext 语法/DSL 中发现并成功实现了 C++ 类型的引用?有什么例子吗?对更好的解决方案有什么建议吗?就此而言,我提出的任何一个解决方案似乎都是合理/可行的吗?

谢谢你。

4

1 回答 1

0

要真正能够在 Xtext DSL 中引用 C++ 或任何非 Xtext 元素,您必须将可引用元素带入 Xtext 的索引中。

正确的做法是拥有一个包含 CDT 索引的 IAllContainerState,并为每个 C++ 文件创建一个 IResourceDescription。CDT 索引应包含有关所包含资源、类型和名称的信息,这可以映射到范围章节中描述的概念:https ://eclipse.org/Xtext/documentation/303_runtime_concepts.html#scoping

GenericResourceServiceProvider 可用于 C++ 资源的 IResourceServiceProvider。

查看 org.eclipse.xtext.resource.generic 包以及它如何用于索引 .ecore 模型。

于 2016-11-16T23:18:04.820 回答