首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阻止peg.js抛出ParseError

阻止peg.js抛出ParseError
EN

Stack Overflow用户
提问于 2015-02-03 20:17:01
回答 2查看 430关注 0票数 0

我能让PEG.js返回一个默认值而不是抛出一个解析错误吗?

基本上,我想要

代码语言:javascript
复制
/ anything:.* {return anything} 

在我的语法中,但如果任何规则部分数学,它仍然会抛出一个解析错误。

所以

代码语言:javascript
复制
start 
  = digits:[0-9]+ 
  / anything:.* {return "hello world"+anything}

仍然会在"546aueu“上抛出一个解析错误。在http://pegjs.org/online上试试

我如何让解析器返回一些东西而不是抛出一个错误。

据我所知,它应该尝试匹配第一个规则,如果失败,它应该匹配第二个规则。

谢谢您的帮助和建议。

EN

回答 2

Stack Overflow用户

发布于 2015-03-12 20:08:20

您可以尝试使用! operator

代码语言:javascript
复制
start 
  = digits:[0-9]+ ![^0-9] { return {type: 'digits', number: digits.join('')}; }
  / anything:.* { return { type: 'anything', anything: anything.join('') }; }


parser.parse('123456')

{
   "type": "digits",
   "number": "123456"
}

parser.parse('123abc456')

{
   "type": "anything",
   "anything": "123abc456"
}
票数 0
EN

Stack Overflow用户

发布于 2016-06-06 22:29:30

要做到这一点,只能将回退作为每个可能失败的规则中的最后一项。这是因为pegjs不做回溯,所以当一个规则匹配时,它要么成功,要么退出整个流程,并出现解析错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28298713

复制
相关文章

相似问题

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