Compilerbau



  • Wow 👍
    Kann mich meinem Badestrand da nur anschließen, äußerst beeindruckend!
    Für mich persönlich einer der eindrucksvollsten und lehrreichsten Artikel.
    Mich stört lediglich das man zur Ausgabe weiterhin C Funktionen benutzt (also diese rt.c).
    Ist das so üblich, oder hast du das gemacht damit es plattformunabhängig bleibt?



  • Storm.Xapek.de schrieb:

    [...]
    Mich stört lediglich das man zur Ausgabe weiterhin C Funktionen benutzt (also diese rt.c).
    Ist das so üblich, oder hast du das gemacht damit es plattformunabhängig bleibt?

    Du kannst die Implementierung von print_int doch jederzeit ändern.
    printf bietet sich hier aber aus zwei Gründen an:
    1. Das Programm bleibt somit Plattformunabhängig (wobei diese durch die Assembler-Syntax und -Sprache bereits eingeschränkt ist)
    2. Die C I/O bzw. RT ist deutlich schlanker als die C++ I/O-Streams und es sieht doch sehr unschön aus, wenn man so wenig Asm-Code generiert und dann ein mehrere hundert KB große Binärdatei erhält

    P.S. Ich finde den Artikel wirklich klasse!



  • 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. 🙂


Anmelden zum Antworten