Javascript 使用Nearley.js解析时的友好错误报告

Javascript 使用Nearley.js解析时的友好错误报告,javascript,Javascript,是否可以使用Nearley.js呈现用户友好的解析器错误 const parser = new nearley.Parser((bracketexpr_grammar)); parse(): void{ try { parser.feed(this._sql); this._rawData = parser.results[0]; } catch(error){ console.log(error);

是否可以使用Nearley.js呈现用户友好的解析器错误

const parser = new nearley.Parser((bracketexpr_grammar));
parse(): void{
    try {       
        parser.feed(this._sql);
        this._rawData = parser.results[0];
    } catch(error){
        console.log(error);
        this._errors.push(error.offset);
    }
}
我尝试的是:

  • error.offset
    :仅显示发生错误的行(而不是我想要的行)
  • 错误
    :它给了我一个巨大的错误,例如:

我想要的不是那个巨大的错误,而是更简单、更清晰的东西,比如:

Invalid syntax at line 1 col 1:

b4d455
^
Unexpected "b"
有可能吗


此扩展错误消息来自更改中对Nearley的更改。这似乎不是当前可配置的。如果您有兴趣请求此功能,可能值得打开一个

在升级到具有此新功能的版本时,我遇到了相同的问题。作为一种解决方法,可以覆盖错误报告以使用以前的实现,尽管这没有文档记录,并且可能会中断,尤其是在升级
Nearley

  const parser = new Parser(...);
  // Nearley error message has been extended to show all possible correct parses.
  // As a workaround, previous implementation has been overwritten here instead.
  // When Nearley allows turning off this extended error messaging, remove this workaround.
  parser.reportError = function(token) {
    var message = this.lexer.formatError(token, 'invalid syntax') + '\n';
    message += 'Unexpected ' + (token.type ? token.type + ' token: ' : '');
    message +=
      JSON.stringify(token.value !== undefined ? token.value : token) + '\n';
    return message;
  };


此扩展错误消息来自更改中对
Nearley
的更改。这似乎不是当前可配置的。如果您有兴趣请求此功能,可能值得打开一个

在升级到具有此新功能的版本时,我遇到了相同的问题。作为一种解决方法,可以覆盖错误报告以使用以前的实现,尽管这没有文档记录,并且可能会中断,尤其是在升级
Nearley

  const parser = new Parser(...);
  // Nearley error message has been extended to show all possible correct parses.
  // As a workaround, previous implementation has been overwritten here instead.
  // When Nearley allows turning off this extended error messaging, remove this workaround.
  parser.reportError = function(token) {
    var message = this.lexer.formatError(token, 'invalid syntax') + '\n';
    message += 'Unexpected ' + (token.type ? token.type + ' token: ' : '');
    message +=
      JSON.stringify(token.value !== undefined ? token.value : token) + '\n';
    return message;
  };