在保留错误消息的同时,如何在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)