697 Stimmen

Lernen, einen Compiler zu schreiben

Bevorzugte Sprachen : C/C++, Java und Ruby.

Ich bin auf der Suche nach hilfreichen Büchern/Tutorials über das Schreiben eines eigenen Compilers, einfach zu Ausbildungszwecken. Ich kenne mich am besten mit C/C++, Java und Ruby aus, daher bevorzuge ich Quellen, die eine dieser drei beinhalten, aber jede gute Quelle ist akzeptabel.

10voto

Pandafox Punkte 564

Ich erinnere mich, dass ich diese Frage vor etwa sieben Jahren stellte, als ich noch ziemlich neu in der Programmierung war.

Ich war sehr vorsichtig, als ich gefragt habe, und überraschenderweise habe ich nicht so viel Kritik bekommen, wie Sie hier bekommen. Sie wiesen mich jedoch auf die " Drachenbuch ", das meiner Meinung nach ein wirklich großartiges Buch ist, in dem alles erklärt wird, was man wissen muss, um einen Compiler zu schreiben (natürlich muss man ein oder zwei Sprachen beherrschen. Je mehr Sprachen Sie beherrschen, desto besser).

Und ja, viele Leute sagen, das Buch zu lesen sei verrückt und man würde nichts daraus lernen, aber da bin ich ganz anderer Meinung.

Viele Leute sagen auch, dass das Schreiben von Compilern dumm und sinnlos ist. Nun, es gibt eine Reihe von Gründen, warum die Entwicklung von Compilern nützlich ist:

  • Weil es Spaß macht.
  • Es ist lehrreich: Wenn man lernt, wie man Compiler schreibt, lernt man viel über Informatik und andere Techniken, die beim Schreiben anderer Anwendungen nützlich sind.
  • Wenn niemand Compiler schreiben würde, würden die bestehenden Sprachen auch nicht besser werden.

Ich habe nicht sofort einen eigenen Compiler geschrieben, aber nachdem ich nachgefragt hatte, wusste ich, wo ich anfangen sollte. Und jetzt, nachdem ich viele verschiedene Sprachen gelernt und das Drachenbuch gelesen habe, ist das Schreiben kein großes Problem mehr. (Ich studiere auch Computertechnik, aber das meiste, was ich über Programmierung weiß, habe ich mir selbst beigebracht).

Zusammenfassend lässt sich sagen, dass das Drachenbuch ein großartiges "Tutorial" ist. Aber verbringen Sie einige Zeit damit, eine oder zwei Sprachen zu beherrschen, bevor Sie versuchen, einen Compiler zu schreiben. Erwarten Sie aber nicht, dass Sie innerhalb des nächsten Jahrzehnts ein Compiler-Guru werden.

Das Buch ist auch gut geeignet, wenn Sie lernen wollen, wie man Parser/Interpreter schreibt.

10voto

dbones Punkte 4296

Ich beschäftige mich gerade mit demselben Konzept und habe diesen vielversprechenden Artikel von Joel Pobar gefunden,

Erstellen eines Sprachcompilers für das .NET Framework - nicht sicher, wo dies geblieben ist

Erstellen eines Sprachcompilers für das .NET Framework - pdf-Kopie des Originaldokuments

diskutiert er ein High-Level-Konzept eines Compilers und geht dazu über, seine eigene Sprache für das .Net Framework zu erfinden. Obwohl er auf das .Net Framework abzielt, sollten viele der Konzepte reproduziert werden können. Der Artikel behandelt:

  1. Sprachliche Definition
  2. Scanner
  3. Parser (der Teil, an dem ich hauptsächlich interessiert bin)
  4. Ausrichtung auf das .Net Framework Die
  5. Code-Generator

Es gibt noch andere Themen, aber Sie verstehen schon.

Es richtet sich an Neueinsteiger und ist in C# (nicht ganz Java) geschrieben.

HTH

Knochen

9voto

bootload Punkte 455

"... Lasst uns einen Compiler bauen ..."

Ich stimme zu http://compilers.iecc.com/crenshaw/ von @sasb . Vergessen Sie den Kauf weiterer Bücher für den Moment.

Warum? Werkzeuge und Sprache.

