[英]Grako left recursion
我正在尝试使用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希望使用它。 但是我的开始规则要求所有角色都被消耗掉。
我尝试使用许多变通方法,但是找不到合适的变通方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.