【问题标题】:stop peg.js from throwing ParseError阻止 peg.js 抛出 ParseError
【发布时间】:2016-06-06 22:29:30
【问题描述】:

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

基本上我想拥有

/ anything:.* {return anything} 

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

所以

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

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

我怎么知道让解析器返回一些东西而不是抛出错误。

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

感谢任何帮助和建议。

【问题讨论】:

    标签: javascript peg pegjs


    【解决方案1】:

    您可以尝试使用! 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"
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-22
        • 2021-01-28
        相关资源
        最近更新 更多