验证字符串的唯一名称和可选引用

时间:2015-08-20 19:37:54

标签: xtext

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])?
;

所以我的问题是:

  1. 由于枚举文字列表是ValidID,它似乎由EStrings表示。该文档似乎没有处理ECore中原始类型的情况。如何检查文字中的非重复项,并在编辑器中充分报告(即错误应该是重复文字的第一次出现)?

  2. 尽管我付出了最大努力,但仍无法为相反的参考编写自定义范围。由于XText使用反射来检索范围方法,我怀疑我没有正确的方法:我试过def scope_Reference_opposite(Reference context, EReference r),这是正确的吗?我将非常感激一个例子,我相信我可以很容易地适应我的真实情况。 DSL。

  3. 非常感谢您的帮助,您将为我节省大量时间,一次又一次地寻找文档解决方案......

1 个答案:

答案 0 :(得分:0)

  1. 错误可以附加到多值功能的某个索引。为类型Enumeration编写验证并检查重复项的文字列表。将错误附加到列表中的索引。
  2. 签名是正确的。您是否导入了正确的'参考'或者您是否偶然使用了具有相同简单名称的其他类。另请注意,您的语法似乎对于引用的类型是错误的。这应该是type=[Class]或更有可能type=[Class|ValidID]。 如果您打算使用或已经使用Xbase,情况可能会有所不同。 Xbase没有使用反射范围提供商。