サンプル ルールは次のとおりです (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]
;
コメントで説明しました。基本的に、整数のルールは 2 つのルールで構成されています: int_rule
andinteger
と ルールで両方を使用したいですassignment
。ただし、Xtext では 1 つのルールしか参照できず、name
機能はルールの 1 つの名前インスタンスのみを参照できますが、例のように同じルール内の複数の名前インスタンスは参照できません。両方のルールの両方の情報が本当に必要ですが、一方しか参照できません。