这是示例规则(只需将其替换为 MyDsl 语法):
Start:
elem += (integer)*
;
int_rule:
'int' (name += integer ('=' values += INT)?) (',' name+=integer ('=' values += INT)?)* ';'
;
/* I have to put the rule name as "integer", so when users hover
* on variable names, they see exactly type "integer". This is a bit
* adhoc, but it's acceptable for the time being. However, using this method
* If some other rules refer to "integer", it can only either retrieve the name
* in this "integer" rule or its
*/
integer:
name = ID
;
/*
* Example: assignment like num1 = 2, num2 = 3.... the variable name of type
* integer can't be referred, since I have to either refer to "int_rule" rule to
* retrieve its value or "integer" to retrieve its name. I can't get both.
*/
assignment:
name = [integer] // or name = [int_rule]
;
我在评论中解释了。基本上,整数规则由两个规则组成:int_rule
并且integer
我想在规则中使用这两个assignment
规则。但是,Xtext 只能让我引用一个规则,并且该name
功能只能引用规则的一个名称实例,而不能像示例中那样在同一规则中引用多个名称实例。我真的需要这两个规则中的两个信息,但我只能参考其中一个。