Compiler in C++



  • Hallo,
    ich wollte mal fragen, wie man in C++ einen halbwegs guten Compiler schreiben kann.Ich habe hier schon mal ein Tutorial gefunden, das dumme ist nur: Damit komme ich nicht weit. Was brauch ich, wie beginne ich, was muss ich beachten
    Gruß,
    Christoph



  • Dir ist klar, dass Compilerbau als Königsdisziplin der Informatik betrachtet wird? Das ist kein Thema, das man mit Internet-Tutorials lernt.

    Was soll der Compiler (oder je nachdem Interpreter) denn können? Willst du eine simple Skriptsprache bauen? Du könntest dich mit Parsern beschäftigen, Boost.Spirit2 wäre dazu ein guter Einstiegspunkt.



  • ...



  • Hallo,
    ich weiß, dass Compilerbau die Königsdisziplin ist. Ich wollte auch nur mal zum "reinschnuppern" einen kleinen Compiler bauen.
    Es soll eine simple Scriptsprache sein. Einface Befehle.
    So ne Art MiniBASIC ( Nur damit ich verstehe wie der Compiler arbeitet )



  • Christoph-C++ schrieb:

    Hallo,
    ich weiß, dass Compilerbau die Königsdisziplin ist. Ich wollte auch nur mal zum "reinschnuppern" einen kleinen Compiler bauen.
    Es soll eine simple Scriptsprache sein. Einface Befehle.
    So ne Art MiniBASIC ( Nur damit ich verstehe wie der Compiler arbeitet )

    Selbst eine Mini-Sprache bedeutet sehr viel Aufwand.



  • Es spielt von der Theorie her gar keine so große Rolle, ob du eine "kleine" Scriptsprache, oder eine umfangreichere schreibst. Du musst trotzdem verstehen, was du machst, und paar Features mehr oder weniger machen da gar nicht mal so viel aus.



  • halbwegs guter compiler: modular, einfach portierbar

    Der Aufwand fürs front-end: scanner,parser,semantische-analyse hängt hauptsächlich von der Anzahl der Sprachkonstrukte und Semantik zur compilezeit ab
    und das Erstellen ist vorallem stupide und zeitaufwändig,
    aber ein gutes front-end gibt auch gute Fehlermedlungen (dafür gibt es auch Werkzeuge die dir die Arbeit abnehemen).

    Die Verarbeitung des ASTs zu zielcode kann sehr komplex werden wenn der erzeugte code möglichst optimal sein soll (siehe zB llvm) aber auch ein einfacher Codegenerator kann je nach Zielsprache sehr aufwändig werden.
    Dabei musst du je nach Sprache noch eine Laufzeitumgebung implementieren die der generierte Code nutzt um verschiedene Sprachkonstrukte zu ermöglichen (zB garbage collection,exceptions,eingebaute print,input,open,... Anweisungen,Typprüfung zur Laufzeit, usw usw usw)

    Speziell für C++ fällt mir ein:
    http://llvm.org/docs/tutorial/ dort wird ein Compiler in c++ geschrieben der llvm nutzt, selbst geschrieben werden lexer, parser und llvm-code-generator.



  • LLVM oder einfach Code einer anderen Programmiersprache erzeugen und deren Compiler verwenden. Zb. C-- ( http://www.cminusminus.org/ ) wurde extra dazu entworfen.

    Eine eigene virtuelle Maschiene mit high-Level Instruktionen ist auch eine gute Idee für den Hobbyeinsatz.


Anmelden zum Antworten