Javascript 使用Nearley.js解析时的友好错误报告
是否可以使用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);
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;
};