Suche OO-Compiler-Tutorial

Hallo,

ich suche ein möglichst einfach gehaltenes Tutorial, wie mal einen Objektorientieren Compiler oder Interpreter für eine Hochsprache schreibt.
Es geht mir nicht darum, eine Objektorientierte Sprache zu übersetzen, sondern einen Compiler mit objektorientierter Struktur selbst zu schreiben (einfach um es zu lernen). Dabe würdeich gerne mit möglichst wenig Theorie traktiert werden.

So gut wie alles, was ich bisher gefunden habe, hat ein gefühltes halbes Informatikstudium vorausgesetzt, das ich nicht habe.

Das einzig wirklich gute, was ich bisher gefunden habe, ist das hier: „Let’s Build a Compiler“, http://compilers.iecc.com/crenshaw/
Aber das verwendet leider keine Objektorientierung.

Hat jemand einen guten Tipp für mich?

Danke im Voraus und Grüße,
Moritz

Hallo Moritz,

ich suche ein möglichst einfach gehaltenes Tutorial, wie mal
einen Objektorientieren Compiler oder Interpreter für eine
Hochsprache schreibt.
Es geht mir nicht darum, eine Objektorientierte Sprache
zu übersetzen, sondern einen Compiler mit objektorientierter
Struktur selbst zu schreiben (einfach um es zu lernen). Dabe
würdeich gerne mit möglichst wenig Theorie traktiert werden.

Der Unterschied ist da eigentlich gar nicht so gross.

Die Grundlagen kennst du ja schon :wink:
Du musst nur z.B. String- und Inter-Datentypen als Objekte verstehen. Bei einem ‚+‘-Operator muss ja der Compiler auch schon unterschiedlichen Code generieren (Integer-’+’ = Addition; String-’+’ = Strings aneinander hängen).

Im Prinzip musst du das jetzt dem Compiler nur noch für selber definierte Datentypen beibringen und schon hast du eine grundlegende Objektorientierte Sprache.

MfG Peter(TOO)

Hallo Peter(TOO)

ich suche ein möglichst einfach gehaltenes Tutorial, wie mal
einen Objektorientieren Compiler oder Interpreter für eine
Hochsprache schreibt.
Es geht mir nicht darum, eine Objektorientierte Sprache
zu übersetzen, sondern einen Compiler mit objektorientierter
Struktur selbst zu schreiben (einfach um es zu lernen). Dabe
würdeich gerne mit möglichst wenig Theorie traktiert werden.

Der Unterschied ist da eigentlich gar nicht so gross.

Die Grundlagen kennst du ja schon :wink:
Du musst nur z.B. String- und Inter-Datentypen als Objekte
verstehen. Bei einem ‚+‘-Operator muss ja der Compiler auch
schon unterschiedlichen Code generieren (Integer-’+’ =
Addition; String-’+’ = Strings aneinander hängen).

D.h. ich parse immer noch prozedural, und baue mir dabei einen AST auf, dessen Objekte ihren eigenen Objektcode/Assembler ausspucken?

Im Prinzip musst du das jetzt dem Compiler nur noch für selber
definierte Datentypen beibringen und schon hast du eine
grundlegende Objektorientierte Sprache.

Das ist für mich noch Zukunftsmusik :wink:.
Ich habe schon einen kleinen Interpreter (prozedural) geschrieben, und die Sprache, die der verarbeitet, hat nur Float und Arrays als Datentyp - das reicht mir schon.
Jetzt will ich das ganze halt in OO vormulieren.

Vielen Dank und Grüße,
Moritz

Hallo Moritz,

D.h. ich parse immer noch prozedural, und baue mir dabei einen
AST auf, dessen Objekte ihren eigenen Objektcode/Assembler
ausspucken?

Im Prinzip Ja. Die meisten OO-Sprachen sind ja immer noch prozedurale Sprachen, das bedeutet, dass der eigentliche, nach wie vor, Code aus Prozeduren besteht.
Du hängst dann den Baum mit den für das Objekt gültigen Prozeduren einfach an das Objekt an.
C++ war anfangs gar kein eigenständiger Compiler, sondern ein Prä-Compiler, welcher alles in C übersetzte.
Daher das Konzept der „Decoratet Function Names“. Jedem Procedurnamen werden z.B. Codes für den Returnwert-Typ vorangestellt und ebensolche für die Aufruf-Parameter. Somit lassen sich Proceduren und Operatoren überladen, solange sie sich durch die Parameter unterscheiden lassen.

Im Prinzip musst du das jetzt dem Compiler nur noch für selber
definierte Datentypen beibringen und schon hast du eine
grundlegende Objektorientierte Sprache.

Das ist für mich noch Zukunftsmusik :wink:.
Ich habe schon einen kleinen Interpreter (prozedural)
geschrieben, und die Sprache, die der verarbeitet, hat nur
Float und Arrays als Datentyp - das reicht mir schon.
Jetzt will ich das ganze halt in OO vormulieren.

Die nächsten langen kalten Winternächte werden noch kommen :wink:

MfG Peter(TOO)