JavaCC und Antlr

Ich brauche ein Tool zum Generieren von Parsern etc pp fuer eine eigene Sprache (Facharbeit). Nach ein bisschen googlen bin ich auf Antlr und JavaCC gestossen.
JavaCC scheint recht wenig Code zu generieren. Da es mit JJTree geliefert wird gibt es auch ne Moehlichkeiz, nen Interpreter zu schreiben. Fuer JavaCC fand ich auch noch JDT, das scheint aber schon sehr oange inaktiv zu sein. Hier gefaellt mir aber der generierte Code besser, da er um einiges strukutierter ist.

Antlr hingegen generiert wirklich sauberen Code. Es ist auch sehr einfach, selber neue Instruktionen zu erstellen ohne Dabei alles neu generieren zu muessen. Das einzige was mich stoert ist, dass man ne recht groese Dependency hat.

Meine Frage:
Welches Tool wuerdet ihr nehmen?

Wenn du Code generierst ist es egal wie der danach aussieht. Von Hand langt man da nichts an sondern man passt die Eingabegrammatik an, das ist unfug. Wieso willst du das machen?
Antlr bring dir halt Lexer und Parser auf einmal. Bei JavaCC musst du selbst den Lexer schreiben, bzw. z.B. JFlex nutzen.
Je nach Art und Umfang der Grammatik würde ich Antlr oder CUP (bzw. JavaCC) verwenden, je nach dem wo die Grammatik einfacher zu beschreiben ist.

Wenn du mit Eclipse arbeitest, kann ich dir nur Xtext / Xtend empfehlen. Dann bekommst du einen Editor, der Syntaxhighlighting hat, bei dem du Quickfixes programmieren kannst und der Autovervollständigung hat ohne großen Aufwand hin.
Und wenn ich es richtig in Erinnerung habe, dann hast du mit Guice schon herumexperimentiert - der generierte Quellcode nutzt Guice.

Du landest dann gleich in der Welt der Metamodellierung. Viel Spaß.

*** Edit ***

Geh einfach mal die 3 Tutorials durch: http://www.eclipse.org/Xtext/documentation.html

[QUOTE=HoaX]Wenn du Code generierst ist es egal wie der danach aussieht. Von Hand langt man da nichts an sondern man passt die Eingabegrammatik an, das ist unfug. Wieso willst du das machen?
Antlr bring dir halt Lexer und Parser auf einmal. Bei JavaCC musst du selbst den Lexer schreiben, bzw. z.B. JFlex nutzen.
Je nach Art und Umfang der Grammatik würde ich Antlr oder CUP (bzw. JavaCC) verwenden, je nach dem wo die Grammatik einfacher zu beschreiben ist.[/QUOTE]

Ich dachte man braucht keinen Lexer mehr zu schreiben, JavaCC generiert doch einen. In allen Tuts wurde das auch nie gemacht.
Mit strukturierter meine ich die Klassen und nicht den Code darin.

Stimmt, Lexer kann er auch, hab eben nachgesehen. Ist lange her dass ich mal JavaCC benutzt hab…

Scheint als ob du eher der Antlr bist. Ich habe noch JFlex für Lexer und CUP für Parser gefunden. Hat da jemand vielleicht schon Erfahrungen damit gemacht?

@groggy : hast du dir die von mir verlinkten Xtext Tutorials mal angesehen? Da brauchst du dich nicht um Parser etc. zu kümmern, sondern kannst dich auf deine DSL und den zu generierenden Code konzentrieren.
Im Hintergrund arbeitet da antlr.

Jup habe ich. Es scheint aber so, dass es sehr stark auf Eclipse basiert (korrigiere mich wenn ich falschliege). Und och bevorzuge IDEA :smiley: aber das ist ja egal. Mein groester Negativpunkt ist, dass es einfach eine riesen Runtime ist, die man mitliefern muss. Es sind ja nicht nur ein paar KB, sondern deutlich mehr. Ich denke aber das dies eine der einfachsten Lösungen ist, da man sich eben nur auf die DSL konzentrieren muss, der Rest wird halt einfach gemacht. Ich probiere es auf jeden Fall aus. Das coole daran finde ich, dass Xtext auch eine DSL ist ind auf Antlr basiert.

Ich benutzte meist cup + jflex. Weil es damit meist einfacher ist die Grammatik zu beschreiben als mit antlr.

Ich würde Antlr nehmen. Die Dependencies von Antlr selbst spielen ja keine Rolle. Wenn du dir den Parser generiert hast, braucht das Parser-Program ja nicht die selben Abhängigkeiten. Ich würde Notepad auch nicht Eclipse vorziehen nur weil die Abhängigkeiten geringer sind.

Die große Stärke von Antlr ist die, dass Antlr für Programmierer und nicht Computerwissenschaftler entwickelt wurde. Daher bekommst du das ganze beinahe so schnell zum Laufen wie einen SAX-Parser.

Ich muss allerdings zugeben, dass ich JavaCC nicht kenne. Ich habe nur mit Yacc+Lex gearbeitet und das war nicht meines.

Interessant, was ich aus den Beispielen gesehen habe sieht cup + jflex aus wie Antlr 3. Was genau gefällt dir daran besser?

Derselbe Grund, weshalb ich nach dem Studium auch nichts mehr damit gemacht habe.

Vielleicht ist aber auch die JetBrains-Lösung was für dich:

[quote=cmrudolph]Vielleicht ist aber auch die JetBrains-Lösung was für dich:
http://www.jetbrains.com/mps/[/quote]
Hat aber das gleiche Problem: Du bekommst eine riesige Runtime dazu und bist an eine IDE gebunden. Allerdings ist MPS ziemlich cool. Hätte man den Editor anpassen können hätte ich MPS statt Antlr verwendet.

Mit MPS habe ich mich noch nicht beschäftigt, aber das mit der Runtime scheint nur eingeschränkt gültig zu sein. Zumindest, wenn ich mir die Liste der Referenzen ansehe, dann sind da zwei Webanwendungen mit dabei (JetBrains YouTrack und JetBrains Forum). D. h., dass die DSL wohl auch extern genutzt werden kann. Dasselbe gilt übrigens auch für Xtext - die erstellten Sprachen sind auch standalone nutzbar. Es kostet aber etwas Mühe das zu trennen (vllt. hat sich da mittlerweile aber auch was getan).

Cool, von mps wusste ich nichts. Danke :smiley: