У меня есть грамматика, в которую я хотел бы включить многопараметрические функции (например, 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 ;