在保留错误消息的同时,如何在python ANTLR生成的解析器中出现第一个语法错误时失败?

在保留错误消息的同时,如何在python ANTLR生成的解析器中出现第一个语法错误时失败?,antlr,antlr4,Antlr,Antlr4,我正在为我的解析器使用antlr.error.ErrorStrategy.BailErrorStrategy。有时(取决于输入),它会报告一个人类可读的语法错误版本(如第2:3行:不匹配的输入XXX预期YYY),有时则不会(只是一个例外,没有第2:3行:一些消息): 有没有一种方法可以获取总是报告语法错误的文本表示的错误策略?可以将BailErrorStrategy子类化并调用reportError: class MyErrorStrategy(BailErrorStrategy): d

我正在为我的解析器使用
antlr.error.ErrorStrategy.BailErrorStrategy
。有时(取决于输入),它会报告一个人类可读的语法错误版本(如
第2:3行:不匹配的输入XXX预期YYY
),有时则不会(只是一个例外,没有
第2:3行:一些消息
):


有没有一种方法可以获取总是报告语法错误的文本表示的错误策略?

可以将
BailErrorStrategy
子类化并调用
reportError

class MyErrorStrategy(BailErrorStrategy):
    def recover(self, recognizer:Parser, e:RecognitionException):
        recognizer._errHandler.reportError(recognizer,e)
        super().recover(recognizer,e)
然后只需调用解析器。_errHandler=MyErrorStrategy()

这将确保实际语法错误(例如,
行2:18不匹配的输入“视图”期望K_表
)将打印到控制台。您可以通过
parser.addErrorListener(…)
添加其他错误侦听器

class MyErrorStrategy(BailErrorStrategy):
    def recover(self, recognizer:Parser, e:RecognitionException):
        recognizer._errHandler.reportError(recognizer,e)
        super().recover(recognizer,e)