我正在尝试使用 grako 来描述一个简单的左递归语法,但我很难这样做。
右递归确实可以正常工作:
symbol = /[a-z]/ ;
condition = symbol "AND" condition | symbol ;
start = condition $ ;
根据我发现的所有示例,左递归应该这样描述:
symbol = /[a-z]/ ;
condition = condition "AND" symbol | symbol ;
start = condition $ ;
但是,它不适用于以下给出的规则:
a AND b AND c
我收到此错误:
grako.exceptions.FailedParse: srecur(1:3) Expecting end of text. :
a AND b AND c
^
start
我在这一点上的理解是规则的第一个字符匹配symbol
而不是condition "AND" symbol
,所以 grako 想使用它。但是我的开始规则强制所有角色都被消耗掉了。
我已经尝试使用许多解决方法,但我一直无法找到适合的解决方法。