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.

8voto

Peter Stuifzand Punkte 4908

Ein einfacher Weg, einen Compiler zu erstellen, ist die Verwendung von Bison und Flex (oder ähnlichem), die Erstellung eines Baums (AST) und die Generierung von C-Code. Der wichtigste Schritt ist dabei die Generierung von C-Code. Durch die Generierung von C-Code wird Ihre Sprache automatisch auf allen Plattformen funktionieren, die einen C-Compiler haben.

Die Generierung von C-Code ist so einfach wie die Generierung von HTML (verwenden Sie einfach print oder ein ähnliches Verfahren), was wiederum viel einfacher ist als das Schreiben eines C- oder HTML-Parsers.

7voto

eKek0 Punkte 22479

Entschuldigung, es ist auf Spanisch, aber dies ist die Bibliographie eines Kurses namens "Compiladores e Intérpretes" (Übersetzer und Dolmetscher) in Argentinien.

Der Kurs reichte von der formalen Sprachtheorie bis zum Compilerbau, und dies sind die Themen, die man braucht, um zumindest einen einfachen Compiler zu bauen:

  • Entwurf von Compilern in C.
    Allen I. Holub

    Prentice-Hall. 1990.

  • Kompilatoren. Theorie und Konstruktion.
    Sanchís Llorca, F.J. , Galán Pascual, C. Editorial Paraninfo. 1988.

  • Compilerbau.
    Niklaus Wirth

    Addison-Wesley. 1996.

  • Sprachen, Grammatiken und Automaten. Ein praktischer Ansatz.
    Pedro Isasi Viñuela, Paloma Martínez Fernández, Daniel Borrajo Millán. Addison-Wesley Iberoamericana (España). 1997.

  • Die Kunst des Compilerentwurfs. Theorie und Praxis.
    Thomas Pittman, James Peters.

    Prentice-Hall. 1992.

  • Objektorientierter Compilerbau.
    Jim Holmes.
    Prentice Hall, Englewood Cliffs, N.J. 1995

  • Compiladores. Conceptos Fundamentales.
    B. Teufel, S. Schmidt, T. Teufel.

    Addison-Wesley Iberoamericana. 1995.

  • Einführung in die Automatentheorie, Sprachen und Berechnungen.

    John E. Hopcroft. Jeffref D. Ullman.
    Addison-Wesley. 1979.

  • Einführung in formale Sprachen.
    György E. Révész.

    Mc Graw Hill. 1983.

  • Parsing-Techniken. Ein praktischer Leitfaden.
    Dick Grune, Ceriel Jacobs.
    Impreso por los autores. 1995
    http://www.cs.vu.nl/~dick/PTAPG.html

  • Yacc: Noch ein Compiler-Compiler.
    Stephen C. Johnson
    Informatik Technischer Bericht Nº 32, 1975. Glocke Laboratories. Murray Hill, New
    Jersey.

  • Lex: Ein Generator für lexikalische Analysen.
    M. E. Lesk, E. Schmidt. Technische Datenverarbeitung Bericht Nº 39, 1975. Bell Laboratories. Murray Hill, New Jersey.

  • lex & yacc.
    John R. Levine, Tony Mason, Doug Brown.
    O'Reilly & Associates. 1995.

  • Elemente der Rechentheorie.
    Harry R. Lewis, Christos H. Papadimitriou. Segunda Edición. Prentice Hall. 1998.

  • Ein effizienter Algorithmus für die Konstruktion von Kontroll-Abhängigkeitsgraphen.
    Salvador V. Cavadini.
    Abschlussarbeit zur Erlangung des Diploms in Computertechnik.
    Facultad de Matemática Aplicada. U.C.S.E. 2001.

7voto

Sam Harwell Punkte 94511
  1. Dies ist ein sehr umfangreiches Thema. Unterschätzen Sie diesen Punkt nicht. Und unterschätzen Sie auch nicht meinen Hinweis, es nicht zu unterschätzen.
  2. Ich höre die Drachenbuch ist ein (der?) Ort, an dem man anfangen sollte, zusammen mit der Suche :) Werden Sie besser bei der Suche, schließlich wird es Ihr Leben sein.
  3. Eine eigene Programmiersprache zu entwickeln ist auf jeden Fall eine gute Übung! Aber seien Sie sich darüber im Klaren, dass sie am Ende nie für einen praktischen Zweck verwendet werden wird. Ausnahmen sind selten und sehr weit auseinander.

7voto

Python wird zusammen mit einem in Python geschriebenen Python-Compiler geliefert. Der Quellcode ist einsehbar und umfasst alle Phasen, vom Parsing über den abstrakten Syntaxbaum bis hin zum Emittieren von Code usw. Hacken Sie ihn.

6voto

tovare Punkte 3907

Es gibt hier viele gute Antworten, also dachte ich, ich füge der Liste einfach eine weitere hinzu:

Vor mehr als einem Jahrzehnt habe ich ein Buch mit dem Titel Project Oberon bekommen, das einen sehr gut geschriebenen Text über den Compiler enthält. Das Buch zeichnet sich wirklich dadurch aus, dass der Quelltext und die Erklärungen sehr praxisnah und gut lesbar sind. Der vollständige Text (die Ausgabe von 2005) wurde als pdf-Datei zur Verfügung gestellt, so dass Sie ihn jetzt herunterladen können. Der Compiler wird in Kapitel 12 behandelt:

http://www.ethoberon.ethz.ch/WirthPubl/ProjectOberon.pdf

Niklaus Wirth, Jürg Gutknecht

(Die Behandlung ist nicht so umfangreich wie sein Buch über Compiler)

Ich habe mehrere Bücher über Compiler gelesen, und ich kann dem Drachenbuch zustimmen, die Zeit, die man in dieses Buch investiert, lohnt sich sehr.

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