Interpreter- u. Compilerbau

wie sagte unser info prof kürzlich:

Unterschätzen Sie nicht den Aufwand hinter einem einfachen Compiler. Selbst für einen einfachen Compiler benötigt man viele Monate, eher Jahre, je nach Sprache.

Ich versteh die Faszination schon, aber ich will mal so sagen:

Deine Arbeit kann nur begrenzt gewürdigt werden, mehr als Bestnote gibts nicht. Die gibts aber auch auf einfacherem, und vorallem schnelleren Weg. Das Abi wird auch noch schwierig, gerade weil man einiges an der Backe hat, da denke ich is son Projekt nicht geeignet.
Ich denke einfach es ist sehr wahrscheinlich dass du da jede Menge Zeit reinsteckst ohne rechtzeitig ein Ergebnis vorweisen zu können. Das bringt dich dann kaum weiter.
Wieso wartest du damit nicht bis zum Studium? Solche Sachen sind einfach was ganz anderes als einfach programmieren, da braucht man schon viele Grundlagen in Mathematik, Automaten etc. Dieses Wissen gibts normalerweise im Grundstudium, und das wirste nicht mal schnell in 3 Wochen selbst lernen.
Wenn du wirklich sowas machen willst dann auch richtig, mehr oder weniger bestehende compiler abschreiben is nicht die Kunst, einen selbst zu schreiben hingegen schon. Eine Kunst mit der sich idR Akademiker rumschlagen, und das aus gutem Grund.
 
Lev schrieb:
wie sagte unser info prof kürzlich:

Unterschätzen Sie nicht den Aufwand hinter einem einfachen Compiler. Selbst für einen einfachen Compiler benötigt man viele Monate, eher Jahre, je nach Sprache.

Ich versteh die Faszination schon, aber ich will mal so sagen:

Deine Arbeit kann nur begrenzt gewürdigt werden, mehr als Bestnote gibts nicht. Die gibts aber auch auf einfacherem, und vorallem schnelleren Weg. Das Abi wird auch noch schwierig, gerade weil man einiges an der Backe hat, da denke ich is son Projekt nicht geeignet.
Ich denke einfach es ist sehr wahrscheinlich dass du da jede Menge Zeit reinsteckst ohne rechtzeitig ein Ergebnis vorweisen zu können. Das bringt dich dann kaum weiter.
Wieso wartest du damit nicht bis zum Studium? Solche Sachen sind einfach was ganz anderes als einfach programmieren, da braucht man schon viele Grundlagen in Mathematik, Automaten etc. Dieses Wissen gibts normalerweise im Grundstudium, und das wirste nicht mal schnell in 3 Wochen selbst lernen.
Wenn du wirklich sowas machen willst dann auch richtig, mehr oder weniger bestehende compiler abschreiben is nicht die Kunst, einen selbst zu schreiben hingegen schon. Eine Kunst mit der sich idR Akademiker rumschlagen, und das aus gutem Grund.

Ein wirklich aussagekräftiger Post! Habe mich jetzt so entschieden, dass ich mich morgen mit meinem Prof absprechen werde! Die Lust am Compilerbau habe ich noch immer nicht verloren, aber leider stimmt schon, wie du gesagt hast - in der Schule gibts auch noch andere Dinge. Bis aufs Studium will ich nicht warten, ich werde mich mit der grundlegenden Materie mal richtig auseinander setzen und dann ein "wenn schon denn schon"-Projekt starten!!!

Aspektorientierte Programmierung lacht mich doch auch schon an :D

Danke Leute, habt mir viel weitergeholfen ;-)
 
Interpreter != vollst. Übersetzer

mcmonk schrieb:
da ich schön langsam aber sicher an meine Facharbeit denken muss, habe ich mich entschieden an Hand eines Beispiels die Entwicklung eines Interpreten zu erklären.
Wie andere hier schon geschrieben haben, kann die Entwicklung eines Compilers eine recht aufwändige Sache sein, vor allem, wenn man aktuelle Entwicklungen in der Optimierung berücksichtigt.

