У меня есть грамматика, в которую я хотел бы включить многопараметрические функции (например, f(x,y)
).Я использую вывод AST с моим собственным анализатором дерева.Прямо сейчас мой список параметров производства
paramdefs: (ID COMMA)* ID ;
Это работает нормально, но вывод AST для
z(x,y)=expression
равен
(FUNC (z)(x)(,)(y)(expression))
(то есть он очень плоский).
Дочерние элементы FUNC
CommonTree в общем случае являются {function name
, parameter
, comma
, parameter
, defined expression
} для любого количества параметров.Я бы хотел, чтобы список параметров был единственным ребенком и не имел запятых (это облегчило бы обход дерева).
В идеале дерево должно выглядеть так:
(FUNC (z)((x)(y))(expression))
(обратите внимание на отсутствие элемента запятой и группировку x
и y
.
Соответствующие связанные области грамматики:
funcdef: ID '(' paramdefs ')' '=' expr -> ^(FUNC ID paramdefs expr) ;
paramdefs: (ID COMMA)* ID ;