我正在尝试在 python 中创建自己的递归下降解析器,但是当我的解析器遇到有关算术表达式的规则时,它超过了 python 递归限制。这是语法:
Term --> Factor {( "+" | "-" ) Factor}
Factor --> Grouping {( "*" | "/" | "%" ) Grouping}
Grouping --> Expression | "(" Expression ")" | "-" Factor
Expression --> Integer | Float | Tuple | ID | Term
语法中的花括号表示它们可以重复(但也是可选的),并且在我的解析器中使用 while 循环来实现。我觉得造成这种情况的原因是Grouping
规则可以是 and (它可以一遍又一遍地重复,因为and规则Expression
的右侧是可选的)。Factor
Term
我要问的是:有没有办法用递归下降解析器实现左递归或以某种方式在我的语法中消除它?
编辑:我在四处浏览,似乎这种类型的递归称为间接左递归,也许这与它有关?