6 Stimmen

Compiler-Programmierung: Was sind die wichtigsten Bestandteile?

Ich bin daran interessiert, einen sehr minimalistischen Compiler zu schreiben.

Ich möchte ein kleines Stück Software (in C/C++) schreiben, das die folgenden Kriterien erfüllt:

  • Ausgabe im ELF-Format (*nix)
  • Eingabe ist eine einzelne Textdatei
  • C-ähnliche Grammatik und Syntax
  • kein Linker
  • kein Präprozessor
  • sehr klein (max. 1-2 KLOC)

Sprachliche Merkmale:

  • native Datentypen: char, int und Floats
  • Arrays (für alle nativen Datentypen)
  • Variablen
  • Kontrollstrukturen (if-else)
  • Funktionen
  • Schleifen (wäre schön)
  • einfache Algebra (div, add, sub, mul, boolesche Ausdrücke, bit-shift, usw.)
  • inline asm (für Systemaufrufe)

Kann mir jemand sagen, wie ich anfangen soll? Ich weiß nicht, aus welchen Teilen ein Compiler besteht (zumindest nicht in dem Sinne, dass ich einfach von der Stange anfangen könnte) und wie man sie programmiert. Ich danke Ihnen für Ihre Ideen.

1voto

daotoad Punkte 26089

Die Beispiele sind alle in Perl, aber Erforschung der Architektur von Programmiersprachen in Perl ist ein gutes Buch (und kostenlos).

1voto

Marcin Punkte 1629

Eine wirklich gute Reihe von kostenlosen Referenzen sind, IMHO,:

Allgemeines Compiler-Tutorial: Let's Build a Compiler von Jack Crenshaw ( http://compilers.iecc.com/crenshaw/ ) Es ist wortreich, aber ich mag es.

Assembler: NASM ( nasm.us ) gut für Linux und Windows/DOS, und vor allem viel Doku und Beispiele/Tutorials. ( FASM ist auch gut, aber es gibt weniger Dokumentation/Tutorials)

Andere Quellen Das Buch PC Assembly ( http://www.drpaulcarter.com/pcasm/index.php )

Ich versuche, ein LISP zu schreiben, also verwende ich die Lisp 1.5 Handbuch . Sie sollten sich die Sprachspezifikation für die Sprache besorgen, in der Sie schreiben.

Soweit 1-2KLOC, vorausgesetzt, Sie verwenden eine Hochsprache (wie Py oder Rb) sollten Sie nahe sein, wenn Sie nicht zu ehrgeizig sind.

0voto

jheriko Punkte 2968

Ich empfehle immer flex y Bison für diese Art von Arbeit als Anfängerin. Sie können später immer noch lernen, wie Sie Ihren eigenen Scanner und Parser schreiben. Auch wenn sie den Codeumfang erhöhen, werden sie zumindest von Tools für Sie generiert :)

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