Bücher über Compiler



  • Hallo, ich suche nach etwas Lektüre über Compilerbau. Üblich scheint ja das Drachenbuch zu sein, bei Amazon bekommt "Engineering a Compiler" aber auch ganz gute Referenzen. Einer schreibt, er findet das "Engineering a Compiler" etwas praxisnaher, was für mich eigentlich eher das ist, was ich suche (denke ich zumindest).

    Ich bin eigentlich E-Techniker, der nur gerne programmiert, ich brauche das also auch nicht wirklich. Daher auch noch eine zusätzliche Frage: lohnt sich das überhaupt? Ist das Thema vielleicht doch zu komplex, um da zufriedenstellend einzusteigen? Vielleicht ist ein theoretischer Ansatz auch nicht schlecht.

    Hat jemand Erfahrungen mit dem zweiten Buch? Zumal die neuere Auflage des Drachenbuches gemischte Kritiken erhält. Ja, und dann ist da natürlich noch die Sache mit den Amazonreferenzen, wobei ich hoffe, dass das bei Compilerbau etwas besser ist als bei C++ von A bis Z.



  • Kommt drauf an, was du dir davon versprichst. Wenn dich die Theorie gar nicht interessiert, fand ich das Buch von dem Antlr Author nicht schlecht.



  • Ich habe selbst leider recht wenig Ahnug von Compilerbau. Ich denke aber, dass das ein Thema ist, das man in vielfältigster Form in vielen Anwendungsgebieten nutzen kann. Das kann aber vermutlich auch recht subtil sein. Ich denke, wenn man sich dafür interessiert, ist es gut, in dem Zusammenhang auch ein solides theoretisches Verständnis zu entwickeln.



  • SICP, ab Kapitel 4 wirds interessant.

    Hyde++ schrieb:

    lohnt sich das überhaupt?

    Also SICP und speziell genanntes Kapitel lohnt sich sehr. Das sind Grundlagen die man beim programmieren staendig gut einsetzen kann.

    Das Drachenbuch ist da schon spezieller und irgendwie sehr viel komplizierter. Ich konnte mich damit nicht fuer Lex und Yacc begeistern, fuer ernsthafte Compilerbauer ist das aber sicherlich auch ein Muss.



  • @Mechanics: meinst du das? http://www.amazon.de/Language-Implementation-Patterns-Domain-Specific-Programming-ebook/dp/B00A376HGG/ref=la_B001JS3O0U_1_2?s=books&ie=UTF8&qid=1428219689&sr=1-2

    @(loop (eval (read))) Danke für den Link!

    Tja, ich fürchte, ich weiß selbst nicht so genau, was ich möchte. Das ist ja wie gesagt nur zu meinem Privatvergnügen, da finde ich es schwierig, das einzuschätzen. Ich denke, ich werde mir mal den Terence Parr ansehen, der hat ja auch nur 300 irgendwas Seiten.

    Vielen Dank für die Antworten.



  • Ja, das meinte ich. War zu faul, das selber rauszusuchen 😉
    Das ist recht pragramtisch und gibt einen brauchbaren Überglick. Aber wenn du eine Spache mit einer wirklich komplexen Syntax entwerfen willst, wirds dir wohl nicht unbedingt weiterhelfen. Ich weiß jetzt allerdings auch nicht, ob da andere Bücher unbedingt weiterhelfen. Ich stand vor paar Jahren schon vor dem Problem, dass dass ich die Syntax so wie ich mir sie vorgestellt hatte, mit meinen Kenntnissen aus dem Studium nicht umsetzen konnte. Hab damals in verschiedene Bücher reingeschaut, aber so wirklich weitergekommen bin ich damals trotzdem nicht und hab die Syntax vereinfacht.



  • Hallo,

    hab auch ET studiert und musste später eine kleine Skriptsprache für ein embedded system entwickeln. Also so unwahrscheinlich ist das gar nicht dass du mal eine kleine Programmiersprache implementieren musst, und dann ist es gut wenn du weißt wie man das "richtig" angeht anstatt das "irgendwie" zu lösen.

    Ich kann folgendes Buch empfehlen:
    Wirth - Grundlagen und Techniken des Compilerbaus
    Es ist nicht zu dick und erklärt sehr anschaulich, wie man einen tatsächlich funktionierenden Compiler implementiert.

    Ansonsten hab ich mir damals für meine Aufgabe im Job noch folgendes Buch besorgt:
    Parr - Language Implementation Patterns
    Das Buch erklärt auf sehr einfache Weise typische Problemstellungen, die bei Compilern immer wieder auftreten, z.B. die Implementierung von Typsystemen.



  • Ich wuerde mir kein Buch dazu kaufen und stattdessen learning-by-doing versuchen. Buecher bringen dir eine Menge Theorie bei, die zu 90% nutzlos ist (ich habe selbst das Drachenbuch zu Hause). Du brauchst im Wesentlichen drei Dinge, um ein Compiler-Frontend zu bauen:

    • Scanner
    • Parser
    • Grammatiken

    Einen Scanner kann man ohne Probleme selbst bauen. Oder du verwendest einen der Scanner-Generatoren.
    Fuer Parser guckst du dir an, wie man Recursive-Descent Parser baut. Oder du verwendest einen der Parser-Generatoren.
    Fuer Grammatiken liest du dir den EBNF-Artikel auf Wikipedia durch.

    Dann waere noch eine Programm-Repraesentation praktisch, das ist dein AST. Sollte sich ganz natuerlich definieren lassen, wenn du dir Gedanken ueber deine Sprache gemacht hast.

    Damit solltest du ein nettes Frontend bauen koennen. Als Backend verwendest du LLVM. Fertig.

    Der schwierigste Teil ist, die Sprache zu designen!



  • Na ich weiß ja nicht. Ich habe keine konkrete Sprache vor Augen, auch nicht vor demnächst eine zu entwickeln. Hier gehts nur ums Interesse. Ich habe mir mal beispielsweise den Wikipediaartikel des Recursive-Descent Parsers angesehen, der ist ziemlich kurz.
    Ich habe nichts gegen "wertlose" Theorie. Ich bin kein Freund von mal einfach was zusammenzufrickeln und dazu irgendwelche Quellen im Internet (am besten Youtubetutorials) zu lesen/schauen.

    Für etwas praktisches mag das funktionieren, aber ich möchte ja gerade vermeiden, einen Parser- oder Scannergenerator zu benutzen. Dann kann ich ja besser gleich eine neue Programmiersprache lernen und da den vorhandenen Compiler/Interpreter verwenden.
    Es geht mir ja um den Aufbau von Compilern, nicht darum, ein konkretes Problem zu lösen.



  • ganz meine Meinung.
    Ein bisschen Theorie schadet nicht, und ein Buch führt i.d.R. besser in ein Thema ein als irgendein Online Tutorial.
    Meine Empfehlung ist das bereits genannte Buch von Wirth (Erfinder der Pascal Sprache!).


Anmelden zum Antworten