Laden...

Compilerbau Sinn und Unsinn

Erstellt von Tarsius vor 13 Jahren Letzter Beitrag vor 13 Jahren 8.039 Views
T
Tarsius Themenstarter:in
6 Beiträge seit 2010
vor 13 Jahren
Compilerbau Sinn und Unsinn

Hallo Leute,

ich habe mir in den Kopf gesetzt im Rahmen meiner Diplomarbeit einen rudimentaeren Compiler zu bauen. Das soll natuerlich alles in C# implementiert werden. Nun gibt es ja Generatoren, mit denen ich den Parser und Lexer bauen wollte. Am liebsten haette ich alles von Hand gemacht, aber der Weg ueber einen Generator soll ja der sicherste sein. Jetzt habe ich gelesen, dass dotnet einen Compiler (System.codedom.compiler) von Haus aus mitbringt. Dann habe ich mich gefragt, welchen Sinn es macht dann noch einen Compiler zu bauen ? Sind das rein performancetechnische Gruende ?
Auch im Hinblick auf meine Diplomarbeit fehlt mir jetzt irgendwie die Rechtfertigung den Aufwand zu betreiben ... Das Drachenbuch beschreibt ja wie die Codegenerierung nach Assembler funktioniert, aber, wie soll man ein graphisches Frontend basteln in Assembler? Der Weg ueber codedom erscheint mir am leichtesten.

Gruss
Tarsius

P
992 Beiträge seit 2007
vor 13 Jahren

Du kannst eine neue Sparche definieren und dazu einen Compiler bauen...

C
401 Beiträge seit 2007
vor 13 Jahren

Hi,

es wollen natürlich nicht alle ihre Programme/Sprachen auf der .Net Plattform laufen lassen. Alleine das ist schon ein Grund eigene Compiler zu entwerfen. Graphische Oberflächen wird wohl keiner in ASM bauen und auch dein Compiler braucht sich darum nicht zu kümmern. Du bietest ja nur ein Grundkontingent an Befehlen an, die wirklich in Maschinencode übersetzt werden. Der Rest wird auf Basis dieser Befehle direkt in der Sprache geschrieben (als Library). Schau dir am besten mal Flex und Yacc/Bison an (hast du wahrscheinlich schon, wenn du das Drachenbuch liest 😉 ).

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo Tarsius,

für welche (und nicht in welcher) Sprache willst du den Compiler denn schreiben?

herbivore

V
352 Beiträge seit 2008
vor 13 Jahren

hey leute,

ich habe zu dem thema grundsätzlich mal ne frage und zwar wann macht es denn sinn und wann kommt man auf die idee einen eigenen compiler zu schreiben oder schreiben zu müssen? das thema finde ich interessant finde aber irgendwie den ansatz nicht dazu.

danke 😃

grüße viperneo

Gelöschter Account
vor 13 Jahren

@ViperNeo: diese frage ist auf alles anwendbar...

prinzipiell macht es dann sinn, wenn es sowas gedachtes in der variante noch nciht gibt und gleichzeitig dadurch ein nenneswerter vorteil entsteht (unabhängig für wen der vorteil nutzbar ist)

ausweiten kann man das statement noch zu lernzwecken. da macht es sinn, wenn man praktische erfahrungen sammeln möchte, wie compiler funktionieren und wie es ist soetwas selber zu schreiben.

aber du kannst auch Eric Lippert dazu fragen. er hat den c# compiler mitentwickelt.

F
10.010 Beiträge seit 2004
vor 13 Jahren

Oder auch mal nach DSL ( =Domain-specific language; nicht das mit der Leitung ) suchen.

T
Tarsius Themenstarter:in
6 Beiträge seit 2010
vor 13 Jahren

Danke erstmal fuer die schnellen Antworten. Leider hatte ich selber nicht die Gelegenheit schneller zu reagieren.
Also, ich wollte eine einfache prozedurale Sprache selber entwerfen. Generatoren wie ANTLR kamen mir da in den Sinn. Ich hatte auch vor, die Moeglichkeit der Erstellung eigener GUIs zu schaffen. Es soll praktisch so aehnlich aufgebaut werden wie z. B. der MS Access designer, wo man GUIs basteln und diese mit Funktionalität ausstatten kann mittels VBA.
Zurueck zu meinem Compiler: schreiben will ich ihn in C#. WEnn ich nun Assembler als Zielsprache waehle und GUIs haben will, programmiere ich noch bis zum Renteneintritt X( Danke trotzdem , @corpsegrinder, jetzt weiss ich, wie solche Gui-Toolkits entstehen. Keine Ahnung warum ich nicht selber darauf gekommen bin. Beim Drachenbuch bin ich erst bei der Syntaxanalyse. Freue mich aber schon auf den Anhang, wo SableCC als Generator eingesetzt wird. Ist zwar in Java, aber kann man ja nach C# umschreiben.

