Compilerbau



  • 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


Anmelden zum Antworten