antlr从三个不同的可能选项创建子节点

时间:2016-08-25 01:09:02

标签: antlr antlr4 antlr3

无法真正找到答案。注意:如果重要,使用antlr 3而不是4。 尝试基于三种不同的可能表达式构造子节点。

 (variable)* (n_expr|d_expr|s_expr)+
            {

            } -> ^(FORMULA_DEF n_expr|d_expr|s_expr)

引发错误,因为我无法将(n_expr | d_expr | s_expr)用于子节点。

1 个答案:

答案 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)+