Compilerbau



  • verdammt guter artikel



  • Sehr guter Artikel, hab jedoch paar fragen^^
    Versteht mich bitte nicht faslch^^
    1.) Was ist Assembler?
    2.) Ist es auch möglich einen CAompiler ohne Assembler zu schreiben?



  • Unter Assembler (ASM) versteht man entweder eine textuelle Darstellung eines kompilierten Programms oder das Programm welches diese Darstellung in eine für Prozessor und OS verständliche Datei überführt.

    Ein Prozessor führt durch Bitfolgen kodierte Befehle aus. Diese nennt man Opcodes. In ASM sind diese Befehle nicht durch Bitfolgen sonder durch für Menschen lesbaren Text dargestellt.

    Wenn deine Zielsprache kein ASM ist dann kommst du auch ohne aus. Du kannst zum Beispiel C-Code ausgeben und diesen dann durch einen C-Compiler schicken.



  • Es muss irgendein GCC installiert sein, um die Beispiele ausführen zu können. Ich werde nämlich dessen Assembler und Linker einsetzen.

    Ist das mit dem Compiler gemachte Programm dan wie Java?
    Bei Java benötigt man ja auch den GCC(Garbage Collectorr) um die anwendung zum laufen zu bringen, hat das irgentwas damit zu tun (In dem Beispiel) oder ist in diesem fall GCC was anderes? Falls ja wie kann man Einen Compiler ohne die GCC(Garbage collector) Machen?^^



  • Ein Garbage-Collector ist ein GC. Wofür GCC steht verrät Dir bestimmt Treffer 1 bei google.



  • Ben04 schrieb:

    Unter Assembler (ASM) versteht man entweder eine textuelle Darstellung eines kompilierten Programms oder das Programm welches diese Darstellung in eine für Prozessor und OS verständliche Datei überführt.

    Ein Prozessor führt durch Bitfolgen kodierte Befehle aus. Diese nennt man Opcodes. In ASM sind diese Befehle nicht durch Bitfolgen sonder durch für Menschen lesbaren Text dargestellt.

    Wenn deine Zielsprache kein ASM ist dann kommst du auch ohne aus. Du kannst zum Beispiel C-Code ausgeben und diesen dann durch einen C-Compiler schicken.

    Ja und der C-Compiler macht dann asm draus wöde ich mal vermuten 🙂
    Er könnte doch direkt die Bitfolge schreiben?



  • Wikinger75 schrieb:

    GCC(Garbage Collectorr)

    FAIL



  • Walli schrieb:

    Ein Garbage-Collector ist ein GC. Wofür GCC steht verrät Dir bestimmt Treffer 1 bei google.

    Der GCC wird vom GC eingesammelt. 🙂



  • Respekt 👍 Echt Tip Top. Total ausführlich, verständlich und umfangreich.



  • Ben04 schrieb:
    Unter Assembler (ASM) versteht man entweder eine textuelle Darstellung eines kompilierten Programms oder das Programm welches diese Darstellung in eine für Prozessor und OS verständliche Datei überführt.

    Ein Prozessor führt durch Bitfolgen kodierte Befehle aus. Diese nennt man Opcodes. In ASM sind diese Befehle nicht durch Bitfolgen sonder durch für Menschen lesbaren Text dargestellt.

    Wenn deine Zielsprache kein ASM ist dann kommst du auch ohne aus. Du kannst zum Beispiel C-Code ausgeben und diesen dann durch einen C-Compiler schicken.

    Ja und der C-Compiler macht dann asm draus wöde ich mal vermuten 🙂
    Er könnte doch direkt die Bitfolge schreiben?

    Joa stimmt^^
    Was erzeugt eigentlich der Compiler von C++ in den Objekt-Daten.^^

    Hmm also ich komm mal mit meiner übelegung zum Punkt^^
    1.) Der Compiler macht daraus ASM Dateien (Muss es ASM sein?^^).
    2.) Um daraus eine Exe machen zu können brauchen wir etwas wie einen Linker.

    Jetzt bleibt die Frage:
    Wie bastel ich einen Linker 😕 , obwohl das geht schon aus dem Thema raus^^

    Ah ja und der Linker macht daraus ja die Exe das heißt wen ich einen Linker mache der etwas anderes haben muss wie ASM dann kann ich ja auch etwas anderes wie ASM nutzen^^

    Ist Assembler eigentlich das beste dafür?

    Mfg Wikinger75!



  • Der Artikel ist bis inklusive Abschnitt 7 nachvollziehbar und die Quellcodes sind übersetzbar.

    Aber in Abschnitt 8 wird es unvollständig, denn da heisst es in der Funktion:

    bool parse_command(Env&env, const char*&pos, const char*end){
        BacktrackGuard guard(pos);
        if(ignore(pos, end, "print")){
            if(parse_expression(env, pos, end)){
    ...
    

    aber nirgendwo wird

    parse_expression(Env&env, const char*&pos, const char*end)
    

    angegeben. Es fehlen noch einige andere geänderte Funktionen.

    Ab da an ist kein Quellcode mehr übersetzbar.

    Gibts das ganze vielleicht auch als Ganzes mit allen Dateien in einer ZIP oder so?

    Denn es lässt sich schlicht nicht übersetzen, wenn es unvollständig ist.



  • es wurde angebeben

    bool parse_term(const char*&pos, const char*end, ostream&out);
    

    aber es fehlt

    bool parse_term(Env&env, const char*&pos, const char*end);
    


  • Kannst du einen Link zu einer cpp-Datei mit dem ganzen Code angeben?



  • Vielen vielen dank fuer diesen Artikel, er hat mir sehr geholfen 🙂

    grosses lob



  • @Ben04 sagte in Compilerbau:

    Eine Implementierung gibt es hier.

    Hallo,

    im Text sind einige Links wie oben angegeben welche nicht mehr funktionieren.

    Ist es möglich diese zu korrigieren so dass man die Dateien wieder laden kann?

    Danke!


  • Mod

    Gute Frage. Das Magazin wurde 2011 eingestellt, noch unter dem vorherigen Seitenbesitzer, auf einer anderen Domain, mit einem anderen Forum, und vor Anmeldedatum der heutigen Moderatoren. Von daher habe ich spontan keine Idee, ob die Sachen noch irgendwo zu finden sind. Ein Stöbern in den geheimen Archiven hat auch nichts zutage gebracht. Am ehesten könnte das @Dravere wissen.



  • Man kann sich mittlerweile einige Bücher frei herunterladen, weil sie schon ziemlich alt sind. Z.B. das Buch von Niklaus Wirth. Ok, ist es weder C noch C++ aber die Grundprinzipien sind ohnehin die gleichen.



  • @john-0
    Hallo,
    ja, das von Wirth ist mir bekannt.
    Aber das ist Oberon und uralt.

    Ich habe aus den Teilen des Source Codes hier inzwischen einen Compiler gebastelt welcher läuft und zumindest einen Teil der Tests übersetzt, leider zur Zeit noch mit einigen Fehlern.
    Ich hoffe ich bekomm die Fehler noch behoben.

    Grüße


Log in to reply