@Viperneo: Ich bin auf die Idee gekommen das Thema zu waehlen, weil ich ein anspruchsvolles Thema fuer die Diplomarbeit suche. Zudem habe ich einen Formdesigner geschrieben, wo die Steuerelemente mit Funktion ausgestattet werden muessen. Dafuer ist ein Interpreter/Compiler ganz hilfreich. Um einen Ansatz zu finden schlage ich vor, du holst Dir das Drachenbuch und liest parallel viele Tutorials und Hochschulskripte im Internet.

Ich denke ich werde diese eigene, einfache Sprache entwerfen und als Zielsprache C# verwenden, um Windows Forms nutzen zu koennen. Die Sprache soll einfach und verstaendlich sein, weil Leute, die nur wenig Programmierkenntnisse besitzen, sie moeglichst schnell verstehen sollen. Ich weiss, ich weiss, Aus unserer Sicht ist C# natuerlich auch einfach und verstaendlich...:D 😄

Tarsius

C
401 Beiträge seit 2007
vor 13 Jahren

Die Sprache soll einfach und verstaendlich sein, weil Leute, die nur wenig Programmierkenntnisse besitzen, sie moeglichst schnell verstehen sollen. Ich weiss, ich weiss, Aus unserer Sicht ist C# natuerlich auch einfach und verstaendlich...:D 😄

Vorsicht, je einfacher die Sprache sein soll, die du entwickelst, desto schwieriger wird es sie zu entwickeln.

Achja... zu ANTLR... laut meinem Prof. kommt das sehr schnell an seine Grenzen, von daher vielleicht nicht so zu empfehlen. Ich weiss nicht, ob es gute Parser-/Compiler-Generatoren für .Net gibt, aber für Java gibt es JFlex. Den benutzen wir in der FH und ich kann den empfehlen, wenn man mit Java zurechtkommt.^^

M
1.439 Beiträge seit 2005
vor 13 Jahren

Warum setzt du für dein Vorhaben nicht einfach die DLR mit IronRuby oder IronPython ein?

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo Tarsius,

das Drachenbuch war schon Grundlagenstoff, als ich noch studiert habe. Und das war vor der Wende. 😃 Mich wundert ein bisschen, dass die Millionste prozedurale Programmiersprache als Thema für eine Diplomarbeit zulässig ist. Eigentlich ist doch eine der Forderungen an eine Diplomarbeit, dass "wirklich etwas Neues aufgespürt wurde, das unser Verständnis vom Untersuchungsgegenstand erweitert hat". Gerade dann, wenn du eine anspruchsvolle Diplomarbeit schreiben willst.

Such mal nach diplomarbeit kriterien wahlweise noch mit bewertung oder berurteilung garniert. Es ist doch immer schön zu wissen, worauf es abkommt und nach welchen Regeln das Spiel gespielt wird. 😃

Die Techniken des Compilerbaus machen für mich vor allem Sinn, wenn man sie im weiteren Sinne betrachtet. Wer muss schon eine neue _Programmier_sprache entwickeln? Und wenn er es tut, wird die Welt dadurch wirklich besser? Aber Daten verarbeiten muss eigentlich jeder. Den Quelltext eines Programms kann man aber auch als Eingabedaten des Compilers verstehen. Wenn man sich als davon löst, dass ein Compiler einfach nur ein Programm in einer hohen Sprache in ein semantisch äquivalentes Programm in einer niedrigen Zielsprache übersetzt, erschließen sich eigentlich erst die Möglichkeiten, die sich ergeben, wenn man die Techniken des Compilerbaus einsetzt, um Eingabedaten (die ja oftmals sowieso in einer formalen Sprache vorliegen) zu verarbeiten. Aus einem Randgebiet wird dann plötzlich das zentrale Thema der Informatik: Datenverarbeitung. Man muss nur Daten als Programm und Programm als Daten verstehen.

herbivore

T
Tarsius Themenstarter:in
6 Beiträge seit 2010
vor 13 Jahren

