Я пишу грамматику 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. Выполнимо ли это, и если да, то как?
(Я предполагаю, что альтернативой будет определение одного элемента, который представляет и параметр, и инструкцию, а затем ссылка на него, но я не мог понять, как это сделать, не допуская появления синтаксиса или целой инструкции в список параметров)