我目前正在做一个项目,我正在用Xtext语法创建一个特征模型。我的任务是将语法语法转换为CSV文件,可导入eclipse插件pure::variants。
特征模型基本上是特征树。这些功能有不同的类型(强制、可选、可选等)。
为了构建树,我使用了生成的xtext语法语法的ecore元模型。这个文件( .ecore )基本上是一个带有语法对象的XML文件。这是一致的,简单,很容易创建出树。
我的问题是,我需要分配类型(强制的、可选的等)。添加到我创建的树的节点。这些类型的特征对应于基数运算符。这些操作符是用xtext语法编写的,如下所示:‘(无运算符)’、‘?’、‘*’和´+´(可以在xtext用户手册的2.1.3 https://www.eclipse.org/Xtext/documentation/1_0_1/xtext.pdf一节中看到)。问题是,这些xtext语法的基数似乎无处可寻。我以为它们会出现在.ecore或.genmodel文件中,但根本没有基数。
我想,如果xtext能够检查和控制这些基数,它必须有某种元模型,其中这些基数是可以看到的,并且很容易获得(类似于.ecore或.genmodel文件的.xml文件)。
所以我的问题是:是否存在某种xtext生成的文件,其中包含这些基数?如果没有,我将不得不以某种方式将这些基数从语法本身中提取出来,但这将是不必要的耗时和复杂的,甚至可能是不可能的,因为书面语法并不完全符合我正在提取的特征树的ecore元模型,并且真的很复杂。
我所能找到的唯一包含“可能有用”的生成文件是生成文件XXXXGrammarAccess.java ( XXXX代表文法的名称),这是一个复杂的生成文件,有很多库依赖,我不知道如何从中获得这些基数,或者它是否可能。我想这是有可能的,因为这个文件使用了很多IGrammarAccess方法,比如getRule()、getKeyword()等等,但是我不能使用这个文件,也不能打印出来,因为它是一个生成的文件,我不能在它自己上运行它。
如果没有我正在寻找的某种元模型,有没有可能在生成过程中以不同的方式获得这些基数?
非常感谢你的回答。
发布于 2019-03-07 03:28:09
首先,元模型和语法中的基数不必100%匹配。解析器中的基数验证与ecore中的不同。
较低的基数1(表示必需的)并不是为了防止真正丑陋的错误消息。但是:1或:-1 (=*)会反映在ecore中。
这是10年前创建Xtext时经过深思熟虑的决定。
语法访问只是让您在运行时访问语法。
你能详细解释一下为什么你真的关心吗?
发布于 2019-03-14 02:46:08
Xtext语法本身就是一个模型,是http://www.eclipse.org/2008/Xtext的一个实例。(过去可以通过使用示例反射Ecore Editor打开一个*.xtext文件来演示这一点,但不幸的是,类路径: URIs的使用再次破坏了它。)尽管如此,您可以以编程方式将*.xtext文件作为EMF资源打开,并查看语法中的所有内容。有关转换链的第一阶段,请参阅https://git.eclipse.org/c/ocl/org.eclipse.ocl.git/tree/examples/org.eclipse.ocl.examples.xtext2lpg/src/org/eclipse/ocl/examples/xtext2lpg/xtext2xbnf.qvto。
https://stackoverflow.com/questions/55018918
复制相似问题