Можно создать подкласс BailErrorStrategy
и вызвать reportError
:
class MyErrorStrategy(BailErrorStrategy):
def recover(self, recognizer:Parser, e:RecognitionException):
recognizer._errHandler.reportError(recognizer,e)
super().recover(recognizer,e)
, затем просто позвонить parser._errHandler = MyErrorStrategy()
.
Это обеспечит вывод на консоль фактической синтаксической ошибки (например, line 2:18 mismatched input 'VIEW' expecting K_TABLE
). Вы можете добавить других слушателей ошибок через parser.addErrorListener(...)
.