Lernen, einen Compiler zu schreiben

stimmen
699

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

Ich suche für einige hilfreiche Bücher / Anleitungen, wie Sie Ihren eigenen Compiler einfach für pädagogische Zwecke zu schreiben. Ich bin sehr vertraut mit C / C ++, Java und Ruby, so dass ich lieber Ressourcen, die einer dieser drei beinhalten, aber jede gute Ressource ist akzeptabel.

Veröffentlicht am 04/08/2008 um 23:46
quelle vom benutzer
In anderen Sprachen...                            


40 antworten

stimmen
1k

Große Liste der Ressourcen:

Legende:

  • ¶ Link zu einer PDF-Datei
  • $ Link zu einem gedruckten Buch
Beantwortet am 04/08/2008 um 23:52
quelle vom benutzer

stimmen
69

Dies ist eine ziemlich vage Frage, ich glaube; nur wegen der Tiefe des Themas beteiligt. Ein Compiler kann in zwei separate Teile zerlegt werden, wobei jedoch; eine obere Hälfte und eine untere-one. Die obere Hälfte dauert in der Regel die Ausgangssprache und wandelt sie in eine Zwischendarstellung, und die untere Hälfte übernimmt die plattformspezifischen Code-Generierung.

Dennoch, eine Idee für eine einfache Möglichkeit, dieses Thema zu nähern (das, was wir in meiner Compiler-Klasse verwendet, zumindest) ist den Compiler in den beiden Stücken oben beschrieben zu bauen. Genauer gesagt, haben Sie eine gute Idee, den gesamten Prozess erhalten, indem nur die obere Hälfte zu bauen.

Nur die obere Hälfte tun können Sie die Erfahrung des Schreibens der Lexer und den Parser und gehen bekommen einige „Code“ zu erzeugen, (das Zwischendarstellung I erwähnt). So wird es Ihre Source-Programm nehmen und es an eine andere Darstellung konvertieren und einige Optimierungen tun (wenn Sie möchten), die das Herz eines Compilers ist. Die untere Hälfte nimmt dann diese Zwischendarstellung und erzeugen die Bytes benötigt, um das Programm auf einer spezifischen Architektur auszuführen. Zum Beispiel nimmt die die untere Hälfte Ihre Zwischendarstellung und erzeugt eine PE ausführbare Datei.

Einige Bücher zu diesem Thema , das fand ich besonders hilfreich war Compilers Principles and Techniques (oder den Drachen Buch, wegen der niedlichen Drachen auf dem Cover). Es ist eine große Theorie bekommt und auf jeden Fall deckt kontextfreie Grammatiken in eine wirklich zugänglichen Weise. Auch für den Aufbau der Lexer und Parser, Sie werden wahrscheinlich die * nix - Tools lex und yacc verwenden. Und uninteressant genug, das Buch mit dem Titel „ lex und yacc “ aufgenommen , wo der Drachen Buch für diesen Teil aufgehört hat .

Beantwortet am 21/07/2009 um 00:01
quelle vom benutzer

stimmen
54

Ich denke , moderne Compiler - Implementierung in ML der besten Einführungs Compiler Schreiben von Text ist. Es gibt eine Java - Version und eine C - Version zu, von denen möglicherweise besser zugänglich gegeben Ihren Sprachen Hintergrund. Das Buch packt eine Menge nützlicher Basismaterial (Scannen und Parsing, semantische Analyse, die Aktivierung Aufzeichnungen, Befehlsauswahl, RISC und x86 nativen Code - Generierung) und verschiedene „fortgeschrittenen“ Themen (Kompilieren OO und funktionalen Sprachen, Polymorphismus, Garbage Collection, Optimierung und einzelne statische Zuordnung Form) in relativ wenig Raum (~ 500 Seiten).

Ich ziehe es moderne Compiler Implementierung auf das Buch Drachen, weil moderne Compiler Implementierung Umfragen weniger des Feldes - stattdessen hat es wirklich solide Berichterstattung über alle Themen, die Sie benötigen würde eine ernsthafte, anständige Compiler zu schreiben. Nachdem Sie durch dieses Buch arbeiten werden Sie bereit sein Forschungsarbeiten für mehr Tiefe direkt in Angriff zu nehmen, wenn Sie es brauchen.

Ich muss zugeben , ich habe ein ernstes Faible für Niklaus Wirth Compiler Construction. Es ist online als PDF. Ich finde Wirths Programmierung Ästhetik einfach schön, aber einige Menschen seinen Stil zu minimal finden (zum Beispiel Wirth begünstigt Rekursiver Abstieg, aber die meisten CS Kurse konzentrieren sich auf Parser - Generator - Tools;. Wirths Sprache Designs ziemlich konservativ sind) Compiler Construction ist eine sehr prägnante Destillation die Grundideen der Wirth, also , ob Sie seinen Stil oder nicht , oder nicht, empfehle ich dieses Buch lesen hoch.

Beantwortet am 10/08/2008 um 08:54
quelle vom benutzer

stimmen
45

Ich stimme mit dem Drachen Buch Referenz; IMO ist es die endgültige Führungskonstruktion Compiler. Holen Sie sich für einige Hardcore Theorie bereit, though.

Wenn Sie ein Buch wollen , die leichter auf Theorie, Spiel Scripting Mastery könnte ein besseres Buch für Sie sein. Wenn Sie ein totaler Neuling auf Compiler Theorie sind, bietet es eine sanftere Einführung. Dabei spielt es keine praktischere Parsing Methoden decken (für nicht-prädiktive rekursiven Abstieg entscheiden sich ohne LL oder LR - Parsing diskutiert), und wie ich mich erinnere, ist es gar nicht jede Art von Optimierungstheorie diskutieren. Plus, statt in Maschinencode kompiliert, kompiliert es zu einem Bytecode , die angeblich auf einer VM laufen , die Sie auch schreiben.

Es ist immer noch ein anständiges zu lesen, vor allem, wenn Sie es sich für billig bei Amazon abholen können. Wenn Sie nur einen einfachen Einstieg in die Compiler wollen, Game Scripting Mastery ist kein schlechter Weg zu gehen. Wenn Sie hardcore vorne gehen wollen, dann sollten Sie für nichts weniger als das Drachenbuch begleichen.

Beantwortet am 05/08/2008 um 00:08
quelle vom benutzer

stimmen
28

„Wir bauen einen Compiler“ ist genial, aber es ist ein bisschen veraltet. (Ich sage nicht , es macht es noch ein bisschen weniger gültig.)

Check - out oder SLANG . Dies ist ähnlich wie „Lassen Sie uns einen Compiler Build“ aber ist eine viel bessere Ressource vor allem für Anfänger. Dieses kommt mit einem PDF - Tutorial , das Sie einen Compiler zu lehren einen 7 Schritt - Ansatz nimmt. Das Hinzufügen des Quoren Link als es hat die Links zu den verschiedenen Häfen von SLANG, in C ++, Java und JS, auch Dolmetscher in Python und Java, geschrieben ursprünglich C # und die .NET - Plattform.

Beantwortet am 04/08/2008 um 23:56
quelle vom benutzer

stimmen
24

Wenn Sie schauen ziemlich mächtig, höhere Level - Werkzeuge zu verwenden , als der Bau alles selbst, gehen durch die Projekte und Lesungen für diesen Kurs ist eine ziemlich gute Wahl. Es ist ein Sprache Kurs vom Autor der Java - Parser - Engine ANTLR. Sie können das Buch für den Kurs als PDF Suche von dem Pragmatische Programmierer .

Der Kurs geht über die Standard - Compiler Compiler Sachen , die Sie an anderer Stelle sehen würden: Parsing, Typen und Typprüfung, Polymorphismus, Symboltabellen und Code - Generierung. So ziemlich das einzige , was nicht bedeckt ist , Optimierungen. Das endgültige Projekt ist ein Programm , das eine Teilmenge von C kompiliert . Weil Sie Tools wie ANTLR und LLVM verwenden, ist es möglich , den gesamten Compiler an einem einzigen Tag zu schreiben (ich habe eine Existenz Beweis dafür, obwohl ich meine tun ~ 24 Stunden). Es ist schwer auf dem technischen Praxis moderne Werkzeuge, ein bisschen leichter auf Theorie.

LLVM, nebenbei bemerkt , ist einfach fantastisch. Viele Situationen , in denen Sie vielleicht normalerweise Montage kompilieren nach unten, dann würden Sie viel besser dran zu kompilieren LLVM der Zwischendarstellung statt. Es ist höhere Ebene, Cross - Plattform und LLVM ist ziemlich gut bei optimierte Montage von ihm zu erzeugen.

Beantwortet am 05/08/2008 um 00:13
quelle vom benutzer

stimmen
20

Wenn Sie wenig Zeit haben, empfehle ich Niklaus Wirth „Compiler Construction“ (Addison-Wesley. 1996) , ein kleines Büchlein , die Sie an einem Tag lesen können, aber es erklärt die Grundlagen (einschließlich , wie lexers, Rekursiver Abstieg zu implementieren, und Ihre eigenen Stack-basierten virtuellen Maschinen). Danach, wenn Sie einen tiefen Tauchgang wollen, gibt es keine Möglichkeit , um den Drachen Buch als andere commenters vorschlagen.

Beantwortet am 29/08/2010 um 00:14
quelle vom benutzer

stimmen
17

Sie könnten in Lex / Yacc (oder Flex / Bison, was auch immer Sie sie nennen wollen) suchen. Flex ist ein Lexer, die die semantischen Komponenten ( „Token“) Ihre Sprache und Bison verwendet werden werden analysieren und identifizieren, zu definieren, was passiert, wenn jeder Token analysiert wird. Dies könnte sein, ist aber definitiv nicht darauf beschränkt, den Ausdruck C-Code für einen Compiler, der zu C kompilieren würde, oder dynamisch die Anweisungen ausgeführt werden.

Diese FAQ soll Ihnen helfen, und dieses Tutorial sieht ganz nützlich.

Beantwortet am 20/07/2009 um 23:47
quelle vom benutzer

stimmen
16

Im Allgemeinen gibt es keine 5 Minuten Tutorial für Compiler, weil es sich um ein kompliziertes Thema ist und einen Compiler schreiben kann Monate dauern. Sie müssen Ihre eigene Suche tun.

Python und Ruby sind in der Regel interpretiert. Vielleicht möchten Sie auch mit einem Dolmetscher starten. Es ist in der Regel einfacher.

Der erste Schritt ist eine formale Sprache Beschreibung, die Grammatik der Programmiersprache zu schreiben. Dann müssen Sie die Quellcode-Transformation, die Sie nach kompilieren oder interpretieren wollen die Grammatik in einen abstrakten Syntaxbaum, eine interne Form des Quellcodes, die der Computer versteht und arbeitet auf kann. Dieser Schritt wird in der Regel das Parsen und die Software genannt, dass der Quellcode analysiert wird ein Parser bezeichnet. Oft wird der Parser durch einen Parser-Generator erzeugt, der eine formale Grammatik in Quelle oder Maschinencode zu verwandeln. Für eine gute, nicht-mathematische Erklärung des Parsing empfehle ich Parsing-Techniken - A Practical Guide. Wikipedia hat einen Vergleich der Parser-Generatoren, von denen Sie, dass man wählen kann, die für Sie geeignet ist. In Abhängigkeit von dem Parser-Generator Sie gewählt haben,

