2012-02-22 5 views
2

У меня проблемы с восстановлением и повторной отправкой ошибок с помощью ANTLR v3. Я следую этой ссылке http://www.antlr.org/blog/antlr3/error.handling.tml, но у меня нет таких решений. я хочу сделать некоторые отчетности и восстановления , например, в исходной программе, как это: студент код входа:ANTLR: восстановление и отчетность об ошибках

FOR(int a=0;a<10;a++){ 
b=b*a; 
} 

и программа сообщит, как это: программы: «Вы в виду ключевое слово FOR является для?" Ответ ученика: «да» после этого система восстанавливает и автоматически изменяет исходный код. Как это сделать с ANTLR v3? Возможно с ANTLR? нужна помощь. Спасибо, парни!

+0

Является ли перезапуск анализа с нуля приемлемым? Это может упростить реализацию. – sarnold

+0

да .. у вас есть решение? –

ответ

1

Я думаю, вам нужно переопределить org.antlr.runtime.BaseRecognizer.recoverFromMismatchedToken внутри вашего сгенерированного класса парсера.

Эта функция вызывается, когда ANTLR обнаруживает недопустимый токен. Таким образом, в вашей собственной функции вы можете спросить пользователя о необходимости восстановления.

При необходимости, вы можете позвонить BaseRecognizer.recoverFromMismatchedToken, чтобы выполнить восстановление. Если нет, вы можете сделать исключение MismatchedTokenException.

+0

Можете ли вы дать мне ссылку на этот пример? Я просто путаю. но спасибо до lex li –

+0

Я не могу дать вам пример Java, поскольку я использую ANTLR в C#. https://github.com/lextm/sharpsnmplib/blob/2f9e8d2d48547b37e7cb6d75cdcb0ffae29f82e3/SharpSnmpLib/Mib/SmiParser.cs Это неполный класс, определенный в C#, который, наконец, будет объединен с ANTLR сгенерированным файлом SmiParser.cs из Smi.g grammar файл. Класс SmiParser получен из BaseRecognizer от ANTLR. Здесь я переопределяю функцию RecoverFromMismatchedToken, чтобы просто вызывать исключение все время. В Java вы должны использовать аналогичный способ переопределить функцию, а затем реализовать свою собственную логику. –

+0

спасибо lex li за это решение. для вашего случая, что невозможно использовать концепцию ANTLR, как это http://stackoverflow.com/questions/9262195/parsing-java-code-with-antlr-need-concept –

Смежные вопросы