0

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

基本上我想拥有

/ anything:.* {return anything} 

在我的语法中,但如果任何规则部分数学,它仍然会引发 Parse 错误。

所以

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

仍然会在“546aueu”上引发解析错误。试试http://pegjs.org/online

我怎么能告诉解析器返回一些东西而不是抛出错误。

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

感谢任何帮助和建议。

4

2 回答 2

1

您可以尝试使用!运算符

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"
}
于 2015-03-12T12:08:19.567 回答
0

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

于 2016-06-06T14:29:30.363 回答