Ich habe mal unter Wikip. geschaut und folgendes gefunden: "Eine Diplomarbeit hingegen soll zeigen, dass der Kandidat das während des Studiums Gelernte anzuwenden versteht und eine Aufgabenstellung selbstständig auf wissenschaftlicher Grundlage in angemessener Zeit bearbeiten kann.". Meines wissens nach unterscheidet sich die DA eben in diesem Punkt von der Dissertiation, die etwas grundlegend Neues behandeln muss. Meine Hochschule hat das auch bestaetigt. Vielleicht hat sich das in den letzten Jahren geaendert.
Ich will natuerlich weder die Welt verbessern, noch das Rad neu erfinden. Ich muss leider ein theorielastiges Thema waehlen, weil mir der praktische Bezug fehlt, auch dadurch weil ich nicht in der IT-Branche arbeite. Ich bin Fernstudent (Informatik) aber arbeite in einem Betrieb, der keine Aufgabenstellung im IT-Bereich bietet, die auch dem "wissenschaftlichen Anspruch" einer DA gerecht werden koennte.

Ich bin ganz deiner Meinung wenn Du sagst "Daten <-> Programm", aber dann kann ich mein Drachenbuch jetzt wegschmeissen und die DA ueber allgemeine Datenverarbeitung schreiben, was sicherlich auch schon x-mal durchexerziert wurde. 😉
Waere schade, das Drachenbuch jetzt bei Seite zu legen, weil 1. es ziemlich teuer war und 2. ich nicht weiss, wie ich sonst meinen "krankhaften Masochismus" ausleben soll 🙂.
DLR werde ich mir sicherlich mal anschauen. Dann muss ich doch noch Ruby oder Phyton lernen ? (womit ich grundsaetzlich kein Problem haette)

Warum wird Compilerbau eigentlich an der Uni oder FH so intensiv gelehrt, wenn man es doch eigentlich in den seltensten Faellen braucht und es so viele Tools gibt (YACC, SableCC, ANTLR, DLR usw.)? Oder ist das vergleichbar mit dem Erlernen der Blockfloete im Musikuntericht? 😁

T
381 Beiträge seit 2009
vor 13 Jahren

Es wird aus gleichem Grund gelehrt, wesshalb ein E-Techniker auch wissen muss wie Strom generiert wird, obwohl er es nicht selber implementieren muss. Man muss eben die Grund lagen von dem kennen was man benutzen will. Nur weil jeder Student Compilerbau hört, wird nicht von jedem erwartet einen Compiler zu schrieben, jedoch sehr wohl zu verstehen was hinter der Programmierung passiert.
Zwischencodes, Ablauf von Compiliervorgängen, etc..

Wir haben als Uniprojekt mal ein kleines Programm geschrieben, welches eine eigene Scriptsprache parsen musste und entsprechend Befehle ausgeführt hat. Das war auch schon eine art kleiner Compiler und an dieser stelle auch notwendig selbst zu schreiben.

Eine neue Sprache erfinden halte ich auch für unsinn. Und wenn sollte man sich ein Anwendungsfall raussuchen der sinnvoll ist. Siehe: DSL (das von oben)

Gruß, Tarion (Mit kaputter F Taste an seinem Laptop)

U
282 Beiträge seit 2008
vor 13 Jahren

Ich denke, wenn du in deiner DA eine eigene Sprache entwickeln möchtest und die Uni das als mögliche DA akzeptieren, dann mach es einfach. Ich kenne auch die Regelung, dass in der DA nicht zwangsläufig was neues entstehen muss, sondern vielmehr, dass der Student zeigt, dass er wissenschaftlich arbeiten kann.

In 90% aller Fälle interessiert sich für die DA nach der Abgabe kein Mensch mehr.
Wichtig ist, dass du etwas lernst an einem Gebiet, was dir Spaß macht. Du darfst halt nur nicht erwarten, dass in 5 Jahren jeder nur noch "Tarsius#" implementiert.

Wobei ich es in der Tat interessanter fände, wenn die Sprache sich auf irgendeine Anwendung bezieht. Wenn es eine universelle Sprache ist, dann kannst du auch C# sonstwas nehmen und einfach die Vokabeln austauschen.

Schöner wäre es, wenn es einen Anwendungskontext gibt, den man mit bisherigen Sprachen nicht gut abdecken kann und du nun gerade diesen Teil gut machst (dann ist es auch nicht mehr relevant, ob deine Sprache in anderen Bereichen so gut ist wie existierende Sprachen -- denn das wird sie sicherlich nicht sein). Definiere dir also sehr früh EINE besondere Stärke, die deine Sprache haben soll, die andere nicht haben