Schreiben Sie einen Parser für Ihre Sprache kann wirklich hart sein, aber dies hängt von Ihrer Grammatik. Deshalb schlage ich vor Ihrer Grammatik einfach zu halten (im Gegensatz zu C ++); Ein gutes Beispiel dafür ist LISP.

Im zweiten Schritt ist der abstrakte Syntaxbaum aus einer Baumstruktur in eine lineare Zwischendarstellung umgewandelt. Als gutes Beispiel für diese Bytecode des Lua wird oft zitiert. Aber die Zwischendarstellung hängt wirklich von Ihrer Sprache.

Wenn Sie einen Dolmetscher bauen, müssen Sie einfach die Zwischendarstellung interpretieren. Sie könnten auch just-in-time-kompilieren. Ich empfehle LLVM und libjit für die Just-in-time-Kompilierung. Um die Sprache nutzbar machen Sie müssen auch einige Ein- und Ausgabefunktionen umfassen und vielleicht eine kleine Standardbibliothek.

Wenn Sie die Sprache kompilieren werden, wird es komplizierter. Sie haben Backends für verschiedene Rechnerarchitekturen zu schreiben und Maschinencode aus der Zwischendarstellung in diesem Backends zu erzeugen. Ich empfehle LLVM für diese Aufgabe.

Es gibt ein paar Bücher zu diesem Thema, aber ich kann für den allgemeinen Gebrauch keiner von ihnen empfehlen. Die meisten von ihnen sind zu akademisch oder zu praktisch. Es gibt kein „Bringen Sie sich in 21 Tagen schriftlich Compiler“ und damit werden Sie mehrere Bücher kaufen müssen, um ein gutes Verständnis dieser ganzen Thema zu erhalten. Wenn Sie im Internet suchen, werden Sie über einige einige Online-Bücher und Skriptum kommen. Vielleicht gibt es eine Universitätsbibliothek in der Nähe, wo Sie Bücher über Compiler ausleihen können.

Ich empfehle auch ein gutes Hintergrundwissen in der theoretischen Informatik und Graphentheorie, wenn Sie Ihr Projekt ernst gehen zu machen. Ein Abschluss in Informatik wird auch hilfreich sein.

Beantwortet am 21/07/2009 um 11:37
quelle vom benutzer

stimmen
14

Werfen Sie einen Blick auf das Buch unten. Der Autor ist der Schöpfer von ANTLR .

Sprache Implementation Patterns: Erstellen Sie Ihre eigenen Domain-spezifische und allgemeine Programmiersprachen .

Alt-Text

Beantwortet am 18/05/2010 um 00:38
quelle vom benutzer

stimmen
11

Ein Buch noch nicht vorgeschlagen , aber sehr wichtig ist „Linkers und Lader“ von John Levine. Wenn Sie keinen externen Assembler verwenden, müssen Sie eine Möglichkeit zur Ausgabe eine Objektdatei , die in Ihr endgültiges Programm verknüpft werden kann. Auch wenn Sie einen externen Assembler verwenden, werden Sie wahrscheinlich Verlagerungen verstehen müssen und wie der ganze Programm Ladevorgang arbeitet , um ein Arbeitswerkzeug zu machen. Dieses Buch sammelt eine Menge der zufälligen Überlieferung um diesen Prozess für verschiedene Systeme, einschließlich Win32 und Linux.

Beantwortet am 18/08/2008 um 21:18
quelle vom benutzer

stimmen
10

Ich fand das Drachen Buch viel zu hart mit zu viel Fokus auf Sprachtheorie zu lesen, die nicht wirklich erforderlich ist, einen Compiler in der Praxis zu schreiben.

Ich würde das Hinzufügen Oberon Buch, das die volle Quelle eines erstaunlich schnell und einfach Oberon - Compiler enthält Projekt Oberon .

Alt-Text

Beantwortet am 09/08/2010 um 19:33
quelle vom benutzer

stimmen
10

Wenn Sie bereit sind LLVM zu verwenden, check this out: http://llvm.org/docs/tutorial/ . Es zeigt Ihnen , wie ein Compiler von Grund auf neu schreiben LLVM des Framework, und nicht davon ausgehen , Sie Kenntnisse über das Thema haben.

Das Tutorial vorschlagen, dass Sie Ihren eigenen Parser und Lexer usw. schreiben, aber ich rate Ihnen in Bison zu schauen und biegen, wenn Sie die Idee. Sie machen das Leben so viel einfacher.

Beantwortet am 20/08/2008 um 11:01
quelle vom benutzer

stimmen
10

The Dragon Buch ist auf jeden Fall die „Gebäude - Compiler“ Buch, aber wenn Sie die Sprache nicht ganz so kompliziert , wie die aktuelle Generation von Sprachen ist, können Sie an der Interpreter - Muster von aussehen wollen Design Patterns .

Das Beispiel in dem Buch entwirft eine reguläre Ausdruck-ähnliche Sprache und ist gut durchdacht, sondern wie sie in dem Buch sagen, ist es gut für die durch den Prozess denken, aber wirksam ist wirklich nur auf kleine Sprachen. Es ist jedoch viel schneller einen Interpreter für eine kleine Sprache mit diesem Muster zu schreiben, als wenn man über all die verschiedenen Arten von Parsern, yacc und lex, et cetera lernen ...

