我正在编写 Xtext 语法,我想支持交叉引用以在我的目标语言中使用变量或参数。
所以目标语言看起来像:
function(p1) {
x1 = eat(p1) // line 1
x2 = eat(x1) // line 2
}
为此,我定义了:
Instruction:
name=Value '=' 'eat' '(' ref=[Instruction|Value] ')'
这适用于第 2 行,但不适用于第 1 行,因为参数不是指令。我尝试将其定义为:
Instruction:
name=Value '=' 'eat' '(' ref=([Instruction|Value] | [Parameter|Value]) ')'
或者这种变化的各种变体——例如,使用可以是两种可能的参考可能性之一的单一Ref
规则——但所有这些都被 Xtext 拒绝。这是可行的,如果可行,怎么做?
(我想另一种方法是定义一个代表参数和指令的单个元素,然后引用它,但如果不允许语法或整个指令出现在参数列表中,我无法弄清楚如何做到这一点)