Die erforderliche Sprache ist Pascal und basiert, wenn ich mich richtig erinnere, auf Turbo-Pascal. Wenn Sie auf http://www.freepascal.org/ und laden Sie den Pascal-Compiler herunter - alle Beispiele funktionieren direkt auf der Seite ~ http://www.freepascal.org/download.var Das Schöne an Free Pascal ist, dass man es für fast jeden Prozessor oder jedes Betriebssystem verwenden kann, das einem wichtig ist.

Wenn Sie die Lektionen gemeistert haben, versuchen Sie die fortgeschrittenen _" Drachenbuch "_ ~ http://en.wikipedia.org/wiki/Dragon_book

8voto

joe snyder Punkte 3599

Von der comp.compilers FAQ :

"Programmierung eines Personal Computers" von Per Brinch Hansen Prentice-Hall 1982 ISBN 0-13-730283-5

Dieses Buch mit dem unglücklichen Titel erklärt den Entwurf und die Erstellung einer Einzelbenutzer-Programmierumgebung für Micros, die eine Pascal-ähnliche Sprache namens Edison verwendet. Der Autor präsentiert alle Quelltexte und Erklärungen für die schrittweise Implementierung einer Edison-Compilers und eines einfachen unterstützenden Betriebssystems, die alle in Edison selbst geschrieben (mit Ausnahme eines kleinen unterstützenden Kernels, der in einem symbolischen Assembler für die PDP 11/23 geschrieben wurde; der vollständige Quellcode kann auch für den IBM PC BESTELLT WERDEN).

Die interessantesten Dinge an diesem Buch sind: 1) seine Fähigkeit zu demonstrieren, wie man ein komplettes, in sich geschlossenes, selbstverwaltendes System erstellt, nützliches Compiler- und Betriebssystem zu erstellen, und 2) die interessante Diskussion über Probleme und Kompromisse bei der Entwicklung und Spezifikation von Sprachen in Kapitel 2.

"Brinch Hansen on Pascal Compilers" von Per Brinch Hansen Prentice-Hall 1985 ISBN 0-13-083098-4

Eine weitere Licht-auf-Theorie schwer-auf-Pragmatik hier ist wie-zu-codieren-es Buch. Der Autor präsentiert das den Entwurf, die Implementierung und den kompletten Quellcode eines Compilers und p-code Interpreter für Pascal- (Pascal "minus"), eine Pascal-Untermenge mit booleschen und Integer-Typen (aber keine Zeichen, Reals, subranged oder enumerierte Typen), Konstanten- und Variablendefinitionen sowie Array- und Record-Typen (aber keine Packed, Varianten-, Set-, Zeiger-, namenlose, umbenannte oder Dateitypen), Ausdrücke, Zuweisungsanweisungen, verschachtelte Prozedurdefinitionen mit Wert- und Variablen Parametern, if-Anweisungen, while-Anweisungen und begin-end-Blöcke (aber keine Funktionsdefinitionen, prozedurale Parameter, goto-Anweisungen und Labels, case-Anweisungen, repeat-Anweisungen, for-Anweisungen und with-Anweisungen).

Der Compiler und der Interpreter sind in Pascal* (Pascal "star") geschrieben, einer Pascal-Teilmenge, erweitert um einige Edison-ähnliche Funktionen zur Erstellung von Software-Entwicklungssysteme. Ein Pascal* Compiler für den IBM PC wird vom Autor verkauft Autor verkauft, aber es ist einfach, den Pascal-Compiler des Buches auf jede Pascal-Plattform zu portieren.

Dieses Buch lässt den Entwurf und die Implementierung eines Compilers einfach aussehen. I gefällt besonders die Art und Weise, wie der Autor sich mit Qualität, Zuverlässigkeit und Testen beschäftigt. Der Compiler und der Interpreter können leicht als Grundlage für ein umfangreicheres Sprach- oder Compilerprojekt verwendet werden, insbesondere wenn man schnell etwas zum Laufen bringen muss.

8voto

Sie sollten sich Darius Bacons " ichbins ", ein Compiler für einen kleinen Lisp-Dialekt, der auf C abzielt, in etwas mehr als 6 Seiten Code. Der Vorteil gegenüber den meisten Spielzeug-Compilern ist, dass die Sprache so vollständig ist, dass der Compiler in ihr geschrieben ist. (Der Tarball enthält auch einen Interpreter, um das Ding zu booten.)

Mehr darüber, was ich beim Schreiben eines Compilers als nützlich empfunden habe, gibt es auf meiner Ur-Schema Web-Seite.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X