无法真正找到答案。注意:如果重要,使用antlr 3而不是4。 尝试基于三种不同的可能表达式构造子节点。
(variable)* (n_expr|d_expr|s_expr)+
{
} -> ^(FORMULA_DEF n_expr|d_expr|s_expr)
引发错误,因为我无法将(n_expr | d_expr | s_expr)用于子节点。
答案 0 :(得分:0)
将它们全部添加到公共子树列表中:
(variable)* (e+=num_expr|e+=date_expr|e+=string_expr)+
-> ^(FORMULA_DEF INTEGER RCALL $e+)
或者如果您希望为每个expr添加新的FORMULA_DEF
(variable)* (e+=num_expr|e+=date_expr|e+=string_expr)+
-> ^(FORMULA_DEF INTEGER RCALL $e)+