Kentnisse mit Compilerbau erweitern
-
Servus,
ich studiere zur Zeit MB BA und habe auf Grund meiner Vorkenntnisse viel Freizeit. Ich möchte diese nutzen, um die Kenntnisse in einem Hobby zu erweitern. Über 10 Jahren programmiere ich kleinere Tools und Programme. Das letzte Projekt war eine CAD-Viewer für ein ERP-System. Das Hobby entdeckte ich beim erstellen meiner Homepage und habe folgenden Weg eingeschlagen JavaScript -> PHP -> Python -> Java, C++ (die letzten beiden seit ca. 6 Jahren).
Nun würde ich gerne hinter die Kulissen schauen und mich tiefer in die Thematik einarbeiten. Mein erster Gedanke war, bastle dir eine Programmiersprache + Compiler und du siehst alles.
Programmiersprache:
Der Syntax ist so einfach wie nur möglich gestaltet (c, c++ und co sind zu komplex für den Einstieg) und steht schon auf einem Blatt - Papier
Compiler:
Es gibt im Web einige Anleitungen zum Bau eines Compiler und auf der MSDN sogar ein Webcast für die .Net Plattform (Z#). Diese benutzen entweder einen C++-Compiler, .Net oder Java im Hintergrund. Und genau das gefällt mir nicht.Ich würde gerne das Rad neu erfinden und alles selber machen
Für mich ergeben sich zwei Fälle:
- Die Sprache wird in Assembler übersetzt und hieraus der Code erzeugt
- Direkte Codeerzeugung ohne UmwegeSo und genau hier hackt es bei mir. Ich habe keinen blasen schiemer, wie die Bibliotheken (dll, lib, so, ...) aufgebaut sind. Für den Compiler muss ich wahrscheinlich auf eine fremde Sprache zurück greifen, oder gibt es eine Möglichkeit den Compiler gleich in der neuen Programmiersprache zu bauen?
Aufgabenstellung:
- Einen Speicherbereich für zwei Integervariable reservieren und einen Wert zuweisen
- Speicherbereich für eine dritte Variable (Gleitkommazahl) reservieren
- Eine Funktion aufrufen, die als Ergebnis den Quotienten von zwei Zahlen (1) zurück gibt und in der Variable (2) speichert
- Diesen Wert im DOS-Fenster bzw. Shell ausgebenFragen:
- Wie sehen die modernen Bibliotheken im inneren aus?
- Was muss eine Bibliothek enthalten, damit sie ausführbar ist?
- Wie funktioniert das Linken von Bibliotheken und woher weiß man die Einstiegspunkte?- Kann der erste Compiler gleich mit der neuen Programmiersprache erstellt werden oder muss ich diesen z.b. in C++ erstellen?
- Wie funktioniert das Linken von Bibliotheken und woher weiß man die Einstiegspunkte?
- Sehen die statische bzw dynamische Bibliotheken im inneren gleich aus?- Wer weiß eine gute Lektüre zu dem Thema Assembler?
Gruß
Thomas
-
Der erste Schritt waere einen Interpreter zu schreiben ...
-
jep das ist für den anfang genau das richtige. Ich habe dafür ein paar versuche gebraucht, bis ein brauchbares ergebnis rauskam. Dabei lernst du gut, wie du einen string parsen kannst.
-
Siassei schrieb:
MB BA
Tut nichts zur Sache, aber heißt das Maschinenbau Berufsakademie?
Compiler:
Es gibt im Web einige Anleitungen zum Bau eines Compiler und auf der MSDN sogar ein Webcast für die .Net Plattform (Z#). Diese benutzen entweder einen C++-Compiler, .Net oder Java im Hintergrund. Und genau das gefällt mir nicht.Ich würde gerne das Rad neu erfinden und alles selber machen
Du siehst das IMO etwas zu sehr schwarz-weiß. Ein Compiler besteht in der Regel aus Frontend, also aus dem Teil, der das Quellprogramm einliest, analysiert und in irgendeiner gut handhabbaren Zwischensprache darstellt, und Backend, dem Teil, der den Zwischencode optimiert und letztlich Code für die Zielmaschine generiert. Es ist schon ein ziemliches Projekt, ein vernünftiges Frontend auf die Beine zu stellen, das sollte man nicht unterschätzen. Wenn du das Backend für den Anfang erstmal auf z.B. C als Zielsprache ausrichtest, hast du schon gut zu tun. Wenn das erstmal funktioniert, kannst du dich immer noch mit der Codeerzeugung beschäftigen.
Für den Compiler muss ich wahrscheinlich auf eine fremde Sprache zurück greifen, oder gibt es eine Möglichkeit den Compiler gleich in der neuen Programmiersprache zu bauen?
Natürlich gibt es die. Du müsstest ihn dann von Hand in Maschinensprache übersetzen. Der erste LISP-Compiler ist m.W. so entstanden. Ob man das heute noch machen sollte ist allerdings eine Frage, die ich mir dringend stellen würde
-
Servus,
danke für eure Antworten
Bashar schrieb:
Siassei schrieb:
MB BA
Tut nichts zur Sache, aber heißt das Maschinenbau Berufsakademie?
Keine Ahnung
MB ist die Abkürzung für Maschinenbau
und BA für BechalorBA benutzen alle mir bekannten HS, TU und Universitäten
MA für Master
MB ist im Fachbereich üblich.
Aber das ist sowieso egalFalls ich mich irre, sag bescheid. Ich erweitere gern mein Wissen
Bashar schrieb:
Du siehst das IMO etwas zu sehr schwarz-weiß. Ein Compiler besteht in der Regel aus
Eins nach dem anderen und ich möchte ja nicht eine neue Programmiersprache schreiben, sondern nur eine einfach, mit der ich alle Bereich durchgehen möchte. Selbst C ist hierfür zu komplex für eine einzelne Person.
Bashar schrieb:
Natürlich gibt es die. Du müsstest ihn dann von Hand in Maschinensprache übersetzen. Der erste LISP-Compiler ist m.W. so entstanden. Ob man das heute noch machen sollte ist allerdings eine Frage, die ich mir dringend stellen würde
Geil. Hatten die Entwickler der ersten Compiler auch ein Privatleben?
Ich dachte da an C++, C# oder Java. C# scheidet aus, da es nur auf MS-Plattformen läuft und das Mono-Project noch gans schön Buggy (schreibt man das so?) ist. Werd es wahrscheinlich mit C/C++ auf MS VC und GCC umsetzen.Ein Interpreter wird wohl das Vernünftigste sein und da hat sich im Laufe des Tages ein kleines Problem ergeben
Mit Sicherheit gibt es eine triviale Lösung, aber irgendwie komme ich nicht drauf.
Es gibt die sogenannten atomaren Datentypen für z.B. den primitiven Typen. Wie setzt man so etwas um? Bei einem 32bit System sehe ich für byte, short und int kein Problem. Da die Operationen + und - auf jedem Fall in einem Takt durchgeführt werden können. Aber wie wird das z.B. für long gelöst?
Gruß,
Thomas
-
Bashar schrieb:
Du müsstest ihn dann von Hand in Maschinensprache übersetzen. Der erste LISP-Compiler ist m.W. so entstanden.
nicht ganz.
teile des ersten interpreters waren in maschinensprache.
http://www-formal.stanford.edu/jmc/history/lisp/node3.html
der lisp-interpreter selber war dann schon zum teil in lisp.
und der erste lisp-compiler wurde sicherlich ganz in lisp gemacht.
-
Siassei schrieb:
und BA für Bechalor
Aha.
BA benutzen alle mir bekannten HS, TU und Universitäten
MA für MasterKomisch, die mir bekannten sagen B.Sc. für Bachelor of Science und B.A. für Bachelor of Arts, aber egal ...
Bashar schrieb:
Du siehst das IMO etwas zu sehr schwarz-weiß. Ein Compiler besteht in der Regel aus
Eins nach dem anderen und ich möchte ja nicht eine neue Programmiersprache schreiben, sondern nur eine einfach, mit der ich alle Bereich durchgehen möchte. Selbst C ist hierfür zu komplex für eine einzelne Person.
Ich habe von C als Zielsprache gesprochen. Deine Sprache geht rein, Compiler werkelt, C-Code kommt raus.
Es gibt die sogenannten atomaren Datentypen für z.B. den primitiven Typen. Wie setzt man so etwas um? Bei einem 32bit System sehe ich für byte, short und int kein Problem. Da die Operationen + und - auf jedem Fall in einem Takt durchgeführt werden können. Aber wie wird das z.B. für long gelöst?
Wenn es dir zuviel Arbeit ist, sowas rauszukriegen, dann bau doch eine Sprache ohne longs.