2012-05-31 10 views
6

Also ich habe eine Grammatik in Eclipse mit ANTLR v3.4 gemacht und ich habe eine gemacht, die funktioniert und ich möchte sicherstellen, dass wenn ich es bearbeite alles noch funktioniert. Ich kann jedes Mal in den Dolmetscher gehen, aber das scheint eine riesige Zeitverschwendung zu sein.Testen ANTLR Grammatik

Fragen: Ich habe über gunit lesen, aber der Link gibt es gUnit zum Download: (http://antlr.org/hudson/job/gUnit/org.antlr $ gunit/lastSuccessfulBuild /) funktioniert nicht. Wie bekomme ich gUnit? Was ist der beste Weg, Grammatiken zu testen? Ist es tatsächlich gUnit oder soll ich einfach Java-Tests wie jUnit-Tests machen?

+1

gUnit wurde nun in den antlr Tools für einige Versionen enthalten, nicht wahr? –

+0

Wie kann ich auf gUnit zugreifen, nachdem ich das ANTLR-complete-3.4.jar heruntergeladen habe? – jQwierdy

Antwort

5

Ich habe vor kurzem zwei ANTLR3-Aufgaben (ich arbeite an meinem Master in Informatik) mit Eclipse abgeschlossen. Ich habe kein einziges Dokument gefunden, das einen Prozess zum Installieren, Konfigurieren, Schreiben und Debuggen einer Grammatik in Eclipse enthielt. Nachdem ich verschiedene Probleme durchgearbeitet hatte, fand ich es am einfachsten, in Eclipse zum Testen zu bleiben.

Um den Prozess zu verwenden, den ich verwendet habe (siehe unten), müssen Sie zuerst die ANTLR IDE v2.1.2 installiert haben. Fügen Sie es direkt aus Eclipse Indigo: http://antlrv3ide.sourceforge.net/updates hinzu. Diese Seite enthält auch einige nützliche Dokumente zur Verwendung der ANTLR IDE. Nach der Installation muss die IDE konfiguriert werden. Video-Tutorials sind etwas veraltet, aber hilfreich. Sehen Sie sich eine detaillierte Anleitung an unter configuring ANTLR IDE in Eclipse. Das Hauptkonfigurationselement ist der Java-Ausgabeordner. Tun Sie dies in Eclipse, indem Sie zu Windows, Einstellungen, ANTLR, Code Generator, Projekt relativen Ordner und im Feld Name des Ordners Ordner einen Ordnernamen eingeben (meiner heißt "antlr-java", andere verwenden "generiert").

Test/Debug-Prozess für ANTLR in Eclipse Indigo mit ANTLR IDE

  1. Nachdem ein neues Projekt erstellt wird, der rechten Maustaste, konfigurieren wählen, Konvertieren in ANTLR Projekt ...
  2. Erstellen Sie die Grammatik in einer .g-Datei und speichern Sie sie. Hinweis: Der Dateiname muss dem Grammatiknamen entsprechen.
  3. Wenn es erhebliche Fehler gibt, debuggen Sie die Grammatik. Eclipse zeigt die ANTLR-Fehler und welche Zeile (n) betroffen sind.Zunächst scheinen diese Fehler schwer zu verstehen, aber können sie durch die Verwendung verschiedener Ressourcen bearbeitet werden: - The Definitive ANTLR Referenz von Terence Parr der Typ, der schrieb ANTLR - das ANTLR Reference Manual - Google den Fehler; viele Male wirst du hier bei stackoverflow landen; insbesondere Bart Kiers ist sowohl kompetent und hilfreich (Bart: thx für die Hilfe, die Sie nicht, dass Sie gab mir wusste)
  4. Auf der ersten werden nach den schweren ANTLR Fehler Speichern Sie die Java-Ausgabeordner Sie beschlossen, konfiguriert in Eclipse wird erstellt und eine Java-Datei in diesem Ordner wird ebenfalls erstellt.
  5. der rechten Maustaste auf das Java-Ausgabeordner, wählen Sie Build Path, einem Quellordner Verwendung Ab. Diese teilt Eclipse mit, wo nach der Java-Quelle des Projekts gesucht werden soll.
  6. Es gibt wahrscheinlich Fehler in der neuen Java-Datei. Wählen Sie es aus, und suchen Sie danach nach für Java-Fehler. Gehen Sie zurück zu Ihren Grammatik- oder Java-Dateien, korrigieren Sie die Fehler und speichern Sie die Grammatik erneut, bis sowohl Grammatik- als auch Java-Dateien fehlerfrei sind, und führen Sie sie dann aus.
  7. Von diesem Punkt an ist es der übliche Modify-Run-Debug-Zyklus.
  8. Die einzige andere Eclipse-Änderung, die ich brauchte, war ein paar Run-Konfigurationen zum Testen Kommandozeilen-Parameter zu erstellen.
+0

Bearbeitete Antwort mit eingebettetem Link. – cb4

1

können Sie gUnit herunterladen there aber ich denke, es gibt keine aktuelle Version ist ...

Versuchen Jarvana ... Neueste Version 3.4 gibt ist: http://repo1.maven.org/maven2/org/antlr/gunit/3.4/gunit-3.4.jar

@ Dave Newton rechts. Ab ANTLR v3.1 ist gUnit im Hauptwerkzeug ANTLR-Tool enthalten, wie es there angegeben ist.


Ich wusste nicht für gUnit bis jetzt. Es sieht gut aus für Grammatiktests, aber ich denke, dass JUnit-Tests ihre Aufgabe erfüllen werden ...

0

Dies ist das erste Mal, dass ich von gUinit gehört habe und darüber gelesen habe. (Ich benutze ANTLR nicht viel.) Es klingt interessant, aber halb nutzlos.

Meine Herangehensweise zur Validierung von Grammatiken besteht darin, den gesamten Parser mit "normalen" Unit-Tests zu validieren. Die Sache ist, Sie sollten Unit-Tests sowieso haben und die Tests, die auf Grammatik-Regression prüfen, fügen Sie es einfach dort hinzu. Meiner Erfahrung nach kommen die meisten Fehler in der semantischen Analyse und Reduktion und nicht in der Grammatik.

+0

Können Sie mir mehr darüber oder einen Ort erzählen, an dem Sie Ihre Informationen gefunden haben? – jQwierdy

+0

Die Info über gUnit war meist ein schneller Google-Begriff. Das andere ist eine 10-jährige Berufserfahrung in der Erstellung von Sprachanalysen und Compilern. Die Sache ist, dass die Grammatik in einer Anwendung leben wird; es sei denn, Sie machen nur akademische Beispiele. Die Anwendung hat wahrscheinlich bereits Komponententests, warum sollte man das nicht einfach benutzen? Vor allem, da es sinnvoll ist, dass die Grammatik gültig ist, aber der verbleibende Code Unsinn macht. – rioki

+0

Der große Grund ist, weil es eine große Unannehmlichkeit ist zu bestimmen, ob es läuft (beim Erstellen einer Grammatik von Grund auf) und Sie müssen in die Grammatik windown gehen, um sicherzustellen, dass alles, was Sie getan haben, funktioniert. Ein automatischer Testcode würde Ihnen automatisch sagen, was bei jeder Kompilierung aufgetreten ist. Wir haben keine Anwendung, da wir alles selbst entwerfen, also müssen wir sicherstellen, dass es funktioniert, es gibt kein übergreifendes Projekt, das uns sagen würde, ob es funktioniert oder nicht. Ich weiß nicht, ob das viel erklärt, lass es mich wissen :) – jQwierdy