Compilerbau



  • compiler schrieb:

    Echt gelungenes Tutorial. Könntest du auch eine PDF-Version davon veröffentlichen?
    Wäre toll.

    Es gibt das automatisch von der Magazin-Seite erzeugte PDF. http://magazin.c-plusplus.net/print/Compilerbau.pdf

    Könntest du noch beschreiben, wie man im Programmkode eigene Funktionen definieren und aufrufen kann?

    Ich verstehe die Frage ehrlich gesagt nicht.



  • Ben04 schrieb:

    Könntest du noch beschreiben, wie man im Programmkode eigene Funktionen definieren und aufrufen kann?

    Ich verstehe die Frage ehrlich gesagt nicht.

    Dass sowas erlaubt ist:

    int add(int i, int j)
    {
      return i + j;
    }
    
    prog() {
      print add(1,2)
    }
    


  • Das ist doch schon im Artikel drin.

    add(a,b){
        return a+b
    }
    
    prog(){
        print add(1,2)
    }
    

    Siehe parse_function für die Implementierung. Meinst du mehr Details zu dem Thema?



  • Sorry, habs falsch verstanden.



  • Verdammt großer und lehrreicher Artikel.
    Ich danke dir für die Mühe.



  • hi,
    ich muss echt sagen das is n toller Artikel. Ich werde vielleicht eine Arbeit genau über das Thema schreiben. Mal schauen.
    Vielen Dank für deinen artikel



  • Wie lange hast du für das Tutorial gebraucht und wie lange bis dein Compilier funktionierte?



  • 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?


Log in to reply