首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Grako左递归

Grako左递归
EN

Stack Overflow用户
提问于 2016-12-21 11:15:35
回答 1查看 112关注 0票数 0

我试图用grako来描述一个简单的左递归语法,但我很难这样做。

右递归确实工作,没有任何问题:

代码语言:javascript
复制
symbol = /[a-z]/ ;
condition = symbol "AND" condition | symbol ;
start = condition $ ;

根据我发现的所有例子,左递归应该这样描述:

代码语言:javascript
复制
symbol = /[a-z]/ ;
condition = condition "AND" symbol | symbol ;
start = condition $ ;

然而,它不适用于以下规则:

代码语言:javascript
复制
a AND b AND c

我知道这个错误:

代码语言:javascript
复制
grako.exceptions.FailedParse: srecur(1:3) Expecting end of text. :
a AND b AND c
  ^
start

我现在了解的是,规则的第一个字符匹配的是symbol,而不是condition "AND" symbol,所以grako想要使用它。但是我的开始规则强制所有的字符都被消耗掉了。

我已经尝试了许多解决办法,但我一直未能找到一个合适的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-28 10:15:25

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

更多细节,这里那里

为了满足我的需要,我用这样的表达方式解决了我的问题:

代码语言:javascript
复制
condition = symbol { "AND" symbol }* ;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41261511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档