Beantwortet am 05/08/2008 um 17:16
quelle vom benutzer

stimmen
9

Ich erinnere mich , diese Frage etwa sieben Jahren , als ich ziemlich neu war die Programmierung. Ich war sehr vorsichtig , wenn ich gefragt und überraschend habe ich nicht so viel Kritik wie Sie hier bekommen sind. Sie haben mir zeigen jedoch in Richtung des „ Drachenbuch “ , die meiner Meinung nach ist ein wirklich großes Buch , das alles , was Sie wissen müssen , erklärt einen Compiler zu schreiben (Sie werden natürlich eine Sprache oder zwei zu meistern. Je mehr Sprachen , die Sie kennen, desto besser.).

Und ja, sagen viele Menschen, dass Buch zu lesen verrückt ist, und Sie werden nichts daraus lernen, aber ich stimme nicht vollständig mit dem.

Viele Leute sagen auch, dass Compiler schreiben, ist dumm und sinnlos. Nun, es gibt eine Reihe von Gründen, warum Compiler Entwicklung nützlich sind: - Weil es Spaß macht. - Es ist lehrreich, wenn das Lernen, wie Compiler zu schreiben, werden Sie viel über Informatik und andere Techniken lernen, die nützlich sind, wenn andere Anwendungen zu schreiben. - Wenn niemand Compiler schrieb die vorhandenen Sprachen würde nicht besser.

Ich habe nicht meine eigenen Compiler schreiben sofort, aber nach Aufforderung ich wusste, wo ich anfangen soll. Und jetzt, nach vielen verschiedenen Sprachen und Lesen des Drachen Buch Lernen, Schreiben ist nicht so sehr ein Problem. (Ich studiere auch Computertechnik atm, aber die meisten von dem, was ich weiß, über die Programmierung ist Autodidakt.)

Fazit: - The Dragon Buch ist ein großes „Tutorial“. Aber verbringen einige Zeit, um eine Sprache oder zwei Mastern, bevor Sie einen Compiler zu schreiben. Erwarten Sie nicht, ein Compiler Guru innerhalb der nächsten zehn Jahre oder so, obwohl zu sein.

Das Buch ist auch gut, wenn Sie erfahren möchten, wie Parser / Dolmetscher zu schreiben.

Beantwortet am 06/08/2009 um 23:37
quelle vom benutzer

stimmen
9

Ich suche in das gleiche Konzept und fand diesen vielversprechenden Artikel von Joel Pobar,

Erstellen Sie ein Language Compiler für .NET Framework

bespricht er ein hohes Maß Konzept eines Compilers und geht sein eigenes Langauge für das .NET Framework zu erfinden. Obwohl seine im .Net Framework richtet, sollten viele der Konzepte der Lage sein, reproduziert werden. Der Artikel umfasst:

  1. Langauge Definition
  2. Scanner
  3. Parser (das Bit im Hauptinteresse)
  4. Targeting der .Net Framework Der
  5. Code Generator

es gibt auch andere Themen, aber Sie bekommen die gerade.

Sein Ziel für Menschen ausgehend, in C # geschrieben (nicht ganz Java)

HTH

Gebeine

Beantwortet am 31/12/2008 um 00:01
quelle vom benutzer

stimmen
9

„... Lassen Sie uns einen Compiler bauen ...“

Ich würde zweiten http://compilers.iecc.com/crenshaw/ von @sasb . Vergessen Sie mehr Bücher für den Augenblick zu kaufen.

Warum? Werkzeuge und Sprache.

Die Sprache erforderlich ist Pascal und wenn ich mich richtig erinnere basiert auf Turbo-Pascal. Es passiert einfach so , wenn Sie gehen http://www.freepascal.org/ und laden Sie die Pascal - Compiler alle Beispiele direkt aus der Seite arbeiten ~ http://www.freepascal.org/download.var Die beaut Sache über Free Pascal ist , dass Sie es fast unabhängig von Prozessor oder OS verwenden , können Sie für sich interessieren.

Sobald Sie die Lektionen dann beherrschen versuchen , das erweiterte Drachen Buch ~ http://en.wikipedia.org/wiki/Dragon_book

Beantwortet am 20/08/2008 um 12:28
quelle vom benutzer

stimmen
8

Vom comp.compilers FAQ :

"Programmieren einen Personal Computer" von Per Brinch Hansen Prentice-Hall 1982 ISBN 0-13-730283-5

Dies ist leider betitelte Buch erklärt, das Design und die Schaffung einer Single-User-Programmierumgebung für Mikros, genannt Edison eine Pascal-ähnliche Sprache. Der Autor stellt alle Quellcode und Erklärungen für den Schritt-für-Schritt-Implementierung eines Edison-Compiler und einfaches Unterstützung Betriebssystem, alle in Edison geschrieben selbst (mit Ausnahme eines kleinen Stützkern in einem symbolischen Assembler für PDP geschrieben 11/23; die komplette Quelle kann auch für den IBM PC bestellt werden).

Die interessantesten Dinge über dieses Buch sind: 1) die Fähigkeit, wie zu zeigen, eine vollständige, in sich geschlossene, selbsthaltende, nützliche Compiler und Betriebssystem zu erstellen, und 2) die interessante Diskussion der Sprache Design und die Spezifikationen Probleme und handels- offs in Kapitel 2.

"Brinch Hansen auf Pascal Compiler" von Per Brinch Hansen Prentice-Hall 1985 ISBN 0-13-083098-4

