Грамматика ANTLR для определения / вызова многопараметрических функций

У меня есть грамматика, в которую я хотел бы включить многопараметрические функции (например, f (x, y) ]). Я использую вывод AST с моим собственным парсером дерева. Прямо сейчас мой список параметров составляет

paramdefs: (ID COMMA)* ID ;

. Он работает нормально, но вывод AST для

z(x,y)=expression

равен

(FUNC (z)(x)(,)(y)(expression))

(т.е. он очень плоский).

Потомки FUNC CommonTree в целом case, это { имя функции , параметр , запятая , параметр , определенное выражение } для любого числа параметров. Я бы хотел, чтобы список параметров был одним дочерним и не содержал запятых (это упростило бы обход дерева).

В идеале дерево должно выглядеть следующим образом:

(FUNC (z)((x)(y))(expression))

(обратите внимание на отсутствие элемента запятой и группировку x и y .

Соответствующие связанные области грамматики:

funcdef: ID  '(' paramdefs ')' '=' expr -> ^(FUNC ID paramdefs expr) ;

paramdefs: (ID COMMA)* ID ;
6
задан CajunLuke 11 July 2011 в 00:57
поделиться