Compilerbau Bücher?
-
Xin schrieb:
Aus dem gequoteten lese ich nur, was ich schon schrieb!?
Ja meinte ich ja. Hab deinen Text mal vereinfacht.^^
Xin schrieb:
Kommt drauf an, was er sonst noch macht. Der Compilerbau ist eigentlich gar nicht sooo schwer, wenn man ein paar Grundlagen kennt. Und wenn er sich nicht an die Fachbücher hält, sondern seinen Verstand benutzt, kann man viele Funktionen in einen 15 Zeiler unterbringen.
Hmm ... ich sollte vielleicht sagen das ich ziemlicher Anfänger bin.
-
maximAL schrieb:
PS: Ich habe eine Diplomarbeit in dem Gebiet geschrieben. Allerdings für eine weit besser dokumentierte und klarer strukturierte Sprache als C++ und mit Verwendung eines Parsergenerators
Dito. Hattest Du etwas Akzeptables zum Thema 'Semantische Analyse' gefunden? Sämtliche Bücher, die ich seinerzeit zu dem Thema in der Hand hatte, blieben da... sagen wir mal... sehr theoretisch und wortkarg. Wenn eine Seite in einem Buch das Thema abhandelt, dann verläuft das eher nach dem Motto "sowas gibt's auch" und fertig. Fand ich recht enttäuschend.
Ich wollte dazu selbst mal ein Buch schreiben, aber schlussendlich... das Drachenbuch ist allgegenwärtig und das Thema garantiert nicht gerade nennenswerte Verkaufszahlenµ schrieb:
Xin schrieb:
Kommt drauf an, was er sonst noch macht. Der Compilerbau ist eigentlich gar nicht sooo schwer, wenn man ein paar Grundlagen kennt. Und wenn er sich nicht an die Fachbücher hält, sondern seinen Verstand benutzt, kann man viele Funktionen in einen 15 Zeiler unterbringen.
Das birgt aber erhebliche Fickelgefahr.
Für die 15 Zeilen habe ich drei Tage gebraucht, sie regeln den Ordnung des Parserbaums anhand der Operatorpriorität. Das üblicherweise an der Stelle beschriebene Verfahren ist eine kleine Redundanzkatastrophe und da ich mich bzgl. der Prioritäten sowieso nicht endgültig festlegen wollte, wäre das frickelig bis zum geht nicht mehr geworden. Prinzipiell kann ich zur Compile-Laufzeit die Operatorprioritäten ändern, aber das muss man ja nicht. Wichtig ist, dass nur eine Stelle gibt, die entscheidet, wie der Baum aufgebaut wird.
µ schrieb:
Und sowas wie einen Bottom-Up-Parser überlegt man sich nicht mal nebenher. Auf so etwas kommt man von alleine, mit an Sicherheit grenzende Wahrscheinlichkeit, garnicht. Um diese Themen zu verstehen ist also erstmal Grundwissen gefragt: Grammatiken, Automaten und dergleichen. Alleine dafür geht schon ein halbes Jahr drauf.
In einer Hochschule schon. Wenn er nicht ganz blöd ist, kann er sich das auch in 2 Tagen aneignen.
Enno schrieb:
Ja meinte ich ja. Hab deinen Text mal vereinfacht.^^
Sah mir eher nach einer 1:1 Kopie mit kaputten Code-Tags aus
Enno schrieb:
Hmm ... ich sollte vielleicht sagen das ich ziemlicher Anfänger bin.
Wir sind alle Anfänger... mehr oder weniger.
Beschreib mal, was Du kannst, damit ich abschätzen kann, wieviel Erklärung Du brauchst.
Ich darf mal davon ausgehen, dass Du C++ und JavaScript zumindest akzeptabel kannst?
-
Xin schrieb:
In einer Hochschule schon. Wenn er nicht ganz blöd ist, kann er sich das auch in 2 Tagen aneignen.
Ich schätze Du bist schon so lange in dem Thema drinnen, dass Du Dir nicht mehr vorstellen kannst, welche Anlaufschwierigkeiten man bei sowas haben kann. Er ist Azubi, ohne Grundlagenvorlesungen in Logik oder Mathematik! Den Leuten im ersten Semester brennt gerne mal der Schädel durch bis sie geschluckt haben was eine Grammatik ist. Alles schon vergessen?
Die Aufgabe ist, wenn sie nicht ganz erheblich eingeschränkt wird, nicht zu bewältigen. Punkt.
Aber gut, ich sollte mal ein wenig arbeiten und nicht nur im Forum rumhängen
-
Xin schrieb:
Wir sind alle Anfänger... mehr oder weniger.
Beschreib mal, was Du kannst, damit ich abschätzen kann, wieviel Erklärung Du brauchst.
Ich darf mal davon ausgehen, dass Du C++ und JavaScript zumindest akzeptabel kannst?Hmm... ich denke eher nicht.
Ich kann nicht viel aber Parser hab ich schon z.B. geschrieben. Also wirklich nicht so viel erwarten.
So ich hab nochmal eben mit meinem Aufgabensteller gesprochen. Er sagte es so:
Schreibe ein Compiler für unser Javascript Code der OOP enthält und es wieder in JS umwandelt, so das der Browser das verstehen kann.
Ich hab hier eine test Datei die ich einlesen kann um zu probieren ob mein Compiler funktioniert. Vielleicht hilft das.
class a { public: function hello(){ console.log("hello"); } }; class b { public: function bye(){ console.log("Bye"); } }; class c : public a,b{ public: function greet(){ console.log("greeting"); } }
-
Xin schrieb:
Dito. Hattest Du etwas Akzeptables zum Thema 'Semantische Analyse' gefunden?
Nein, das war für meine Aufgabe auch nicht nötig.
Eigentlich wäre für das, was praktisch rauskommen sollte gar kein tiefergehendes Wissen über Compilerbau nötig gewesen, da dass meisste eh vom Parsergenerator übernommen wurde. Aber das musste ja voll wissenschaftlich sein ()und ich hab meine Zeit damit vertrödelt die LL(k) Eigentschaft für die Grammatik zu bestimmen. Und LL Parser sind, sobald es über LL1 hinausgeht, wiederum unglaublich schlecht dokumentiert.
-
µ schrieb:
Xin schrieb:
In einer Hochschule schon. Wenn er nicht ganz blöd ist, kann er sich das auch in 2 Tagen aneignen.
Ich schätze Du bist schon so lange in dem Thema drinnen, dass Du Dir nicht mehr vorstellen kannst, welche Anlaufschwierigkeiten man bei sowas haben kann. Er ist Azubi, ohne Grundlagenvorlesungen in Logik oder Mathematik! Den Leuten im ersten Semester brennt gerne mal der Schädel durch bis sie geschluckt haben was eine Grammatik ist. Alles schon vergessen?
Nein, überhaupt nicht.
Ich erinnere mich sehr gut daran, wie man jeden Furz so verklausuliert hatte, dass möglichst niemand verstand, worum es geht, oftmals in einer hochtheoretischen Betrachtung, ohne praktischen Bezug, reichlich griechischen Buchstaben und so weiter.
Es ist wie alles, was ich bisher in der Wissenschaft kennengelernt habe. Aufwendige Arbeiten an mit CAD, wissenschaftliche Publikationen und die Realisation sieht dann so aus, dass man einen Milchaufschäumer und Powertape kauft und als Kontrastmittel Tinte und Wasser mischt. Sowas basteln auch Grundschüler, aber die Papers hätten sie nicht schreiben können...
Gibt's Fischertechnik eigentlich noch für Kinder oder wird das heute nur noch an Wissenschaftler verkauft... ich hab's die letzten Jahren nämlich nur noch in Laboren gesehen.Deterministische Automaten sind nun wirklich kein Zauberwerk und die Tatsache, dass man 90 oder 180 Minuten pro Woche damit verbrachte, führt nunmal dazu, dass man das ganze - insbesondere den Part, den er braucht - zeitlich wunderbar reduzieren kann.
Zumal er das perfekte Beispiel hat und kennt, um sich einen Automaten und Grammatiken praktisch vorzustellen. Lässt man die Verklausulierung weg, ist das nicht mehr als ein Knobelspiel.µ schrieb:
Die Aufgabe ist, wenn sie nicht ganz erheblich eingeschränkt wird, nicht zu bewältigen. Punkt.
Unbestritten, zumal er die komplette Standard-Lib abbilden müsste, Templates, nicht den Hauch einer Chance...
Aber Algorithmen von C++ nach JS zu überführen, könnte er schaffen, wenn er sich tief reinkniet, und wenn er es schafft, dann hat er sehr viel gelernt. Darum geht's für ihn in der Ausbildung.
maximAL schrieb:
Xin schrieb:
Dito. Hattest Du etwas Akzeptables zum Thema 'Semantische Analyse' gefunden?
Nein, das war für meine Aufgabe auch nicht nötig.
Eigentlich wäre für das, was praktisch rauskommen sollte gar kein tiefergehendes Wissen über Compilerbau nötig gewesen, da dass meisste eh vom Parsergenerator übernommen wurde. Aber das musste ja voll wissenschaftlich sein ()und ich hab meine Zeit damit vertrödelt die LL(k) Eigentschaft für die Grammatik zu bestimmen. Und LL Parser sind, sobald es über LL1 hinausgeht, wiederum unglaublich schlecht dokumentiert.
Jow... das mit dem wissenschaftlich kenne ich... ich habe auch nicht wissenschaftlich genug gearbeitet... mein Prof wollte, dass ich gewisse Dinge aus dem Informatikduden zitiere... blöderweise stand da genau das Gegenteil von dem drin, was an der Hochschule gelehrt und ich angewandt habe. Kurz: Da stand Quatsch drin. Nun war die Quelle aber nunmal da und das Zitat vom Prof verlangt. Freundlicherweise fand ich im Informatikduden auch gleich die Stellen, um den Informatikduden zu widerlegen... ich musste mich also nicht nur auf die Vorlesungen meiner eigenen Hochschule verlassen. Aber das war natürlich viel Text, eigentlich vollkommen ohne größeren Sinn, nur um das geforderte Zitat zu bringen und es dann anschließend gleich wieder zu widerlegen.
Wissenschaftliches Arbeiten würde ich nicht als Blödsinn bezeichnen, die Diskussion hatte ich allerdings auch schon mit meinem Prof. Er meinte, ich müsse belegen, dass meine Gedankengänge richtig sind, in dem ich meine Annahmen über andere Bücher belege. Ich fragte ihn, wie ich davon ausgehen kann, dass in dem Buch etwas sinnvolles steht, ob es nicht sinnvoller wäre, meinen Verstand zu benutzen und statt irgendwelcher fraglicher Belege meine eigene Begründung zu geben, die auch beschreibt, warum ich diese Arbeit mache. Meine Begründungen könnten ja falsch sein - er meinte, dass es in jedem Fachbuch Quellenangaben gibt, womit der Autor des Fachbuchs seine Annahmen belegt und meine Arbeit nur so als richtig belegt sein könnte. So muss ich auch arbeiten. Die Frage, wie das erste Fachbuch entstanden ist und wie Fachbücher etwas belegen, wenn sie sich auf Fachbücher ohne Belege stützen, schien ihn zu überraschen, jedenfalls gab es eine längere Denkpause und eine Antwort bekam ich auch nicht.
Ich habe aber von einem anderen Prof schriftlich bestätigt bekommen, dass ich ein kritischer Geist wäre, der zielsicher Schwachpunkte thematisiert... kommt in der akademischen Welt gar nicht gut an... wenn's gedruckt wurde, muss es wahr sein.
-
Enno schrieb:
Xin schrieb:
Wir sind alle Anfänger... mehr oder weniger.
Beschreib mal, was Du kannst, damit ich abschätzen kann, wieviel Erklärung Du brauchst.
Ich darf mal davon ausgehen, dass Du C++ und JavaScript zumindest akzeptabel kannst?Hmm... ich denke eher nicht.
Ich kann nicht viel aber Parser hab ich schon z.B. geschrieben. Also wirklich nicht so viel erwarten.
Verstehst Du den Code, den Du kompilieren sollst?
Enno schrieb:
Schreibe ein Compiler für unser Javascript Code der OOP enthält und es wieder in JS umwandelt, so das der Browser das verstehen kann.
für unseren C++-Code?
Enno schrieb:
Ich hab hier eine test Datei die ich einlesen kann um zu probieren ob mein Compiler funktioniert. Vielleicht hilft das.
class a { public: function hello(){ console.log("hello"); } }; class b { public: function bye(){ console.log("Bye"); } }; class c : public a,b{ public: function greet(){ console.log("greeting"); } }
Mehrfachvererbung... sieh an... daher weht also der Wind... ^^
Weiß Dein Aufgabensteller, dass JavaScript keine Mehrfachvererbung unterstützt? Das ist umsetzbar, aber wie ich schon sagte: Beide Sprachen lassen sich nicht 1:1 umsetzen, das ist technisch nicht möglich. Diesen Code nach JS zu bringen, ist aber möglich, wenn Du verstehst, was genau dieser Code hier tut.
-
Ich glaube ich hatte die Aufgabe am Anfang falsch verstanden.
Der drückt sich auch immer aus, versteht ja auch kein Mensch.(Ausbilder)
Don't kill me.
-
Enno schrieb:
Ich glaube ich hatte die Aufgabe am Anfang falsch verstanden.
Der drückt sich auch immer aus, versteht ja auch kein Mensch.(Ausbilder)
Don't kill me.Heißt?
Wie lautet Deine Aufgabe nun?
-
Xin schrieb:
[
Diesen Code nach JS zu bringen, ist aber möglich, wenn Du verstehst, was genau dieser Code hier tut.Das soll ich auch machen.
Ich hab mri den ehrlich gesagt noch garnicht richtig angeguckt.
-
Enno schrieb:
Xin schrieb:
[
Diesen Code nach JS zu bringen, ist aber möglich, wenn Du verstehst, was genau dieser Code hier tut.Das soll ich auch machen.
Ich hab mri den ehrlich gesagt noch garnicht richtig angeguckt.Dafür musst Du ein Programm schreiben, was den Code versteht und das, was es verstanden hat, als JavaScript wieder wegschreibt... einen Compiler.
-
Xin schrieb:
class a { public: function hello(){ console.log("hello"); } }; class b { public: function bye(){ console.log("Bye"); } }; class c : public a,b{ public: function greet(){ console.log("greeting"); } }
Mehrfachvererbung... sieh an... daher weht also der Wind... ^^
wenn Du verstehst, was genau dieser Code hier tut.
Öhm ... hier erbt die class c von a und b alle public Funktionen?
Xin schrieb:
Weiß Dein Aufgabensteller, dass JavaScript keine Mehrfachvererbung unterstützt?
Ja das ist doch grade der sinn meines Compilers oder? Es ist umsetzbar allerdings nicht in JS vorgesehen, d.h. mein Compiler übersetzt das dann wieder?
-
Was als Einstieg recht gut ist imo, ist Language Implementation Patterns | ISBN: 193435645X, damit kann man schon einiges anfangen. Allerdings empfehle ich trotzdem die Kenntnis von gewissen Interna von C und/oder C++, damit man ne Idee hat, wie verschiedene Dinge umgesetzt werden könnten.
-
Ich wuerde die Aufgabe ja mit Regex loesen.
-
Kellerautomat schrieb:
Ich wuerde die Aufgabe ja mit Regex loesen.
Ja, den Lexer.
-
Wer braucht schon Lexer oder Parser. Stringersetzung mit Regex reicht.
-
Also was ist jetzt die Aufgabe?
Einen JS++ zu JS Compiler schreiben, wobei JS++ ein paar Erweiterungen wie Mehfrachvererbung in JS einbringt?
Und C++ ist "nur" die Sprache in der Du den Compiler entwickeln sollst?Kellerautomat schrieb:
Ich wuerde die Aufgabe ja mit Regex loesen.
Not sure if trolling or just stupid
-
µ schrieb:
Also was ist jetzt die Aufgabe?
Einen JS++ zu JS Compiler schreiben, wobei JS++ ein paar Erweiterungen wie Mehfrachvererbung in JS einbringt?
Und C++ ist "nur" die Sprache in der Du den Compiler entwickeln sollst?Ja, denke so ist es gemeint. Auch wenn ich mir nicht sicher bin ob das jetzt JS++ ist. Aber klingt ja danach. Ich kenne mich da leider nicht ganz so gut aus. Aber Mehrfachvererbung ist dort ja drin.
Ach so, ja soll in C++ geschrieben sein.
-
µ schrieb:
Not sure if trolling or just stupid
Mal ehrlich. Schon darueber nachgedacht? Auch wenn es erstmal nicht ernst gemaint war, finde ich die Idee nach genauerem Nachdenken gar nicht mal so doof. Das koennte tatsaechlich funktionieren.
-
Kellerautomat schrieb:
µ schrieb:
Not sure if trolling or just stupid
Mal ehrlich. Schon darueber nachgedacht? Auch wenn es erstmal nicht ernst gemaint war, finde ich die Idee nach genauerem Nachdenken gar nicht mal so doof. Das koennte tatsaechlich funktionieren.
Damit wäre meine Frage geklärt :p