XText新手,我正在努力解决以下MWE语法的两个问题。
Metamodel:
(classes += Type)*
;
Type:
Enumeration | Class
;
Enumeration:
'enumeration' name = ValidID '{' (literals += EnumLiteral ';')+ '}'
;
EnumLiteral:
ValidID
;
Class:
'class' name = ValidID '{'
(references += Reference)*
'}'
;
Reference:
'reference' name = ValidID ':' type = Class ('#' opposite = [Reference])?
;
所以我的问题是:
由于枚举文字列表是ValidID,它似乎由EStrings表示。该文档似乎没有处理ECore中原始类型的情况。如何检查文字中的非重复项,并在编辑器中充分报告(即错误应该是重复文字的第一次出现)?
尽管我付出了最大努力,但仍无法为相反的参考编写自定义范围。由于XText使用反射来检索范围方法,我怀疑我没有正确的方法:我试过def scope_Reference_opposite(Reference context, EReference r)
,这是正确的吗?我将非常感激一个例子,我相信我可以很容易地适应我的真实情况。 DSL。
非常感谢您的帮助,您将为我节省大量时间,一次又一次地寻找文档解决方案......
答案 0 :(得分:0)
type=[Class]
或更有可能type=[Class|ValidID]
。
如果您打算使用或已经使用Xbase,情况可能会有所不同。 Xbase没有使用反射范围提供商。