我正在编写一种简单的语言,但我有一个左递归,我不知道如何解决。
booleanExpression
: expression EQUALS expression
;
numericExpression
:
;
expression
: booleanExpression
| numericExpression
;
正如您所看到的
booleanExpression
与 expression
一样递归,因为例如这是一个布尔表达式 1 == 1
并且等号的每一侧都可以有任何内容,并且在这种情况下的任何内容都是由表达式定义的。
我该如何解决这个问题?
谢谢
ANTLR4 不支持间接左递归,但是直接左递归是:
expression
: expression HIGHER_PRECEDENCE_OPERATOR expression
| expression EQUALS expression
| expression LOWER_PRECEDENCE_OPERATOR expression
| ...
| '(' expression ')'
| NUMBER
| STRING
| ...
;