Wie bekomme ich ANTLR 3.2, um beim ersten Fehler zu beenden?

8

In Abschnitt 10.4, Die Definitive ANTLR-Referenz, weist Sie an, fehlanpassung () & amp; recoverFromMismatchedSet (), wenn Sie den ersten Parsing-Fehler beenden möchten. Aber zumindest in ANTLR 3.2 scheint es, dass es keine Mismatch () -Methode gibt, und die recoverFromMismatchedSet () -Dokumentation sagt, dass es "nicht aktuell verwendet" ist. Es scheint also, dass sich die Dinge seit der Veröffentlichung des Buches geändert haben.

Was soll ich stattdessen tun, um den ersten Analysefehler in ANTLR 3.2 zu beenden?

    
Dan Becker 15.03.2010, 03:58
quelle

1 Antwort

13

Ich habe diese Frage an anltr-interest gestellt, und Andrew Haritonkin hat geantwortet. Bart K ist halb richtig; Sie müssen recoverFromMismatchedSet () außer Kraft setzen, aber auch recoverFromMismatchedToken ().

Wenn Sie möchten, dass der Lexer beim ersten Fehler beendet wird, gibt es eine Wiki-Seite, die erklärt, was zu tun ist:

Ссылка

Kurz gesagt, heißt es:

  1. Wenn Sie RecognitionException (oder irgendetwas, das von Exception erbt) auslösen möchten, müssen Sie raffinierte Java-Tricks ausführen, weil die relevanten Methoden keine Ausnahmen deklarieren
  2. Wenn Sie RuntimeException oder Error auslösen möchten, können Sie entweder nextToken () überschreiben, um eine Ausnahme auszulösen, anstatt recoverError () aufzurufen, oder Sie können recoverError () überschreiben. um die Ausnahme zu werfen.

Hier ist eine Beispielgrammatik, die nach dem ersten Lexer- oder Parserfehler beendet wird:

%Vor%

Beispielausgabe:

%Vor%     
Dan Becker 16.03.2010, 03:14
quelle

Tags und Links