2009-05-04 6 views
4

Ich bin auf der Suche nach einem Parser-Generator für Java, der Folgendes tut: Mein Sprachprojekt ist ziemlich einfach und enthält nur eine kleine Menge von Token.Parser, Generator für Java mit den folgenden Anforderungen

Ausgabe in reinem LESBAR Java-Code, so dass ich es ändern (dies, warum würde ich nicht verwenden ANTLR) Ältere Bibliothek, die mit mindestens Java 1.4

Ich habe schaute auf die folgende laufen und arbeiten und sie könnten funktionieren: JavaCC, Jlex, Ragel?

+0

Wenn Ihre Sprache einfach ist und Sie den Code manuell bearbeiten möchten, ist es vielleicht am einfachsten, einen rekursiven Descent-Parser manuell zu schreiben. – munificent

+0

Möchten Sie Ihre Handmodifikationen mit generiertem Code zusammenführen? In anderen Worten, möchten Sie nach dem Generieren den generierten Code * nur * modifizieren oder den generierten Code und die Grammatikdefinition ändern können? –

Antwort

2

Sie sollten Rats verwenden ... Auf diese Weise müssen Sie nicht lexer und Parser trennen und dann, wenn Sie Ihr Projekt erweitern möchten, wird das trivial sein. Es ist in Java und dann können Sie Ihre AST in Java verarbeiten ...

0

Für eine so einfache Sprache könnte JFlex ausreichen. Es ist ähnlich wie JLex, aber faster (was auch weniger gut lesbar sein könnte, aber ich habe die Ausgabe von JLex nicht gesehen).

Es ist ein Lexer, kein Parser, aber es ist built, um leicht mit CUP oder BYacc/J zu verbinden. Und wieder, für eine einfache Sprache, könnte es einfacher sein, einfach einen eigenen Parser zu schreiben (ich habe das schon mal gemacht).

4

Vielleicht suchen Sie nach Parser Kombinator anstelle von Parser Generatoren? Siehe this paper und JParsec.

Es ist eine wirklich schlechte Idee, generierten Parser-Code zu bearbeiten - es ist viel einfacher, die Grammatik-Datei zu bearbeiten und dann neu zu kompilieren. Es sei denn, Sie tun es für Bildungszwecke, in welchem ​​Fall ANTLR stolz darauf ist, ziemlich lesbaren Code für solch einen leistungsfähigen Parser-Generator zu erzeugen.

+0

Nachdem ich JParsec benutzt habe, glaube ich nicht, dass ich jemals wieder zur Bearbeitung von Grammatikdateien zurückkehren möchte. Auch ohne die erweiterten Funktionen ist es sinnvoll, Ihre vorhandenen Tools zu verwenden. – jamesh

0

Wir verwenden JavaCC für unsere (auch eher kleine Sprache) und sind damit zufrieden.

1

Ich hatte gute Erfahrungen SableCC.

Es funktioniert anders als die meisten Generatoren, indem Sie ein AST/Visitor-Modell erhalten, das Sie erweitern (über Vererbung).

Ich kann die "Qualität" seines Codes in Bezug auf Lesbarkeit nicht kommentieren (es ist eine Weile her, seit ich es benutzt habe), aber es hat die Qualität, dass Sie den Code nicht lesen müssen überhaupt. Nur der Code in deiner Unterklasse.

1

Vielleicht ANTLR wird es für Sie tun. Es ist ein netter Parser Generator mit einem feinen book zur Dokumentation.

1

Werfen Sie einen Blick auf SableCC. Sablecc ist ein einfach zu benutzender Parser-Generator, der die Grammatik Ihrer Sprache als EBNF akzeptiert, ohne Aktionscode zu mischen, und generiert einen Java-Parser, der einen Syntaxbaum erzeugt, der mit einem Baumknoten-Besucher durchlaufen werden kann. SableCC ist leistungsfähig, aber viel einfacher zu benutzen als ANTLR, JavaCC, yacc usw. Es benötigt auch keinen separaten Lexer. Der Aufbau Ihres Sprachprozessors führt dazu, dass Sie eine Besucherklasse erweitern, die aus Ihrer Grammatik generiert wurde, und die Methoden überschreiben, die aufgerufen werden, wenn ein syntaktischer Konstrukt vom Parser erkannt wird. Für jede Grammatikregel XYZ hat der Besucher eine Methode in AXYZ (Knoten xyz) .... outAXYZ (Knoten xyz), die aufgerufen wird, wenn der Parser mit der Regel übereinstimmt.

Verwandte Themen