我能让PEG.js返回一个默认值而不是抛出一个解析错误吗?
基本上,我想要
/ anything:.* {return anything} 在我的语法中,但如果任何规则部分数学,它仍然会抛出一个解析错误。
所以
start
= digits:[0-9]+
/ anything:.* {return "hello world"+anything}仍然会在"546aueu“上抛出一个解析错误。在http://pegjs.org/online上试试
我如何让解析器返回一些东西而不是抛出一个错误。
据我所知,它应该尝试匹配第一个规则,如果失败,它应该匹配第二个规则。
谢谢您的帮助和建议。
发布于 2015-03-12 20:08:20
您可以尝试使用! 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"
}发布于 2016-06-06 22:29:30
要做到这一点,只能将回退作为每个可能失败的规则中的最后一项。这是因为pegjs不做回溯,所以当一个规则匹配时,它要么成功,要么退出整个流程,并出现解析错误。
https://stackoverflow.com/questions/28298713
复制相似问题