• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

compiler

Jacky13

Angelner Borsdorfer
Registriert
04.02.07
Beiträge
621
habt ihr vl nen open source compiler für c++ der wirklich klein ist (max 20kb)
 

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.059
habt ihr vl nen open source compiler für c++ der wirklich klein ist (max 20kb)
C++ ist für so etwas die falsche Programmiersprache. Die Compiler sind alle sehr kompliziert und fett. Für C und auch C++ gibt es keine EBNF-Beschreibung der Programmiersprache, wie etwa für Modula-II. Was das Schreiben eines Compilers für diese beiden Sprachen zu einer sehr anspruchsvollen Aufgabe geraten läßt.

Wenn man einen eigenen Compiler schreiben möchte, macht man das meist wie folgt. Im Idealfall hat man eine EBNF-Beschreibung der Sprache. Man schreibt mittels spezieller Programme (Stichworte: lex&yacc, ANTLR, Spirit-LL) einen Lexer&Analyser der maßgeblich die EBNF-Beschreibung als Eingabe nutzt und Programmcode für den Lexer&Analyser ausspuckt. Das ist schon der wesentliche Teil des Compiler-Frontends, das Backend erzeugt den Programmcode, welches man von Hand herunterprogrammieren muß. Damit dies nicht zu viel Aufwand wird, nimmt man meist nur ein Backend, welches C-Code erzeugt.

Ich würde Dir empfehlen beschäftige Dich erstmal mit lex&yacc. Es gibt ein ganz passables deutschsprachiges Buch von H. Herold zu dem Thema. Ohne Lexer&Analyser gibt's nun einmal keinen Compiler.


Das Buch von R.Wilhelm und D.Maurer "Übersetzerbau" wird auch immer wieder gelobt, aber wird für Dich mit extremer Wahrscheinlichkeit zu anspruchsvoll sein.
 

Jacky13

Angelner Borsdorfer
Registriert
04.02.07
Beiträge
621
Ich verstehe leider nur bahnhof *wein*
kann ich wirklich nicht einen compiler bauen der nur vl 5 befehle kann, ohne gleich die ganze geschichte und tonnenweise dokumentationen zu lesen?
 

tbo007

Empire
Registriert
06.02.05
Beiträge
86
Ja kann man !
Denk dir eine Gramatik aus und schreibt zunächst mal einen Parser und dann guckst du weiter! Ein Muss! in Sachen Compilerbau ist das "Drachenbuch". Wer das nicht gelesen hat, beschäftigt sich nicht wirklich ernsthaft mit Compilerbau. Es schadet auch nichts die Grundprinzipien gerafft zu haben, da man den Compilerbau auch zu andern Dingen, wie z.B. das lösen von Gleichungen nutzen kann...
 

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.059
kann ich wirklich nicht einen compiler bauen der nur vl 5 befehle kann, ohne gleich die ganze geschichte und tonnenweise dokumentationen zu lesen?
Du mußt Du unbedingt mit formalen Sprachen auseinandersetzen, denn der Compiler muß ja ein bestimmte Sprache übersetzen. Daher lies Dir als erstes die Informationen bezüglich EBNF durch. Definiere dann eine eigene Sprache. Nimm am besten irgend etwas einfaches wie ein Taschenrechner o.ä. Anderfalls überforderst Du Dich selbst, auch an der Uni fängt man mit solch "trivial" Beispielen an.
Beispiel:
// Ich benutze ABNF aus RFC4234, d.h. "*" steht für 0 bis unendlich oft, n*m heißt dann mindestens n Wiederholungen maximal m viele.
Code:
WSP = " " | "\t";
Ziffer = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";
Zahl = 1*Ziffer;
Operator = "+" | "-" | "*" | "/";
Term = Zahl 1*WSP Operator 1*WSP (Zahl|Term);
Mit dieser Sprache dürfte man z.B. folgenden Ausdruck schreiben
Code:
00000745 + 8934     - 438984395 / 0
Der erste Schritt beim Compilerbau besteht darin, einen Parser für Deine Sprache zu bauen. Wenn Du das von Hand machen willst, versuch doch einfach mal dieses Einfachbeispiel umzusetzen.
 

Jacky13

Angelner Borsdorfer
Registriert
04.02.07
Beiträge
621
ist egal, ich werds lieber nicht versuchen
 

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.059
Wenn man es erst gar nicht versucht, dann ist man gleich gescheitert.
 

zeno

Lane's Prinz Albert
Registriert
05.11.05
Beiträge
4.894
Sich vorher mal mit der Automatentheorie auseinanderzusetzen könnte das Verständnis imens erleichtern ;)