Compilerbau



  • Danke für die Kommentare. 🙂

    Storm.Xapek.de schrieb:

    Mich stört lediglich das man zur Ausgabe weiterhin C Funktionen benutzt (also diese rt.c).

    Es gibt mehrere Gründe für diese Vorgehensweise. Die Platformunabhängigkeit hast du ja schon genannt. Der Code sollte so von Win über Linux bis Intelmac funktionieren. Ein weiterer Vorteil ist die Einfachheit der Benutzung. Du musst nicht erst umständlich Dlls oder so laden und es bedarf keiner Erklärung des Code da ja schließlich jeder hier wissen dürfte wie man mit diesen Funktionen umgeht. Im Artikel geht es ja schließlich nicht darum wie man eine Standardbibliothek implementiert (auch wenn zugegeben der Übergang flüssig ist...).

    Der letzte Grund ist, dass zu mindest eine Win Implementierung in meinen Augen außerordentlich langweilig wäre. Es wäre praktisch nur Kopie&Paste aus der MSDN. (Stichworte: WriteFile, ReadFile, GetStdHandle, vielleicht WriteConsole)

    Storm.Xapek.de schrieb:

    Ist das so üblich, oder hast du das gemacht damit es plattformunabhängig bleibt?

    Ich würd sagen, dass das recht üblich ist. Zum Beispiels sind die PHP Dateiströme ja praktisch eine 1 zu 1 Kopie der C Versionen.



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



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



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


Anmelden zum Antworten