eclipse - 如何修复xtext上的简单错误?

这是我的示例,向您展示我需要调用两个规则的问题

generate umlDsl "http://www.xtext.org/example/umldsl/UmlDsl"

Model:
elements+=rule*
;
rule:
   rul1 'and' rul2
;

rul1:
   'rul1' action1=[uml::Action|FQN]
;                       

rul2:
    'rul2' action2=[uml::Action|FQN]
;

FQN returns ecore::EString:
   ID ("." ID)*
;

我有这个错误

此行有多个标记(rul1'和'rul2)
  • 当“当前”时,不允许进行未分配的规则调用
    已创建。
  • 无法在规则
  • 中两次更改类型

    我想知道为什么会有这个错误,以及如何解决

    最佳答案

    发生这些错误是由于规则rule的规则实现

    rule:
       rul1 'and' rul2
    ;
    

    据我了解,rule具有两个属性,rul1rul2。但是在您的实现中,rule没有任何属性。要将rul1rul2定义为属性,您已将这些元素分配给属性。可能看起来像这样:
    rule:
       rul1=rul1 'and' rul2=rul2
    ;
    

    您是否查看过Xtext文档[1]以了解语法语言的语法和语义?

    您需要了解以下内容来理解错误:

    解析器规则的属性需要一个名称。您为此名称分配一个值,这是另一个解析器规则名称。类似于将值赋给Java中的字段:
    int i = 42;
    

    字段声明由字段类型(int)和字段名称(i)组成,通常后面是赋值运算符(=)和值(42)。解析器规则的属性定义遵循以下方案:
    RuleA: 'some syntax' attributeName=OtherRule 'more syntax';
    OtherRule: 'other syntax' attribute=NextRule ... ;
    ...
    

    Xtexts语法语言中的解析器规则就像Java类。 RuleName对应于class ClassName。然后,您可以使用'keyword'定义一些静态语法。如果任何其他规则应在任何其他规则内出现,则可以将其理解为字段声明。此规则是这样实现的属性:
    attributeName=AnyRule
    

    其中attributeName对应于字段名称。但是,为属性分配了值的类型(AnyRule)。

    顺便说一句。我强烈建议规则名称应以大写字母开头,属性名称应以小写字母开头。

    [1] https://www.eclipse.org/Xtext/documentation/301_grammarlanguage.html

    https://stackoverflow.com/questions/29008166/

    相关文章:

    compiler-errors - 由于 glib 错误,无法处理 gobject-introspe

    scala - 在scala中的构造函数内部调用函数

    haskell - 实例化类时发生编译错误

    c# - Unity 在编译有效的 C# 类时遇到问题

    asp.net - 错误: SignalRRouteExtension.Mapconnection

    jsf - ServletContext.TEMPDIR无法解析或不是字段

    c# - 为什么这种编译方式有所不同?

    c# - 类数组使用产生错误 "NullReferenceException: Object ref

    compiler-errors - 在Solaris Sparc 11下强制使用Sun Studio

    scala - 使用 Deadbolt 2 : overriding method getSubje