Ein weiteres Licht-on-Theorie Schwer-on-Pragmatik Heres-how-to-Code-it Buch. Der Autor stellt das Design, die Implementierung und vollständige Quellcode für einen Compiler und p-Code-Interpreter für Pascal-(Pascal „minus“), eine Pascal Teilmenge mit boolean und Integer-Typen (aber keine Zeichen, reellen Zahlen, subranged oder Arten aufgezählt) , konstante und variable Definitionen und Array und Datensatztypen (aber nicht verpackt, Variante, set, Zeiger, namenlos, umbenannt oder Dateitypen), Ausdrücke, Zuweisungsanweisungen, verschachtelte Prozedurdefinitionen mit Wert und variablen Parametern, wenn Aussagen, während Aussagen, und beginnt-End-Blöcke (aber keine Funktionsdefinitionen, Verfahrensparameter, gOTO-Anweisungen und Etikett, case-Anweisungen, repeat-Anweisungen, für Aussagen und mit Anweisungen).

Der Compiler und Interpreter sind für die Erstellung von Software-Entwicklungssysteme in Pascal * (Pascal „Stern“), einer Pascal Teilmenge erweitert mit einigen Edison-Stil Funktionen geschrieben. Ein Pascal * Compiler für den IBM-PC werden vom Autor verkauft, aber es ist einfach zu portieren die Pascal-Compiler zu jeder geeigneten Pascal Plattform Buch.

Dieses Buch macht das Design und die Implementierung eines Compilers einfach aussehen. Ich mag vor allem die Art und Weise der Autor mit Qualität, Zuverlässigkeit und Tests geht. Der Compiler und Interpreter können leicht als Grundlage für ein beteiligte Sprache oder Compiler-Projekt verwendet werden, vor allem wenn man schnell etwas und läuft Druck stehen zu bekommen.

Beantwortet am 26/06/2010 um 21:17
quelle vom benutzer

stimmen
8

Sie sollten „Darius Bacons Besuche ichbins “, die ein Compiler für einen kleinen Lisp - Dialekt, Targeting C, in etwas mehr als 6 Seiten Code. Der Vorteil es die meisten Spielzeug - Compiler hat über ist , dass die Sprache vollständig genug ist , dass der Compiler in es geschrieben wird. (Der Tarball enthält auch einen Dolmetscher , die Sache zu Bootstrap.)

Es gibt mehr Dinge über das, was ich gefunden nützlich beim Lernen einen Compiler auf meiner schreiben Ur-Schema Webseite.

Beantwortet am 05/10/2008 um 17:00
quelle vom benutzer

stimmen
8

Eine einfache Möglichkeit, einen Compiler zu erstellen ist und Bison-flex (oder ähnliches) zu verwenden, baut der wichtigste Schritt ist, einen Baum (AST) und erzeugt Code in C. Mit C-Code zu erzeugen. Durch die Generierung von C-Code, wird Ihre Sprache arbeitet automatisch alle Plattformen, die einen C-Compiler haben.

C-Code zu erzeugen ist so einfach wie HTML zu erzeugen (nur Druck verwenden, oder gleichwertig), was wiederum viel einfacher als einen C-Parser oder HTML-Parser zu schreiben.

Beantwortet am 20/08/2008 um 10:56
quelle vom benutzer

stimmen
7

Sorry, es ist in Spanisch, aber das ist die Bibliographie eines Kurses namens „Compiladores e Intérpretes“ (Compiler und Interpreter) in Argentinien.

Der Kurs war aus formalen Sprache Theoriebildung Compiler, und das sind die Themen, die Sie bauen müssen, zumindest ein einfacher Compiler:

  • Compiler Entwurf in C.
    Alle I. Holub

    Prentice-Hall. 1990.

  • Compiladores. Teoría y Construcción.
    Sanchís Llorca, FJ, Galán Pascual, C. Editorial Paraninfo. 1988.

  • Compiler Construction.
    Niklaus Wirth

    Addison-Wesley. 1996.

  • Lenguajes, Gramáticas y Automata. Un enfoque práctico.
    Pedro Isasi Viñuela, Paloma Martínez Fernández, Daniel Borrajo Millán. Addison-Wesley Iberoamericana (Spanien). 1997.

  • Die Kunst der Compiler Design. Theorie und Praxis.
    Thomas Pittman, James Peters.

    Prentice-Hall. 1992.

  • Objektorientierte Compiler Construction.
    Jim Holmes.
    Prentice Hall, Englewood Cliffs, NJ 1995

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

    Addison-Wesley Iberoamericana. 1995.

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

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

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

    Mc Graw Hill. 1983.

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

  • Yacc: Yet Another Compiler-Compiler.
    Stephen C. Johnson
    Informatik Technical Report Nº 32, 1975. Bell Laboratories. Murray Hill, New
    Jersey.

  • Lex: Ein Lexer Generator.
    ME Lesk, E. Schmidt. Informatik Technical Report Nº 39, 1975 Bell Laboratories. Murray Hill, New Jersey.

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

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

  • Un Algoritmo Eficiente para la Construcción del Grafo de Dependencia de Control.
    Salvador V. Cavadini.
    Trabajo Final de Grado para obtener el Título de Ingeniero en Computación.
    Facultad de Matemática Aplicada. 2001 UCSE.

Beantwortet am 25/04/2009 um 18:23
quelle vom benutzer

stimmen
7

Der LCC - Compiler ( wikipedia ) ( Projekt - Homepage ) von Fraser und Hanson in ihrem Buch ": Design und Implementierung A Retargetable C Compiler" beschrieben. Es ist gut lesbar und erklärt den ganzen Compiler, bis auf Code - Generierung.

Beantwortet am 16/09/2008 um 17:21
quelle vom benutzer

stimmen
7