Aber: Wenn Du wirklich nur einen Interpreter entwickeln willst, hast Du es einfacher, da Du das sog. "Backend" (Optimierung, Codeerzeugung) weglassen kannst. Um ein bisschen fachlicher zu werden: Für einen Interpreter, der keinen Zwischencode (Bytecode) interpretiert, reicht es aus, einen abstrakten Syntaxbaum (AST) aufzubauen und diesen zur Ausführung einfach zu durchlaufen.

Es gibt es ganz gutes Buch dazu, wenn auch nur auf Englisch: "Modern Compiler Implementation in Java" von Andrew W. Appel (unbedingt die 2. Auflage nehmen!). Von den knapp 500 Seiten brauchst Du für einen AST-Interpreter gerade mal 100-150. Und wenn Du dann auf den Geschmack gekommen bist und doch einen kompletten Compiler schreiben willst, liest Du einfach den Rest :)

Viele Grüße,
Thomas
 
McMonk, das kommt wirklich alles darauf an.

Was ist ein Interpreter einer Sprache? Was ist eine Sprache. Du kannst Dir da ja etwas ganz einfachen lassen, z.b. polnische Notation oder so:

+ 5 4

Das lässt sich ziemlich leicht parsen, wenn man die Argumente immer auf zwei Operanden beschränkt. Aus 2 + (5*6) wird

+ 2 * 5 6

Du wirst morgen nicht Real Basic schreiben aber einen einfachen Interpreter für eine einfache Sprache (die Du Dir selber ausdenken kannst) wirst Du sicher hinbekommen.


Nicht den Mut verlieren, vielleicht aber nicht direkt mit den ganz grossen Sachen anfangen

Alex
 
below schrieb:
Du wirst morgen nicht Real Basic schreiben aber einen einfachen Interpreter für eine einfache Sprache (die Du Dir selber ausdenken kannst) wirst Du sicher hinbekommen.

Eben! Ich würd mich auch erstmal von der strengen Version der formalen Sprache trennen! Als Einstieg kann ich leichtere Kost a la "Gödel,Escher,Bach ein endlos geflochtenes Band" oder das "Metamagicum" von Douglas Hofstadter empfehlen! Hier wird die Problematik der formalen Systeme, der Beschreibung und der Selbstbezüglichkeit etwas anschaulicher angegangen. Wie war das: fürs Informatiktudium braucht man einen wachen Verstand, ein Blatt Papier und einen Stift.
Pack den Rechner an die Seite und versuch Dich mal an diesen Klassikern ( die eben nicht aus dem Compilerbau kommen), statt den 500ten Interpreter zu entwickeln! Das schult das Denken und Problembewußtsein in dieser Richtung!
 
Hi Leute,


ich habe jetzt mit meinem Lehrer gesprochen, er hat gemeint nach den Ferien (Heute in einer Woche) soll ich mich nochmals bei ihm melden, und dann werden wir konkret! Ich denke mir mal, dass ein einfacher Interpreterbau mit abstrakten Syntaxbaum genau richtig kommt ... ;-) Danke für die Buchtipps, werde mich mal bissl reinlesen!
 
Ich empfehle dir "Elements of the Theory of Computation" von Harry R. Lewis und Christos H. Papadimitriou. Das handelt zwar nicht direkt von Compilern erklärt jedoch die dafür nötigen Grundlagen sehr gut. Für einen einfachen Compiler brauchst du auch nur etwa die erste Hälfte des Buches.

Wenn du dann die Grundlagen drauf hast, musst du dir eine kontextfreie Grammatik ausdenken, daraus einen einfachen Stack-Automaten programmieren der den Quelltext parst und daraus einen Baum aufbaut. Zum Schluss nur noch den Baum als Assembler-Postfix auslesen und speichern.

Falls du dir die Programmierung des Stack-Automaten sparen willst, kannst du deine Grammatik auch direkt in lex/yacc umsetzen. Das Buch solltest du trotzdem lesen, denn ein wenig Wissen über Automaten, Sprachen und Grammatiken macht einem die Arbeit mit yacc sehr viel leichter.
 
Zurück
Oben Unten