2009-10-12 4 views
6

Ich habe eine Erfahrung über die Compiler-Sätze und ich interessiere mich für Programmiersprachen & Compiler Feld und ich hoffe, jemand gibt mir eine Erklärung darüber, was ist der gute Ansatz, einen neuen Compiler von Grund auf für eine neue Programmiersprache zu schreiben? (Ich meine STEPS).Was ist der gute Ansatz, um einen neuen Compiler zu erstellen?

Antwort

9

Der erste Schritt ist das Lesen der .

Es bietet eine gute Einführung in das gesamte Gebiet des Compiler-Buildings, aber geht auch in genügend Details, um tatsächlich Ihre eigenen zu bauen.

Für die folgenden Schritte schlage ich vor, die Kapitel des Buches zu folgen. Es ist nicht als Tutorial geschrieben, bietet aber viele praktische Ratschläge, was es zu einem idealen Zentrum für eigene Ideen und Forschung macht.

+2

Bitte Jungs, ihr solltet * wirklich * aufhören, das Drachenbuch zu zitieren ... Es ist eines der schlechtesten Compilerbücher überhaupt. Man kann Appel's, Cooper usw. nennen. Aber * bitte * nicht das Dragon Book. – tonfa

+1

"Moderne Compiler-Implementierung" (Appel) ist sehr schlecht geschrieben und "Engineering ein Compiler" (Cooper) ist nicht sehr geeignet für Anfänger. –

+0

Es kann nicht schlimmer sein als das arkane Drachenbuch. Ich persönlich habe das Tigerbuch nicht schlecht geschrieben, obwohl ich es nie von Anfang bis Ende gelesen habe, ich habe festgestellt, dass es sehr gute Einsichten hat. – tonfa

3

Ich würde versuchen, Ihre Sprache/Front-End mit dem GNU-Compiler-Framework zu integrieren.

So müssen Sie nur (NUR!) Den Parser und den Übersetzer in das portable Objektformat von gcc schreiben. Sie erhalten den Optimierer, Objektcode-Generierung für den Chip der Wahl, Linker usw. kostenlos.

Eine andere Alternative wäre, eine Java JVM zu targetieren, die virtuelle Maschine ist gut dokumentiert und der JVM-Befehlssatz ist wesentlich fortschrittlicher als der x86-Maschinencode.

+1

Hängt davon ab, was Sie tun möchten. Wenn Sie wirklich wissen wollen, wie alles von Grund auf funktioniert, ist GCC ein sehr verwirrender Weg. –

5

Bitte verwenden Sie nicht das Dragon Book, es ist alt und meist veraltet (und verwendet seltsame Namen für die meisten Sachen).

Für Bücher würde ich Apples Tiger Book oder Cooper's Engineering einen Compiler empfehlen. Ich würde Ihnen dringend einen Rahmen wie llvm verwenden vorschlagen, so dass Sie müssen ein paar Sachen nicht neu implementieren für die Codegenerierung usw.

Hier ist die Anleitung für den Aufbau Ihrer Sprache mit llvm: http://llvm.org/docs/tutorial/

2

Es gelang mir, einen Compiler ohne ein bestimmtes Buch zu schreiben (obwohl ich einige Compiler-Bücher in der Vergangenheit gelesen hatte, nur nicht in jedem Detail).

Das erste, was Sie tun sollten, ist mit einem der "Compiler Compiler" -Tools (Flex, Bison, Antlr, Javacc) zu spielen und Ihre Grammatik funktioniert. Grammatiken sind meistens geradlinig, aber es gibt immer Kleinigkeiten, die in die Quere kommen und alles ruinieren. Vor allem Dinge wie Ausdrücke, Vorrang, usw.

Einige der älteren einfacheren Sprache sind aus einem bestimmten Grund einfacher. Es macht die Parser "Just Work". Stellen Sie sich eine Pascal-Variante vor, die nur durch rekursives Verhalten verarbeitet werden kann.

Ich erwähne das, weil Sie ohne Ihre Grammatik keine Sprache haben. Wenn Sie es nicht richtig parsen und lexieren können, kommen Sie nicht sehr schnell voran. Und ein Dutzend Zeilen Beispielcode in Ihrer neuen Sprache zu sehen, die in eine Menge Token und Syntaxknoten umgewandelt werden, ist wirklich wirklich erstaunlich. In einem "Wow, es funktioniert wirklich" Art und Weise. Es ist buchstäblich fast ein "es funktioniert alles" oder "nichts davon funktioniert" Art der Sache, besonders am Anfang. Sobald es tatsächlich funktioniert, hast du das Gefühl, dass du es wirklich schaffen kannst.

Und in gewissem Maße ist das wahr, denn sobald Sie diesen Teil fertig haben, müssen Sie Ihre grundlegende Laufzeit in Gang bringen. Sobald Sie "a = 1 + 1" kompiliert haben, ist der Großteil der neuen Arbeit hinter Ihrem und jetzt müssen Sie nur den Rest der Operatoren implementieren.Es wird im Grunde eine Übung, Lookup-Tabellen und Referenzen zu verwalten und eine Vorstellung davon zu haben, wo Sie sich gerade befinden.

Sie können mit einer brandneuen Syntax, innovativer Laufzeit usw. selbständig arbeiten. Aber wenn Sie Zeit haben, ist es wahrscheinlich am besten, eine bereits fertiggestellte Sprache zu verwenden, nur um alle Schritte zu verstehen und umzusetzen und denke darüber nach, ob du die Sprache schreibst, die du wirklich willst, wie du das, was du mit diesem existierenden tust, anders machen würdest.

Es gibt viele Mechaniker zum Schreiben von Compilern und wenn Sie den Prozess einmal erfolgreich durchführen, werden Sie viel mehr Selbstvertrauen haben, wenn Sie zurückkommen und es wieder mit Ihrer eigenen, neuen Sprache machen wollen.

Verwandte Themen