这是我的示例,向您展示我需要调用两个规则的问题
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)*
;
最佳答案
发生这些错误是由于规则rule
的规则实现
rule:
rul1 'and' rul2
;
rule
具有两个属性,rul1
和rul2
。但是在您的实现中,rule
没有任何属性。要将rul1
和rul2
定义为属性,您已将这些元素分配给属性。可能看起来像这样:rule:
rul1=rul1 'and' rul2=rul2
;
int i = 42;
RuleA: 'some syntax' attributeName=OtherRule 'more syntax';
OtherRule: 'other syntax' attribute=NextRule ... ;
...
RuleName
对应于class ClassName
。然后,您可以使用'keyword'
定义一些静态语法。如果任何其他规则应在任何其他规则内出现,则可以将其理解为字段声明。此规则是这样实现的属性:attributeName=AnyRule
attributeName
对应于字段名称。但是,为属性分配了值的类型(AnyRule)。https://stackoverflow.com/questions/29008166/