So zeichnet sich z.B. F# daurch aus, dass man mit Einheiten rechnen kann. Ähnliches gibt es in C++/Boost schon, aber in F# wurde es in die Sprache übernommen und hat darduch einen viel schöneren Syntax.

2.891 Beiträge seit 2004
vor 13 Jahren

ich habe mir in den Kopf gesetzt im Rahmen meiner Diplomarbeit einen rudimentaeren Compiler zu bauen. Das soll natuerlich alles in C# implementiert werden.

Das haben wir mal in einem Seminar gemacht...

T
Tarsius Themenstarter:in
6 Beiträge seit 2010
vor 13 Jahren

Das haben wir mal in einem Seminar gemacht...

Kann ich natuerlich auch mal eben in wenigen Tagen ein Compiler zusammenbasteln. Aber nur durch Kopieren (aus dem Internet) oder Anleitung (Seminar). Ich finde nichts schlimmes dran sich tiefer in die Materie einzuarbeiten...
Bitte versteht mich nicht falsch, ich habe nicht vor irgendwelche Preise zu gewinnen, oder der naechste Bjarne Stroustrup zu werden. Ich suche lediglich nach einem Thema fuer meine DA.

Ich sehe es aber ein. Eine DSL zu entwerfen waere natuerlich schlauer, da es ja schon so viel universelle Sprachen gibt. Ich weiss nur leider nicht WAS... Ich stehe da voll auf dem Schlauch. Wenn ich mal Brainstorme, was meine Schwerpunkte bisher waren: CAQ-Systeme, Datenbanken, Bildverarbeitung (Mustererkennung). Zu den Datenbanken faellt mir spontan SQL ein. Gibt es schon, faellt also weg. Vielleicht eine Skriptsprache, die im Zusammenhang mit Mustererkennung oder Bildverarbeitung zum Einsatz kommt... mmh. Skriptsprache in einem modularen CAQ-System.....
Habt Ihr eine Idee? Wo gibt es Bedarf?
Oder anders gefragt: wenn Ihr ein Thema waehlen duerftet, C#-bezogen, worueber wuerdet Ihr schreiben?

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo Tarsius,

Bjarne Stroustrup

und das in einem C# Forum, tztztz. Wenn schon Heldenverehrung, dann Anders Hejlsberg. 😃

herbivore

C
401 Beiträge seit 2007
vor 13 Jahren

Also ein aktuelles Thema ist sicherlich Parallelisierung. Vielleicht auch in Verbindung mit einer Cloud. Nur mal so als Gedanke.

T
381 Beiträge seit 2009
vor 13 Jahren

Ne eigene Sprache für Bilderkennung wäre sicherlich interessant. Die kann ja nach C# oder c kompiliert werden und vorhandene Bibliotheken für die eigentlichen Routinen nutzen. Aber in sich eben darauf optimiert sein möglichst einfach das gewünschte aus einem Bild zu filtern.

T
Tarsius Themenstarter:in
6 Beiträge seit 2010
vor 13 Jahren

Ups, wie hiess denn noch diese Däne... ja richtig - Anders Hejlsberg, den meinte ich natuerlich 😄

Also ein aktuelles Thema ist sicherlich Parallelisierung. Davon habe ich nicht so viel Ahnung. Ist natuerlich wichtig, erst recht im Bereich Bildverarbeitung.

Ne eigene Sprache für Bilderkennung wäre sicherlich interessant. Die kann ja nach C# oder c kompiliert werden und vorhandene Bibliotheken für die eigentlichen Routinen nutzen. Aber in sich eben darauf optimiert sein möglichst einfach das gewünschte aus einem Bild zu filtern.

stimmt, gute Idee! Man koennte die einzelnen Schritte der Mustererkennung , z. B. diverse Filter,morphologische Operationen (und deren Kernelgroessen als Parameter), die Featureextraction usw. so viel flexibler zusammenbauen. Die Vorstellung gefaellt mir. Gibt es sicherlich auch schon, aber was solls.

5.742 Beiträge seit 2007
vor 13 Jahren

was auch sehr interessant wäre: Eine Sprache/Spracherweiterung für C#, deren Syntax direkt auf Unittests abgestimmt ist und somit direkten Support für Mocks, Stubs usw. bietet. Das ist zwar schon mit Frameworks wie RhinoMock möglich - wenn es komplexer wird, aber nur sehr umständlich