繁体   English   中英

Grako左递归

[英]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希望使用它。 但是我的开始规则要求所有角色都被消耗掉。

我尝试使用许多变通方法,但是找不到合适的变通方法。

Grako实际上是PEG解析器。 这些解析器具有无法轻松处理左递归的隐含属性。

更多细节在这里那里

对于我的需求,我已经可以使用以下表达式解决我的问题:

condition = symbol { "AND" symbol }* ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM