停止peg.js抛出ParseError

时间:2015-02-03 12:17:01

标签: javascript peg pegjs

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

基本上我想拥有

/ anything:.* {return anything} 

在我的语法中,但如果任何规则部分匹配,它仍然会抛出Parse错误。

所以

start 
  = digits:[0-9]+ 
  / anything:.* {return "hello world"+anything}

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

如何告诉make解析器返回一些内容而不是抛出错误。

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

寻求任何帮助和建议。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用! operator

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"
}

答案 1 :(得分:0)

您只能通过将后备作为可能失败的每个规则中的最后一项来执行此操作。这是因为pegjs不进行回溯,因此当规则匹配时,它将成功或退出整个过程并发生解析错误。