Compilerbau Bücher?
-
Was ist dieses "erfundene" OJS oder OOPJS. Von wem erfunden? Intern?
Gibt's da Doku zu?
Verstehst Du die Doku?
Ist Dein Ausbilder sich bewusst, welche Aufgabe er Dir gibt?
Ja.Bist Du in der Lage, OOPJS zu verstehen, die Konzepte dahinter,
Ja.bist Du in der Lage das in JS zu schreiben
Ja.und bist Du in der Lage C++ zu programmieren?
Ja.P.S.: Wegn OJS/OOPJS editiere ich gleich er ist grade beschäftigt. Also sobald er zeit hatte.
-
Und frage direkt noch welche Tools Du einsetzen sollst oder darfst. Also an Lexer- und Parsergeneratoren.
Anzhand einer (kurzen) Beispieldatei ist eine Sprache eigentlich nicht hinreichend klar spezifiziert. Hast Du freie Hand? Gibt er Dir die Grammatik?
Was ist mit vergleichbaren Projekten. Schon recherchiert?
µ schrieb:
Aber gut, ich sollte mal ein wenig arbeiten und nicht nur im Forum rumhängen
Dürfte mein unproduktivster Tag des Jahres sein. Na prima.
-
µ schrieb:
Und frage direkt noch welche Tools Du einsetzen sollst oder darfst. Also an Lexer- und Parsergeneratoren.
Anzhand einer (kurzen) Beispieldatei ist eine Sprache eigentlich nicht hinreichend klar spezifiziert. Hast Du freie Hand? Gibt er Dir die Grammatik?
Was ist mit vergleichbaren Projekten. Schon recherchiert?
Lexer- und Parsergeneratoren muss ich selber machen. Also er meinte ich soll alles selber schreiben.
Zu der 2 Frage frag ich ihn auch gleich wenn er zeit hat und editiere dann.
Ehrlich gesagt: Ne noch nicht werde ich gleich mal tun.µ schrieb:
µ schrieb:
Aber gut, ich sollte mal ein wenig arbeiten und nicht nur im Forum rumhängen
Dürfte mein unproduktivster Tag des Jahres sein. Na prima.
Ich hoffe ich bin nicht schuld.
-
Enno schrieb:
Lexer- und Parsergeneratoren muss ich selber machen. Also er meinte ich soll alles selber schreiben.
Autsch. Das Zeug ist alles gut verstanden, immerhin schonmal ein Vorteil.
Trotzdem kommt da einiges an Arbeit auf Dich zu.Hier schonmal ein sehr gutes Skript über die Konstruktion von Bottom-Up Parsern:
http://amor.cms.hu-berlin.de/~kunert/papers/lr-analyse/
(LR0, LR1, SLR und LALR Parsergeneratoren habe ich vor kurzem implementiert, aber in C#. Das Skript war jedenfalls eine große Hilfe)Enno schrieb:
Ich hoffe ich bin nicht schuld.
Ach was. Der Montag ist Schuld
-
µ schrieb:
Hier schonmal ein sehr gutes Skript über die Konstruktion von Bottom-Up Parsern:
http://amor.cms.hu-berlin.de/~kunert/papers/lr-analyse/Oh coole Sache. Sieht gut aus.
Ich schau da mal genau rein.
-
µ schrieb:
Hier schonmal ein sehr gutes Skript über die Konstruktion von Bottom-Up Parsern:
http://amor.cms.hu-berlin.de/~kunert/papers/lr-analyse/
(LR0, LR1, SLR und LALR Parsergeneratoren habe ich vor kurzem implementiert, aber in C#. Das Skript war jedenfalls eine große Hilfe)Hmm... ^^ ich sehe griechische Buchstaben, Buchstaben mit Indizes und verklausulierte Sätze.
µ schrieb:
Enno schrieb:
Ich hoffe ich bin nicht schuld.
Ach was. Der Montag ist Schuld
Joah, noch vier Montage und dann ist endlich Wochenende.
-
So meine Damen und Herren.
Meine Aufgabe ist nun klar def..
Ich soll nur diesen geposteten Teil Code Compilieren können. Es geht nur um das nicht mehr. Hat er selbst erfunden. Hat er vorher aber auch nicht gesagt der Schlaumeier. Also soll ich einen Compiler für diesen Code abschnitt schreiben. Wichtig oder der schwierige Teil laut ihm ist das OOP JS beizubringen. D.h. heißt auch ich kann mir den Grammatik kram wohl sparen oder?Xin schrieb:
µ schrieb:
Enno schrieb:
Ich hoffe ich bin nicht schuld.
Ach was. Der Montag ist Schuld
Joah, noch vier Montage und dann ist endlich Wochenende.
YAAAYY
-
Enno schrieb:
So meine Damen und Herren.
Meine Aufgabe ist nun klar def..
Ich soll nur diesen geposteten Teil Code Compilieren können. Es geht nur um das nicht mehr.Schade, schreib ein Programm, das den geladenen Code mit diesem Programm vergleicht und wenn das passt, schreibst Du einen festgelegten Text auf die Platte. Problem gelöst
Enno schrieb:
Hat er selbst erfunden. Hat er vorher aber auch nicht gesagt der Schlaumeier. Also soll ich einen Compiler für diesen Code abschnitt schreiben. Wichtig oder der schwierige Teil laut ihm ist das OOP JS beizubringen.
... Du meinst JS?
Ich glaube, ich verstehe die Aufgabe jetzt weniger, denn je. ^^
Enno schrieb:
D.h. heißt auch ich kann mir den Grammatik kram wohl sparen oder?
Nicht, wenn die Aufgabe einen Sinn ergeben soll.
-
Xin schrieb:
Enno schrieb:
So meine Damen und Herren.
Meine Aufgabe ist nun klar def..
Ich soll nur diesen geposteten Teil Code Compilieren können. Es geht nur um das nicht mehr.Schade, schreib ein Programm, das den geladenen Code mit diesem Programm vergleicht und wenn das passt, schreibst Du einen festgelegten Text auf die Platte. Problem gelöst
Ehm ... was?^^
Xin schrieb:
Enno schrieb:
Hat er selbst erfunden. Hat er vorher aber auch nicht gesagt der Schlaumeier. Also soll ich einen Compiler für diesen Code abschnitt schreiben. Wichtig oder der schwierige Teil laut ihm ist das OOP JS beizubringen.
... Du meinst JS?
Ich glaube, ich verstehe die Aufgabe jetzt weniger, denn je. ^^
Oh, ich glaub das war nur verwirrend geschrieben.
Er meinte das Problem ist in JS die OOP also die class und vererbung rein zubekommen.Xin schrieb:
Enno schrieb:
D.h. heißt auch ich kann mir den Grammatik kram wohl sparen oder?
Nicht, wenn die Aufgabe einen Sinn ergeben soll.
Mist!
-
Enno schrieb:
Xin schrieb:
Enno schrieb:
So meine Damen und Herren.
Meine Aufgabe ist nun klar def..
Ich soll nur diesen geposteten Teil Code Compilieren können. Es geht nur um das nicht mehr.Schade, schreib ein Programm, das den geladenen Code mit diesem Programm vergleicht und wenn das passt, schreibst Du einen festgelegten Text auf die Platte. Problem gelöst
Ehm ... was?^^
Wenn dein "Compiler" nur das von dir gepostete Script kompilieren können soll, dann Prüfst du eben, ob die Eingabe eben genau diesem Script entspricht. Wenn ja, schreibst du die vorher per Hand ausgeklügelte und in deinem "Compiler" hart kodierte JavaScript-Entsprechung in die Ausgabedatei und du hast fertig.
-
Swordfish schrieb:
Enno schrieb:
Xin schrieb:
Enno schrieb:
So meine Damen und Herren.
Meine Aufgabe ist nun klar def..
Ich soll nur diesen geposteten Teil Code Compilieren können. Es geht nur um das nicht mehr.Schade, schreib ein Programm, das den geladenen Code mit diesem Programm vergleicht und wenn das passt, schreibst Du einen festgelegten Text auf die Platte. Problem gelöst
Ehm ... was?^^
Wenn dein "Compiler" nur das von dir gepostete Script kompilieren können soll, dann Prüfst du eben, ob die Eingabe eben genau diesem Script entspricht. Wenn ja, schreibst du die vorher per Hand ausgeklügelte und in deinem "Compiler" hart kodierte JavaScript-Entsprechung in die Ausgabedatei und du hast fertig.
Danke.
Ob ich da nun aber ein halbes Jahr dran hocke na ich weiß nicht. xD Der hat sicher noch was mit mir vor.
-
Die dort beschriebenen Konzepte sollten mehr als ausreichen:
http://www.c-plusplus.net/forum/268247Und wenn du nur den Lexer (Scanner) übernimmst oder dich zumindest inspirieren lässt.
-
fghfgh schrieb:
Die dort beschriebenen Konzepte sollten mehr als ausreichen:
http://www.c-plusplus.net/forum/268247Und wenn du nur den Lexer (Scanner) übernimmst oder dich zumindest inspirieren lässt.
Danke.
-
µ schrieb:
Enno schrieb:
Lexer- und Parsergeneratoren muss ich selber machen. Also er meinte ich soll alles selber schreiben.
Autsch.
Nunja, weder ein Lexer noch ein einfacher LL Parser sind Teufelswerk, solang die Grammtik klar ist.
-
maximAL schrieb:
µ schrieb:
Enno schrieb:
Lexer- und Parsergeneratoren muss ich selber machen. Also er meinte ich soll alles selber schreiben.
Autsch.
Nunja, weder ein Lexer noch ein einfacher LL Parser sind Teufelswerk, solang die Grammtik klar ist.
Also ich muss sagen das mit der Grammatik finde ich ziemlich schwer. ^^
Bin hart am tüfteln hier.
-
Enno schrieb:
maximAL schrieb:
µ schrieb:
Enno schrieb:
Lexer- und Parsergeneratoren muss ich selber machen. Also er meinte ich soll alles selber schreiben.
Autsch.
Nunja, weder ein Lexer noch ein einfacher LL Parser sind Teufelswerk, solang die Grammtik klar ist.
Also ich muss sagen das mit der Grammatik finde ich ziemlich schwer. ^^
Bin hart am tüfteln hier.Ja, aber das zu verstehen ist auch das Wichtigste an der ganzen Sache
In der Praxis muss man selten einen Parser schreiben, aber doch häufiger irgendwelche Skriptsprachen verwenden und da sollte man die Grammatik, wie sie meistens in der Doku steht, auch lesen können
-
maximAL schrieb:
Enno schrieb:
maximAL schrieb:
µ schrieb:
Enno schrieb:
Lexer- und Parsergeneratoren muss ich selber machen. Also er meinte ich soll alles selber schreiben.
Autsch.
Nunja, weder ein Lexer noch ein einfacher LL Parser sind Teufelswerk, solang die Grammtik klar ist.
Also ich muss sagen das mit der Grammatik finde ich ziemlich schwer. ^^
Bin hart am tüfteln hier.Ja, aber das zu verstehen ist auch das Wichtigste an der ganzen Sache
In der Praxis muss man selten einen Parser schreiben, aber doch häufiger irgendwelche Skriptsprachen verwenden und da sollte man die Grammatik, wie sie meistens in der Doku steht, auch lesen könnenJap. Ich kämpfe.
Aber das Script was oben gepostet wurde ist supi.
-
Enno schrieb:
Jap. Ich kämpfe.
Aber das Script was oben gepostet wurde ist supi.
"LR(k)-Analyse für Pragmatiker" ?
Der Anfang ist vielleicht etwas schwierig aber eigentlich ist das Skript mit sehr vielen Beispielen und viel Prosa angereichert. Die Grundlagen zu Grammatiken kannst Du bestimmt bei Wikipedia nachlesen, bei sonstigen Schwierigkeiten einfach nachfragen.
maximAL schrieb:
µ schrieb:
Enno schrieb:
Lexer- und Parsergeneratoren muss ich selber machen. Also er meinte ich soll alles selber schreiben.
Autsch.
Nunja, weder ein Lexer noch ein einfacher LL Parser sind Teufelswerk, solang die Grammtik klar ist.
Ein-Wort-Zitate sind schon etwas sinnentstellend.
Trotzdem an der Stelle nochmal zu LL/TopDown-Parsern: Es ist immer noch nicht so ganz klar wie die Aufgabenstellung aussieht. Dass nur der Beispielcode kompiliert werden soll ist offensichtlich Unsinn. Hier muss nochmal mit dem Ausbilder gesprochen werden über die exakte Sprache die implementiert werden soll.
Dann kann man abwägen:
1. Einen LL-Parser direkt, d.h. per Rekursiven Abstieg* implementieren. Das kommt in Frage wenn die Sprache sehr einfach ist. Sie muss eigentlich so einfach sein, dass man Mehrdeutigkeiten "sieht" bzw. die First- und Follow-Mengen fast trivial sind. Jede Änderung an der Grammatik wäre mindestens unbequem.
2. Einen Tabellengesteuerten LL-Parser ("Nichtrekursive prädiktive Syntaxanalyse"). Wie kommt man an die Tabelle? Darf er LL-Generatoren verwenden um wenigstens die Tabelle zu erstellen und diese nur noch abarbeiten? Muss die Tabelle von Hand erstellt werden (Stift&Papier?), dann ist jede Änderung an der Grammatik die reine Folter. Genauso wie bei LR-Parsern. Deshalb hier auch fast der einfachste Weg, einen LL-Parsergenerator zu schreiben. Und schon stellt sich die Frage: Warum dann nicht direkt einen LR-Generator, der kaum mehr Mühe macht, aber die "bessere" Variante ist.Übrigens: Dummerweise müssen Grammatiken auch oft transformiert werden, damit ein Top-Down-Parser sie bewältigen kann. Gut daran ist allerdings, dass diese Transformationen in vielen Fällen rein mechanisch durchgeführt werder können. Also nur ein kleines Manko.
@Op
Sprich mit Deinem Betreuer nochmal über all diese Dinge. Ich habe den leisen Verdacht, dass er keine Ahnung hat und die Aufgabe mit RegEx und String-Replace anpacken würde
-
Irgendwie verstehe ich von dem Skript nicht ganz so viel.
Gibt es eigentlich eine C++ Grammatik? Oder gibt es einfachere Seiten oder PDF's aus den ich lernen könnte? Weiß da jemand was?
Danke.
-
µ schrieb:
Trotzdem an der Stelle nochmal zu LL/TopDown-Parsern: Es ist immer noch nicht so ganz klar wie die Aufgabenstellung aussieht. Dass nur der Beispielcode kompiliert werden soll ist offensichtlich Unsinn. Hier muss nochmal mit dem Ausbilder gesprochen werden über die exakte Sprache die implementiert werden soll.
Ich glaube, es geht wirklich nur darum ein kleines Subset von JS mit eben diesen Erweiterungen zu parsen. Der gezeigte Codeschnipsel wird wahrscheinlich alle wirklich geforderten Konstrukte beinhalten. Also wird hier kein vollständiger Parser für eine wirkliche Programmiersprache entworfen. Im Studium haben wir bei Compilerbau anfangs ähnliches gemacht und am Ende einen "vollständigen" Compiler für PL/0 geschrieben.
µ schrieb:
1. Einen LL-Parser direkt, d.h. per Rekursiven Abstieg* implementieren. Das kommt in Frage wenn die Sprache sehr einfach ist. Sie muss eigentlich so einfach sein, dass man Mehrdeutigkeiten "sieht" bzw. die First- und Follow-Mengen fast trivial sind. Jede Änderung an der Grammatik wäre mindestens unbequem.
Ich vermute fast, dass ein einfacher rekursiver Parser reicht. Warum auch nicht, damit kann man problemlos LL* parsen.
An der Grammatik sollte natürlich eher wenig geändert werden, aber er soll ja auch keine neue Programmiersprache entwerfen.Enno schrieb:
Gibt es eigentlich eine C++ Grammatik?
Vergiss es, C++ ist eine zusammengefrickelter Haufen #@$%, dafür findest du keine vollständige Grammatik.