Python kommt in Python geschrieben mit einem Python-Compiler gebündelt. Sie können den Quellcode sehen, und es umfasst alle Phasen, von der Analyse, abstrakte Syntaxbaum, Emissionscode usw. Hack es.

Beantwortet am 12/08/2008 um 12:25
quelle vom benutzer

stimmen
6

Kein Buch, sondern ein technisches Papier und ein enorm Spaß Lernerfahrung, wenn Sie mehr über Compiler (und metacompilers) wissen wollen ... Diese Website führt Sie durch eine vollständig in sich geschlossenes Gebäude Compiler-System, das sich selbst und andere Sprachen zusammenstellen können:

Tutorial: Metacompilers Teil 1

Dies alles basiert auf einem erstaunlich kleinen 10-seitigen technischen Papier:

Val Schorre META II: Ein Syntax-Oriented Compiler Writing Sprache

von ehrlich zu Gott 1964. Ich lernte, wie Compiler 1970 von diesem zurück zu bauen Es ist ein Geist weht Moment, wenn man endlich grok, wie der Compiler selbst regenerieren kann ....

Ich weiß, dass die Website Autor von meiner College-Zeit, aber ich habe nichts mit der Website zu tun.

Beantwortet am 28/08/2009 um 01:01
quelle vom benutzer

stimmen
5
  1. Dies ist ein großes Thema. Diesen Punkt nicht unterschätzen. Und unterschätzen Sie nicht meinen Punkt, um es nicht zu unterschätzen.
  2. Ich höre der Drachen Buch ist ein (das?) Ort zu starten, zusammen mit der Suche. :) Steigen Sie an der Suche besser, schließlich wird es Ihr Leben.
  3. Ihre eigene Programmiersprache zu bauen ist absolut eine gute Übung! Aber weiß , dass es nie für jeden praktischen Zweck am Ende verwendet werden. Ausnahmen hiervon sind nur wenige und sehr weit zwischen.
Beantwortet am 20/07/2009 um 23:44
quelle vom benutzer

stimmen
5

„Wenn Sie einen Compiler für eine funktionale Sprache (anstelle eines Verfahrens eins) Simon Peyton-Jones und David Lester in schriftlicher Form interessiert sind Implementierung von funktionalen Sprachen: ein Tutorial “ ist ein ausgezeichneter Führer.

Die konzeptionellen Grundlagen, wie funktioneller Bewertung Arbeiten werden durch Beispiele in einer einfachen, aber leistungsfähiger funktionalen Sprache namens „Core“ geführt. Zusätzlich wird jeder Teil der Kernsprache-Compiler mit Code-Beispielen in Miranda (reiner funktionalen Sprache sehr ähnlich Haskell) erläutert.

Mehrere verschiedene Arten von Compilern beschrieben sind, aber selbst wenn Sie die so genannte Template-Compiler für Kern nur folgen, werden Sie ein ausgezeichnetes Verständnis davon haben, was tick funktionale Programmierung macht.

Beantwortet am 01/10/2008 um 10:30
quelle vom benutzer

stimmen
5

Es gibt eine Menge gute Antworten hier, so dachte ich, ich nur noch eine zur Liste hinzufügen würde:

Ich habe ein Buch mit dem Titel Projekt Oberon vor mehr als einem Jahrzehnt, die einige sehr gut geschriebene Text auf dem Compiler hat. Das Buch steht wirklich in dem Sinne aus, dass die Quelle und Erklärungen sehr praxisnah und lesbar ist. Der vollständige Text (die Ausgabe 2005) wurde in pdf zur Verfügung gestellt, so dass Sie können jetzt herunterladen. Der Compiler ist in Kapitel 12 diskutiert:

http://www-old.oberon.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 zweitens die Drachen Buch, Zeit auf diesem Buch verbracht ist sehr lohnenswert.

Beantwortet am 19/09/2008 um 00:31
quelle vom benutzer

stimmen
4

Sie können mit BCEL von der Apache Software Foundation. Mit diesem Tool können Sie Assembler-like - Code generieren, aber es ist Java mit dem BCEL API. Sie können lernen , wie man Zwischensprachcode (in diesem Fall Byte - Code) erzeugen kann.

einfaches Beispiel

  1. Erstellen Sie eine Java-Klasse mit dieser Funktion:

    public String maxAsString(int a, int b) {
        if (a > b) {
            return Integer.valueOf(a).toString();
        } else if (a < b) {
            return Integer.valueOf(b).toString();
        } else {
            return "equals";
        }
    }
    

Jetzt laufen BCELifier mit dieser Klasse

BCELifier bcelifier = new BCELifier("MyClass", System.out);
bcelifier.start();

Sie können das Ergebnis auf der Konsole für die ganze Klasse sehen (wie Byte-Code MyClass.java zu bauen). Der Code für die Funktion ist dies:

private void createMethod_1() {
  InstructionList il = new InstructionList();
  MethodGen method = new MethodGen(ACC_PUBLIC, Type.STRING, new Type[] { Type.INT, Type.INT }, new String[] { "arg0", "arg1" }, "maxAsString", "MyClass", il, _cp);

  il.append(InstructionFactory.createLoad(Type.INT, 1)); // Load first parameter to address 1
  il.append(InstructionFactory.createLoad(Type.INT, 2)); // Load second parameter to adress 2
    BranchInstruction if_icmple_2 = InstructionFactory.createBranchInstruction(Constants.IF_ICMPLE, null); // Do if condition (compare a > b)
  il.append(if_icmple_2);
  il.append(InstructionFactory.createLoad(Type.INT, 1)); // Load value from address 1 into the stack
  il.append(_factory.createInvoke("java.lang.Integer", "valueOf", new ObjectType("java.lang.Integer"), new Type[] { Type.INT }, Constants.INVOKESTATIC));
  il.append(_factory.createInvoke("java.lang.Integer", "toString", Type.STRING, Type.NO_ARGS, Constants.INVOKEVIRTUAL));
  il.append(InstructionFactory.createReturn(Type.OBJECT));
  InstructionHandle ih_13 = il.append(InstructionFactory.createLoad(Type.INT, 1));
  il.append(InstructionFactory.createLoad(Type.INT, 2));
    BranchInstruction if_icmpge_15 = InstructionFactory.createBranchInstruction(Constants.IF_ICMPGE, null); // Do if condition (compare a < b)
  il.append(if_icmpge_15);
  il.append(InstructionFactory.createLoad(Type.INT, 2));
  il.append(_factory.createInvoke("java.lang.Integer", "valueOf", new ObjectType("java.lang.Integer"), new Type[] { Type.INT }, Constants.INVOKESTATIC));
  il.append(_factory.createInvoke("java.lang.Integer", "toString", Type.STRING, Type.NO_ARGS, Constants.INVOKEVIRTUAL));
  il.append(InstructionFactory.createReturn(Type.OBJECT));
  InstructionHandle ih_26 = il.append(new PUSH(_cp, "equals")); // Return "equals" string
  il.append(InstructionFactory.createReturn(Type.OBJECT));
  if_icmple_2.setTarget(ih_13);
  if_icmpge_15.setTarget(ih_26);
  method.setMaxStack();
  method.setMaxLocals();
  _cg.addMethod(method.getMethod());
  il.dispose();
}
Beantwortet am 14/07/2011 um 16:42
quelle vom benutzer

stimmen
4

Ich mochte das Crenshaw Tutorial auch, weil sie es absolut klar , dass ein Compiler macht , ist nur ein weiteres Programm , das eine Eingabe liest und schreibt Put einige aus.

Lies es.

Arbeiten Sie es, wenn Sie wollen, aber dann an einem anderen Referenz aussehen wie größere und komplettere Compiler wirklich geschrieben werden.

Und lesen Sie auf vertrauensvolles Vertrauen , einen Anhaltspunkt über die nicht offensichtlichen Dinge, die in diesem Bereich durchgeführt werden können.

Beantwortet am 22/08/2008 um 16:57
quelle vom benutzer

stimmen
3

Nicht in der Liste enthalten ist, so weit ist dieses Buch:

Grundlagen des Compiler - Designs (Torben Mogensen) (von dem Abt. Für Informatik, Universität Kopenhagen)

Ich bin auch daran interessiert, über Compiler zu lernen und zu planen, dass die Industrie in den nächsten paar Jahren zu betreten. Dieses Buch ist das ideale Theorie Buch zum Lernen Compiler beginnen, soweit ich sehen kann. Es ist KOSTENLOS zu kopieren und zu vervielfältigen, sauber und sorgfältig geschrieben und gibt es Ihnen in einfachem Englisch ohne Code, sondern stellt nach wie vor die Mechanik durch Anweisungen und Diagramme usw. Einen Blick wert imo.

Beantwortet am 12/03/2014 um 17:05
quelle vom benutzer

stimmen
3

Fehlende aus der Liste: Garbage Collection: Algorithmen für die automatische und dynamische Speicherverwaltung, von Jones und Lins.

