处理ANTLR4 JavaScript中的错误

处理ANTLR4 JavaScript中的错误,javascript,error-handling,antlr4,Javascript,Error Handling,Antlr4,我正在使用Antlr4JavaScript为自定义语言创建一种web IDE 这一切都很好,除了错误被记录到控制台上,我无法找到一种方法将这些错误重定向到某个地方,我可以将它们呈现给用户 目前,它们在JS控制台上显示如下: 有人能告诉我正确的方向吗(我需要编辑哪个文件等)?不能直接与Javascript实现对话,但对于Java,有: Parser.removeErrorListeners()//删除默认的ConsoleErrorListener Parser.addErrorListener(

我正在使用Antlr4JavaScript为自定义语言创建一种web IDE

这一切都很好,除了错误被记录到控制台上,我无法找到一种方法将这些错误重定向到某个地方,我可以将它们呈现给用户

目前,它们在JS控制台上显示如下:


有人能告诉我正确的方向吗(我需要编辑哪个文件等)?

不能直接与Javascript实现对话,但对于Java,有:

Parser.removeErrorListeners()
//删除默认的ConsoleErrorListener
Parser.addErrorListener(..)
//添加回自定义错误侦听器


在创建解析器之后和运行解析器之前执行此操作

您可以通过实现接口并提供一种接口方法来实现这一点,如
syntaxError
,以便在每次出现错误时调用

class ExprErrorListener extends antlr4.error.ErrorListener {
  syntaxError(recognizer, offendingSymbol, line, column, msg, err) {
    ...
  }
}
禁用默认错误侦听器并使用以下选项启用自定义侦听器:

parser.removeErrorListeners();
parser.addErrorListener(new ExprErrorListener());
请注意,您可以跳过该类并使用可用的
syntaxError
函数传入对象。下面是一个关于
Expr.g4
语法的最小完整示例:

const antlr4 = require("antlr4");
const {ExprLexer} = require("./parser/ExprLexer");
const {ExprParser} = require("./parser/ExprParser");

const expression = "2 + 8 * 9 - \n";
const input = new antlr4.InputStream(expression);
const lexer = new ExprLexer(input);
const tokens = new antlr4.CommonTokenStream(lexer);

const parser = new ExprParser(tokens);
parser.buildParseTrees = true;
parser.removeErrorListeners();
parser.addErrorListener({
  syntaxError: (recognizer, offendingSymbol, line, column, msg, err) => {
    console.error(`${offendingSymbol} line ${line}, col ${column}: ${msg}`);
  }
});

const tree = parser.prog();
给出:

[@6,12:12='\n',1:12]第1行,第12列:不匹配的输入'\n'应为{'(',ID,INT}

另请参见。

无法直接与Javascript实现对话,但对于Java,有Parser.removeErrorListeners(),用于删除默认的ConsoleErrorListener和Parser.addErrorListener(..),以添加回您自己的自定义错误侦听器。请在创建解析器之后和运行解析器之前执行此操作。@GRosenberg谢谢,这帮助我找到了答案!您可以将其作为答案发布,以便我可以接受它吗?