以下一组 antlr 语法行给了我 number_operation 和 number_argument 的错误,如下所示
以下规则集是相互左递归的
number_funtion : COUNT LEFT_PAREN number_argument RIGHT_PAREN
number_operation :
number_argument (number_operator number_argument)+ | LEFT_PAREN number_argument (number_operator number_argument)+ RIGHT_PAREN
| prefix_operator number_argument | LEFT_PAREN prefix_operator number_argument RIGHT_PAREN;
number_argument : number_column | number_function | digit_constant | number_operation ;
为了避免左递归,可以像下面这样使用 number_argument 的每个元素的所有可能组合来修改 number_operation,但是会导致更长的规则。
number_operation :
number_column (number_operator number_argument)+ | LEFT_PAREN number_column (number_operator number_column)+ RIGHT_PAREN
| prefix_operator number_column | LEFT_PAREN prefix_operator number_column RIGHT_PAREN
//and other combinations
有人可以建议在这里删除左递归的最佳方法是什么?