如何修复 xtext 上的一个简单错误?
how to fix a simple error on 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 'and' rul2)
- 不允许调用未分配的规则,当 'current'
已创建。
- 不能在一条规则内更改类型两次
我想知道为什么会出现这个错误以及如何解决
这些错误的发生是因为您对规则 rule
的规则实施
rule:
rul1 'and' rul2
;
据我了解,rule
有两个属性,rul1
和 rul2
。但是在您的实现中 rule
没有任何属性。要将 rul1
和 rul2
定义为属性,您已将这些元素分配给一个属性。这可能看起来像这样:
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 class。 RuleName
对应class ClassName
。然后你可以用'keyword'
定义一些静态语法。如果任何其他规则应该出现在任何其他规则中,则可以将其理解为字段声明。这个规则是一个属性,它是这样实现的:
attributeName=AnyRule
其中attributeName
对应字段名。但是为属性分配了值的类型 (AnyRule)。
顺便说一句。我强烈建议规则名称应以大写字母开头,属性名称应以小写字母开头。
[1] https://www.eclipse.org/Xtext/documentation/301_grammarlanguage.html
这是我向您展示我需要调用两个规则的问题的示例
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 'and' rul2)
- 不允许调用未分配的规则,当 'current' 已创建。
- 不能在一条规则内更改类型两次
我想知道为什么会出现这个错误以及如何解决
这些错误的发生是因为您对规则 rule
rule:
rul1 'and' rul2
;
据我了解,rule
有两个属性,rul1
和 rul2
。但是在您的实现中 rule
没有任何属性。要将 rul1
和 rul2
定义为属性,您已将这些元素分配给一个属性。这可能看起来像这样:
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 class。 RuleName
对应class ClassName
。然后你可以用'keyword'
定义一些静态语法。如果任何其他规则应该出现在任何其他规则中,则可以将其理解为字段声明。这个规则是一个属性,它是这样实现的:
attributeName=AnyRule
其中attributeName
对应字段名。但是为属性分配了值的类型 (AnyRule)。
顺便说一句。我强烈建议规则名称应以大写字母开头,属性名称应以小写字母开头。
[1] https://www.eclipse.org/Xtext/documentation/301_grammarlanguage.html