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

antlr creating a child node from three different possible options

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

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

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

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

将它们全部添加到公共子树列表中:

(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)+