Frage

Ich brauche einen Compiler zu schreiben. Es ist Hausaufgaben am univ. Der Lehrer sagte uns, dass wir jede API verwenden, können wir die Analyse des Codes tun wollen, solange es gut ist. So können wir mehr auf der JVM konzentrieren wir erzeugen.

Also ja, ich werde einen Compiler in Java schreiben Java zu generieren.

Kennen Sie eine gute API für das? Soll ich Regex verwenden? Ich schreibe normalerweise meine eigenen Parser von Hand, aber es ist nicht ratsam, in diesem Szenario ist.

Jede mögliche Hilfe würde geschätzt.

War es hilfreich?

Lösung

Regex ist gut in einem Compiler zu verwenden, aber nur zum Erkennen von Token (das heißt keine rekursive Strukturen).

Der klassische Weg einen Compiler des Schreibens ist mit einer lexikalischen Analyse zum Erkennen von Tokens, a Syntaxanalysator für Struktur erkennen, ein Semantikanalysator Sinn zu erkennen, einen Zwischencode-Generator , ein Optimierer , und zuletzt einen Zielcodegenerator . Jeder dieser Schritte zusammengefügt werden kann, oder ganz weggelassen, wenn macht den Compiler einfacher zu schreiben.

Es gibt viele Instrumente entwickelt mit diesem Prozess zu helfen. Für Java, können Sie auf

aussehen

Andere Tipps

Ich würde empfehlen, ANTLR , in erster Linie wegen seiner Ausgang Generation Fähigkeiten über String.

Was besser ist, ist, dass Terence Parr Buch auf derselben durch weit eines der besseren Bücher orientiert sich schriftlich Compiler mit einem Parser-Generator.

Dann haben Sie ANTLRWorks , die Sie im laufenden Betrieb zu studieren und zu debuggen Ihre Grammatik ermöglicht.

Zu allem die ANTLR Wiki + Dokumentation , (wenn auch nicht umfassend genug, um nach meinem Geschmack), ist ein guter Ort für jeden Anfänger zu beginnen. Es hat mir geholfen, zu aktualisieren Wissen über Compiler Schreiben in einer Woche.

Hier finden Sie aktuelle JavaCC , eine Sprache Parser für Java. Es ist sehr einfach zu bedienen und nutzen Sie den Dreh

Go classic - Lex + Yacc. In Java es buchstabiert JAX und javacc . Javacc hat sogar einige Java-Grammatiken bereit für die Inspektion.

Ich würde empfehlen, entweder eine Metacompiler wie ANTLR , oder einem einfachen Parser combinator Bibliothek. Functional Java eine Parser Kombinator API . Es gibt auch JParsec . Beide basieren auf der Parsec Bibliothek für Haskell .

JFlex ist ein Scanner-Generator, der gemäß dem Handbuch , kann mit dem Parser-Generator CUP .

  

Eine der wichtigsten Design-Ziele von JFlex war mit dem freien Java-Parser-Generator CUP so einfach zu machen Schnittstellen wie möglich [sic].

Es hat auch Unterstützung byacc / J , die, wie der Name, eine Portierung von Berkeley YACC ist schlägt Java-Code zu generieren.

Ich habe JFlex selbst verwendet und hat es gefallen. Howeveer, das Projekt, das ich tat, war einfach genug, dass ich den Parser von Hand geschrieben, damit ich weiß nicht, wie gut entweder CUP oder byacc / J ist.

Ich habe SableCC in meinem Compiler natürlich, wenn auch nicht durch Wahl verwendet wird.

Ich erinnere mich finde es sehr sperrig und Schwergewicht, mit mehr Wert auf Sauberkeit als Bequemlichkeit. (Ohne Operator Vorrang oder etwas, Sie zu sagen haben, dass in der Grammatik)

Ich würde wahrscheinlich wollen etwas anderes verwenden, wenn ich die Wahl hätte. Meine Erfahrungen mit yacc (für C) und glücklich (für Haskell) wurden beide angenehm.

Parser Kombinatoren ist eine gute Wahl. Beliebte Java-Implementierung ist JParsec.

Wenn du gehst, hardcore zu gehen, wirft in einem wenig http://llvm.org in der mischen:)

Ich schlage vor, Sie an der Quelle zu buchen für Beanshell. Es hat einen Compiler für Java und ist ziemlich einfach zu lesen.

http://java-source.net/open-source/parser-generators und http://catalog.compilertools.net/java.html enthalten Kataloge von Werkzeugen für diese. Vergleichen Sie auch die Frage Stackoverflow Alternativen zu regulären Ausdrücken .

Verwenden Sie einen Parser Kombinator, wie JParsec . Es gibt ein gutes Video-Tutorial, wie man es verwenden .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top