Я обновил Antlr 3 до Antlr 4. Я использовал этот код для исключения исключений с помощью этого кода. Но это не работает для Antlr 4.Как собрать ошибки во время выполнения, заданные парсером в Antlr4
partial class XParser
{
public override void ReportError(RecognitionException e)
{
base.ReportError(e);
Console.WriteLine("Error in Parser at line " + ":" + e.OffendingToken.Column + e.OffendingToken.Line + e.Message);
}
}
Это ошибка, которая появляется
'Parser.ReportError(Antlr4.Runtime.RecognitionException)': no suitable method found to override
В Antlr 4, что является ожидаемым способом накопления ошибок, который происходит во входном потоке. Я не смог найти способ добиться этого в сети. Пожалуйста, предоставьте мне некоторые рекомендации.
EDIT:
Я реализовал XParser ниже
partial class XParser : IAntlrErrorListener<IToken>
{
public void SyntaxError(IRecognizer recognizer, IToken offendingSymbol, int line, int charPositionInLine, string msg, RecognitionException e)
{
Console.WriteLine("Error in parser at line " + ":" + e.OffendingToken.Column + e.OffendingToken.Line + e.Message);
}
}
Как вы сказали, что я могу расширить этот класс анализатора с помощью любого из указанных классов. Но я не смог зарегистрировать этого слушателя, в основной программе меня путают с передающим аргументом как listener
. Пожалуйста, помогите мне с регистрацией.
Как я вижу, эти классы могут создавать более значимые сообщения об ошибках, не так ли?
Пожалуйста, взгляните на мое редактирование. У меня есть путаница и разъяснения. Спасибо за большую помощь в работе. Цените это много. –
@Diode Я обновил свое сообщение. :) –
@ 290Z28 Спасибо, что работает. Почему я не могу сделать то же самое с Лексером. Я попытался подражать тому, что я сделал для парсера, создав еще один класс и выполнив его из 'IAntlrErrorListener'. У экземпляра lexer есть метод AddErrorListener. –