Da Sie bereits geschriebene Grammatiken und reguläre Ausdrücke verwenden werden, ist die Wahl des Werkzeugs unbedeutend.
Sie können gehen mit flex / Bison und Sie werden viele bereits geschriebene Grammatiken finden. Ansonsten können Sie mit ANTLR die auf C, C++ und Java ohne Probleme funktionieren sollte und das Gleiche auch für sie tut.
Sie haben sich nicht dazu geäußert, welche Sprache Sie für diese Arbeit verwenden werden, daher ist es nicht so einfach, einen besseren Ansatz vorzuschlagen.
Denken Sie daran, dass jede Sprache ihre eigenen Merkmale hat, zum Beispiel sind Symboltabellen in Ruby anders aufgebaut als in C++. Das liegt daran, dass man strengere oder lockerere Deklarationen haben kann und so weiter. Sie sollten sich also gut überlegen, was Sie brauchen werden (und Sie können es auch in Ihrer Frage erklären, damit ich Ihnen besser helfen kann).
Zu Ihren beiden Phasen kann ich sagen, dass
-
Die Tokenisierung ist recht einfach, erfordert nicht für jede Sprache eine andere Struktur und kann leicht erweitert werden, um eine Vielzahl von Programmiersprachen zu unterstützen.
-
Das Parsing kann schwieriger sein. Sie müssen eine Abstrakter Syntaxbaum des Programms und können dann damit machen, was Sie wollen. Wenn Sie es im OOP-Stil tun möchten, müssen Sie eine Klasse für jeden Knotentyp verwenden, aber Knotentypen können sich zwischen den Sprachen ändern, weil sie strukturell unterschiedlich sind, so dass etwas Allgemeines und leicht erweiterbar auf andere Sprachen zu tun, ist ziemlich schwierig.
In diesem Punkt gewinnt ANTLR gegenüber Flex und Bison, weil es eine automatische Generierung von AST bietet (wenn ich mich recht erinnere).
Der Hauptunterschied zwischen diesen beiden Compilern ist die Tatsache, dass ANTLR eine LL(k) Parser (der von oben nach unten arbeitet), während Bison einen LALR(1) das ist bottom-up, aber wenn Sie bereits geschriebene Grammatiken verwenden, sollte das nicht so schwierig sein.
Ein persönlicher Rat: Ich habe viele Interpreter oder Compiler geschrieben, aber nie mit einer voll funktionsfähigen Sprache angefangen. C Die Syntax ist wirklich groß Vielleicht sollten Sie also mit einer Teilmenge beginnen, dann sehen, was Sie mit Token und AST machen können, und es später erweitern, um die volle Syntax zu unterstützen.