(Vorausgesetzt , dass Sie den Compiler gerade schreiben und Runtime - System, und dass Sie eine Garbage Collection Sprache zu implementieren.

Beantwortet am 27/06/2010 um 00:43
quelle vom benutzer

stimmen
3

Ich habe ein Online - Tutorial auf Compiler Design geschrieben, mit dem Titel „Lassen Sie sich ein Scripting - Engine-Compiler bauen sowie einen nativen Code - Compiler namens Bxbasm Die Online doc ist. Http://geocities.com/blunt_axe_basic/tutor/Bxb- Tutor.doc

Die Dokumente, Support - Dateien und Compiler, in Zip - Form, sind bei: http://geocities.com/blunt_axe_basic

Auch: http://tech.groups.yahoo.com/group/QDepartment

Steve A.

Beantwortet am 13/01/2009 um 23:31
quelle vom benutzer

stimmen
3

The Dragon Book ist zu kompliziert. So ignorieren sie als Ausgangspunkt. Es ist gut und macht Sie viel denken, wenn Sie bereits einen Ausgangspunkt haben, aber für den Anfang, vielleicht sollten Sie einfach versuchen, eine mathematische / logische Ausdrucksauswertung mit RD, LL oder LR-Parsing-Techniken mit allem, was (lexing / Parsing) geschrieben schreiben von Hand in vielleicht C / Java. Dies ist an sich interessant und gibt Ihnen eine Vorstellung von den in einem Compiler verbundenen Probleme. Dann können Sie sich in Ihrem eigenen DSL springen einige Skriptsprache (da Textverarbeitung ist in der Regel einfacher, in diesen) und wie jemand sagte, erzeugen Code entweder in der Skriptsprache selbst oder C. Sie wahrscheinlich flex / Bison / antlr usw. verwenden sollte tun, um den lexing / Parsen, wenn Sie es in c / java tun werden.

Beantwortet am 01/10/2008 um 21:24
quelle vom benutzer

stimmen
2

Ich bin überrascht , es ist nicht erwähnt worden, aber Donald Knuth The Art of Computer Programming wurde ursprünglich als eine Art Tutorial auf Compiler Schreiben geschrieben.

Natürlich Neigung Dr. Knuth für zu Themen in ausführlichen gehen hat den Compiler-Schreiben Tutorial zu schätzungsweise 9 Volumen erweitert, hat nur drei davon veröffentlicht tatsächlich worden. Es ist eine ziemlich komplette Ausstellung über Themen zur Programmierung und umfasst alles, was Sie schon immer über das Schreiben eines Compilers, bis ins kleinste Detail kennen müsste.

Beantwortet am 21/07/2009 um 01:20
quelle vom benutzer

stimmen
2

Als Ausgangspunkt, wird es gut sein , einen rekursiven Abstiegs - Parser (RDP) zu erstellen (lassen Sie uns sagen , Sie wollen Ihren eigenen Geschmack von BASIC schaffen und einen BASIC - Interpreter bauen) zu verstehen , wie ein Compiler zu schreiben. Ich fand die besten Informationen in Herbert Schild der C Power - User, Kapitel 7. Dieses Kapitel bezieht sich auf ein anderes Buch von H. Schildt „C Die komplette Referenz“ , wo er erklärt , wie einen Rechner (ein einfacher Ausdruck Parser) erstellen. Ich fand beiden Bücher auf eBay sehr günstig. Sie können den Code für das Buch , wenn Sie zu www.osborne.com gehen oder beim Check in www.HerbSchildt.com ich den gleichen Code gefunden , aber für C # in seinem neuesten Buch

Beantwortet am 20/08/2008 um 12:16
quelle vom benutzer

stimmen
1

Wenn Sie sich nicht nur für Bücher suchen, sondern auch Interesse an Websites , die Artikel zum Thema haben, habe ich über verschiedene Aspekte der Schaffung einer Programmiersprache gebloggt. Die meisten der Beiträge in meinem Blog ist zu finden „Language Design“ .

Insbesondere decken Erzeugen I Maschine Intel Code manuell, automatisch maschinen- oder Bytecode zu erzeugen, ein Bytecode-Interpreter Erstellen, Schreiben eine objektorientierte Laufzeit, eine einfache Laders zu schaffen und ein einfachen Markierungs- / Fege-Speicherbereinigungs schreiben. All dies in einer sehr praktische und pragmatische Art und Weise statt Sie mit viel Theorie langweilig.

Würde freuen uns über Feedback auf diesen.

Beantwortet am 02/04/2014 um 13:39
quelle vom benutzer

stimmen
1

Der schnellste Ansatz ist durch zwei Bücher:

1990 - Version Eine Einführung in die Compilertechnik, mit einem ersten Kurs mit ANSI C, lex und yacc von JP Bennett - ein perfektes Gleichgewicht von Beispielcode, Theorie Parsen und design- es enthält einen kompletten Compiler geschrieben in C, lex und yacc für eine einfache Grammatik

Drachen Buch (ältere Version) - meist eine detaillierte Referenz für die Eigenschaften , die nicht in dem früheren Buch bedeckt

Beantwortet am 01/04/2011 um 20:39
quelle vom benutzer

stimmen
1

Jedes Mal, wenn ich eine neue Sprache Idee ausprobieren möchte, schreibe ich nur einen einfachen Parser, und haben es einige Sprache erzeugen, die für eine gute Compiler zu erhalten einfach ist, wie C.

Wie denken Sie, C ++ getan wurde?

Beantwortet am 21/07/2009 um 01:42
quelle vom benutzer

stimmen
1

Wenn Sie wie ich sind, der hat keine formelle Informatik-Ausbildung und ist will in Gebäuden / interessieren, wie ein Compiler funktioniert:

Ich bin „Programming Language Processors in Java: Compiler und Interpreter“ empfehlen, ein erstaunliches Buch für einen Autodidakten Computer-Programmierer.

Aus meiner Sicht, jene grundlegende Sprachtheorie zu verstehen, automatisieren Maschine und Mengenlehre ist kein großes Problem. Das Problem ist, wie die Dinge in Code zu verwandeln. Das obige Buch zeigt Ihnen, wie Sie einen Parser, Analyse Kontext, schreiben und Code generiert. Wenn Sie dieses Buch nicht verstehen kann, dann muss ich sagen, aufgeben einen Compiler zu bauen. Das Buch ist beste Programmierung Buch, das ich je gelesen habe.

Es gibt ein anderes Buch, auch gut, Übersetzerbau in C . Es gibt eine Menge Code, und es sagt Ihnen alles darüber , wie ein Compiler und Lexer - Tools zu bauen.

einen Compiler zu bauen ist ein Spaß Programmierstil und können Sie jede Menge Programmierkenntnisse beibringen.

Sie nicht das kaufen Drachen Buch . Es war eine Verschwendung von Zeit und Geld und ist nicht für einen Praktizierenden.

Beantwortet am 05/02/2009 um 03:55
quelle vom benutzer

stimmen
0
  • Beginnen Sie, indem dafür, dass Sie beantworten die meisten Fragen C ++ markiert hier auf Stack-Überlauf.
  • Danach sollten Sie sicherstellen, dass Sie verstehen, wie andere Compiler arbeiten und verstehen [Teile] ihren Quellcode.
  • Sie werden Sie Assembler bemerken müssen und lernen Assembler starten, bis Sie viele Fragen mit diesem Tag beantworten.
  • Wenn Sie so weit gekommen sind, werden Sie feststellen, dass mehrere Jahre vergangen sind und erkennen, wie groß ein solches Projekt ist und möglicherweise von damals auf eigene Frage Lächeln (wenn diese Seite noch existiert zu dieser Zeit) ...
Beantwortet am 21/07/2009 um 00:01
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more