Compilerbau-Buecher ... Verschiedene Drachenbuecher ... welches?
-
Ich wuerde mich gerne in unbekanntes Terrain wagen, naemlich in den Compilerbau. Ich beherrsche C++ und die wxwidgets-Bibliothek. Leider kein Assembler.
Mein Ziel: Irgendwann einmal eine eigene Programmiersprache inklusive Compiler (der den Code in eine ausfuehrbare Datei "verwandelt"). Ausserdem moechte ich mich nicht auf eine Zielplattform beschraenken (nutze private aber nur Linux...). Da muss ja dann nur das "Frontend" geaendert werden, oder?
Ich habe (wie ihr vllt bemerkt) ueberhaupt keine Ahnung davon...
Ich habe mir mehrere Buecher angesehen, und bin der Meinung, dass das "Drachenbuch" das beste fuer mich ist. Aber wenn jemand noch andere Buchvorschlaege hat immer her damit. Am liebsten haette ich ein Buch mit C oder C++ Beispielen oder meinetwegen auch Pseudo-Code, aber nichts anderes. Und in deutsch wenns das gibt.Bei den Drachenbuechern hab ich folgendes Problem: Es gibt auf amazon.de mehrere Drachenbuecher. Und ich weiss nicht, welche gut sind. Es gibt zunaechst mal die Drachenbuecher in mehrere Teilen aufgeteilt und dann gibt es ein einziges sehr dickes. Brauch ich alle?
Hier ist der "erste Teil" von einer Reihe: Die sind auch etwas aelter:
Compilerbau | ISBN: 3486252941Hier ist ein neueres sehr dickes. Ist dieses hier vllt eine Zusammenfassung der ganzen Buecher? (was mich da auch stoert ist, dass in Java eingegangen wird, laut Inhaltsangabe)
Compiler | ISBN: 3827370973
-
Also vom Drachenbuch habe ich schon viel gehört und das scheint recht gut zu sein.
Und wegen Java würde ich mir keine Sorgen machen. Das wirst du schon lesen können, wenn du C++ kannst. Sieh es als eine Art Pseudocode.
btw:
Für einen Compiler brauchst du kein Assembler.
-
drakon: man muß zwar nicht in Assembler programmieren, wenn man einen Compiler entwickeln will, aber die Mnemonics muß man schon beherrschen, um die Ausgabe zu erzeugen (d.h. eine Assembler-Datei welche dann von einem Assembler in eine native EXE-Datei umgewandelt wird).
Es reicht nicht, nur den AST (Abstract Syntax Tree) zu erstellen (außer man nutzt ein anderes Programm, welches daraus wiederum eine EXE erzeugt).
-
Ja stimmt. Kommt halt drauf an, was man alles selbst machen will.
Ich habe da ein wenig zu abstrakt gedacht..
Man kann es natürlich so machen, wie Eiffel und einfach C Code generieren und den dann durch einen C-Compiler drücken, aber naja.btw:
Wegen den Drachenbücher war ich, als ich mir die Bücher mal kurz angeschaut habe auch recht verwirrt wegen den Versionen.
Also das grüne Buch und das rote sind verschiedene. Dann kommt als zweite Version des roten das lila Drachenbuch.
http://de.wikipedia.org/wiki/DrachenbuchAllerdings habe ich auch Versionen gesehen, die gar nichts mehr mit der Farbe ansich haben.. :S
Darum habe ich das genaue informieren mal verschoben auf dann, wenn ich das Buch wirklich auch kaufe.
Ich würde einfach mal schauen welche Bücher du bekommst und dann die neuste Version nehmen..btw:
Das Buch von Wirth stelle ich jetzt auch mal in den Raum, ohne es gelesen zu haben:
http://www.amazon.de/Grundlagen-Techniken-Compilerbaus-Niklaus-Wirth/dp/3486585819/ref=pd_bxgy_b_img_b
Ist denke ich auch nicht schlecht, da der Typ bei meiner Uni in dem Gebiet tätig war und afaik das Buch auch sozusagen zur Standardlektüre von Studenten gehört hat.. (Habe es aber (noch) nicht gelesen)
-
Imho ist das Drachenbuch für den Einstieg doch ein harter Brocken. Ich kämpf mich da grad durch und wenn ich vorher nicht schon Compilerbau gehabt hätte, hätte ich das wohl längst gegen ein einfacheres ausgetauscht.
Der Wirth ist sicherlich nicht schlecht zum Einstieg, wenn mit seinen 200 Seiten natürlich auch längst nicht so allumfassend. Aber das ist eh kein Thema, das man mit einem einzigen Buch zu meistern versuchen sollte.drakon schrieb:
Man kann es natürlich so machen, wie Eiffel und einfach C Code generieren und den dann durch einen C-Compiler drücken, aber naja.
Wenns dir nicht nur um Spielerei geht, sondern deine Sprache wirklich sinnvoll eingesetzt werden soll, ist das aber der Königsweg (bzw. Java(-Bytecode), CIL, oder irgendwelche Compiler-Backends).
Selbst Assembler generieren ist in der Regel einfach Unsinn. Für Lernzwecke vielleicht für eine kleine VM...
-
Das Drachenbuch ist was für Leute, die bereits ne Vorlesung in Richtung theoretischer Informatik gehört haben. Ohne dieses Wissen ist das Buch richtig hart!
-
maximAL schrieb:
Wenns dir nicht nur um Spielerei geht, sondern deine Sprache wirklich sinnvoll eingesetzt werden soll, ist das aber der Königsweg (bzw. Java(-Bytecode), CIL, oder irgendwelche Compiler-Backends).
Selbst Assembler generieren ist in der Regel einfach Unsinn. Für Lernzwecke vielleicht für eine kleine VM...Wie gross ist die Chance, dass jemand, der sich gerade in die Materie einarbeitet eine Sprache entwickelt, die für einen wirklichen Gebrauch gedacht ist?
Was ich mit dem "naja" meinte war eher, dass, wenn man es schon macht es "richtig" machen sollte, dass man wirklich weiss, wie weit das runter geht (ist vlt. auch meine persönilche Ansicht). Klar kann man einfach C Code produzieren, aber dann fehlt imo irgendwie ein Teil des Compilerbaus. Wenn man es auf die Assembler Ebene runter macht, dann hat man zumindest alles mal gesehen. Wenn man dann später nochmal was macht, dann ist es denke ich durchaus angebracht da C Code zu generieren, da man selbst wohl kaum einen so hochen Optimierungsgrad hinbringt, wie moderne C Compiler. Dann liegt aber denke ich der Hauptfokus eher am Design der Sprache und wie das dann wirklich drunter funktioniert kann einem dann ja egal sein.
btw:
@Compilerbauer: Hier im Forum gibts ein Tutorial, wo ein kleiner Compiler vorgestellt wird. Mal bei den Artikeln suchen!
-
otze schrieb:
Das Drachenbuch ist was für Leute, die bereits ne Vorlesung in Richtung theoretischer Informatik gehört haben. Ohne dieses Wissen ist das Buch richtig hart!
Ich hab so eine Vorlesung besucht und kann mit dem Buch dennoch Null anfangen. Ich finde das Buch einfach nur übertheoretisch und saumies geschrieben. Kann nur von dem Buch abraten.
-
einfach ohne buch drauf losproggen - is am sinnvollsten