Я пытаюсь решить ту же проблему, что и в Как заставить ANTLR 3.2 выйти при первой ошибке? но в antlr4, так как нет функции recoveryFromMismatchedToken()
Как заставить ANTLR 4 выйти при первой ошибке лексирования или синтаксического анализа?
Ответы (2)
Antlr4 обычно использует ANTLRErrorStrategy
интерфейс. Посмотрите на BailErrorStrategy
< /a> в частности.
Чтобы немедленно избавиться от ошибки лексера, переопределите два метода recover(....)
в Класс Lexer. Сделайте это, реализуя (1) методы-члены лексера; или (2) создание суперкласса Lexer, содержащего методы переопределения.
person
GRosenberg
schedule
09.08.2016
Я уже сделал это, но он не завершается при ошибке, если это ошибка лексирования.
- person ps_messenger; 10.08.2016
Это сработало, Грозенберг!
Я скачал файл BailErrorStrategy.java (см. примечание GRosenberg выше).
Затем я перестал использовать Lexer по умолчанию и создал свой собственный простой Lexer подкласса как:
package ...;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.LexerNoViableAltException;
import org.antlr.v4.runtime.RecognitionException;
public class MyYAMLANTLR4Lexer extends YAMLANTLR4Lexer {
public MyYAMLANTLR4Lexer(CharStream input) {
super(input);
}
public void recover(LexerNoViableAltException e) { }
public void recover(RecognitionException re) { }
}
person
Sarma
schedule
29.03.2020