При создании встроенного интерпретатора ANTLR Tree Grammar я столкнулся с проблемой, касающейся множества аргументов вызова процедуры.
Рассмотрим следующее (ошибочное) определение грамматики дерева.
procedureCallStatement
: ^(PROCEDURECALL procedureName=NAME arguments=expression*)
{
if(procedureName.equals("foo")) {
callFooMethod(arguments[0], arguments[1]);
}elseif(procedureName.equals("bar")) {
callBarMethod(arguments[0], arguments[1], arguments[2]);
}
}
;
Моя проблема заключается в получении данных аргументов. Если бы было известное количество выражений, я бы просто присвоил значения, выходящие из этих выражений, их собственной переменной, например ::10000
procedureCallStatement
: ^(PROCEDURECALL procedureName=NAME argument1=expression argument2=expression)
{
...
}
;
Это, однако, не так.
В случае, подобном этому, какова рекомендация по интерпретации переменного числа узлов дерева, встроенных в грамматику дерева ANTLR?