Compilerbau: Design des Frontends

Algorithmen, Sprachunabhängige Diskussionen zu Konzepten, Programmiersprachen-Design
Panke
Beiträge: 70
Registriert: So Nov 14, 2010 10:47 am

Re: Compilerbau: Design des Frontends

Beitrag von Panke » Sa Mär 17, 2012 3:51 pm

Ich schreibe keinen C-Compiler, sondern für eine imaginäre Sprache, die ich mir selbst ausgedacht habe. Die ursprünglichen Scheinbedingungen sind, dass man Assemblercode für eine simple Stapelmaschine (VM) mit ~20 Anweisungen generieren muss.

Der Teil ist für den Schein, bei dem spielt gutes SE keine Rolle. Der Rest ist persönliches Interesse. Angenommen ich baue eine Toolchain für eine Sprache (= mehr als nur den Compiler), wie würde gutes Design aussehen?

Programmiersprachen sind halt Hobby. Die Sprache selbst (die ich da schreibe) ist aber so langweilig, dass man sie nicht verwenden will, da gibt es bessere am Markt. Deswegen wohl keinen großen Nutzen für die spätere Codebasis.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Compilerbau: Design des Frontends

Beitrag von Xin » Sa Mär 17, 2012 4:38 pm

Panke hat geschrieben:Ich schreibe keinen C-Compiler, sondern für eine imaginäre Sprache, die ich mir selbst ausgedacht habe. Die ursprünglichen Scheinbedingungen sind, dass man Assemblercode für eine simple Stapelmaschine (VM) mit ~20 Anweisungen generieren muss.

Der Teil ist für den Schein, bei dem spielt gutes SE keine Rolle. Der Rest ist persönliches Interesse. Angenommen ich baue eine Toolchain für eine Sprache (= mehr als nur den Compiler), wie würde gutes Design aussehen?
Mal von fertigen Informatiker zu studierendem Informatiker... sprichst Du auch Deutsch? Oder wenigstens Englisch? Lass mal die ganzen Buzzwords und tollen Abkürzungen/Übersetzungen weg.
Jede Uni/FH lehrt ein anderes Vokabular. Ich kann zwar einen Compiler bauen, aber habe Probleme Dich zu verstehen.

Unter einer Stapelmaschine verstehe ich erstmal einen Gabelstabler. Wenn Du (VM) dahinter schreiben musst, dann schreib doch einfach "virtuelle Maschine". Oder Interpreter. Es muss doch nicht alle fünf Jahre ein neues Wort für eine unveränderte Technik ausgepackt werden, welches dann auch noch irgendwie ins Deutsche gepresst wird. Gib das mal bei google ein und sag mir dann, was eine Stapelmaschine ist.

Bei SE gehe ich mal rein geraten von Software Engineering aus. Macht an der Stelle aber nur wenig Sinn. Wenn man euch beibringt, wie man Compiler baut, werdet ihr wohl keine Machbarkeitsstudie machen müssen, oder dem Prof ein Pflichtenheft erstellen, was er euch beizubringen hat? Vermutlich meinst Du Architektur?

Was möchtest Du für eine Toolchain aufbauen!? Du möchtest den Editor selbst schreiben und willst daher Syntaxhighlighting durch die Sprachparser generieren? Am Ende landet das ganze vermutlich in einem Tool. Also eine eher theoretische Chain.

Also... zurück zum Deutschen: Du möchtest ein Tool schreiben und dem eine brauchbare Architektur verpassen.
Auch wenn Dein Prof keine Softwaretechnik benötigt - wenn Du etwas anderes machen willst, was nur beiläufig die Wünsche Deines Profs miterfüllt, solltest Du Dir erst Gedanken machen, was Du bauen willst, welche Möglichkeiten Du Dir offen lassen möchtest und Dich danach fragen, wie man das umsetzen kann.

Am Schluss bleibt es dabei, was Du schreibst/brauchst hängt von der Sprache ab. Bei 20 Anweisungen wird das wohl überschaubar bleiben.
Mir ist die Frage in diesem Thread zu offen, als dass ich konkrete Antworten geben könnte.
Panke hat geschrieben:Programmiersprachen sind halt Hobby. Die Sprache selbst (die ich da schreibe) ist aber so langweilig, dass man sie nicht verwenden will, da gibt es bessere am Markt. Deswegen wohl keinen großen Nutzen für die spätere Codebasis.
Ich schreibe seit 15 Jahren keinen Code mehr, von dem ich später keinen Nutzen mehr habe. Für Wegwerfcode habe ich keine Zeit mehr.
Nach 15 Jahren haben sich einige tausend Zeilen angehäuft, die teilweise sehr gut getestet und perfekt auf mich zugeschnitten sind. :-)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Panke
Beiträge: 70
Registriert: So Nov 14, 2010 10:47 am

Re: Compilerbau: Design des Frontends

Beitrag von Panke » Sa Mär 17, 2012 6:14 pm

Mal von fertigen Informatiker zu studierendem Informatiker.
Neuerdings kann man beides gleichzeitig sein :-)
Unter einer Stapelmaschine verstehe ich erstmal einen Gabelstabler. Wenn Du (VM) dahinter schreiben musst, dann schreib doch einfach "virtuelle Maschine". Oder Interpreter. Es muss doch nicht alle fünf Jahre ein neues Wort für eine unveränderte Technik ausgepackt werden, welches dann auch noch irgendwie ins Deutsche gepresst wird. Gib das mal bei google ein und sag mir dann, was eine Stapelmaschine ist.
Ich sprach hiervon: http://en.wikipedia.org/wiki/Stack_machine. Ich wollte den Begriff Kellerautomat vermeiden, weil der mir zu sehr nach Theorie der formalen Sprachen klang. Hätte ich dich weniger verwirrt, wenn ich gleich Stackmaschine gesagt hätte? VM ist denke ich eine gängige Abkürzung, kam dazu, um klar zu machen, dass es das Dingen nicht als Hardware gibt / gab.
Bei SE gehe ich mal rein geraten von Software Engineering aus. Macht an der Stelle aber nur wenig Sinn. Wenn man euch beibringt, wie man Compiler baut, werdet ihr wohl keine Machbarkeitsstudie machen müssen, oder dem Prof ein Pflichtenheft erstellen, was er euch beizubringen hat? Vermutlich meinst Du Architektur?


Zur Softwareentwicklung gehören sicher mehr Sachen als die, die ich hier im Thema angesprochen habe. Alle spielen beim Schein keine Rolle. Hauptsache es läuft.
Was möchtest Du für eine Toolchain aufbauen!? Du möchtest den Editor selbst schreiben und willst daher Syntaxhighlighting durch die Sprachparser generieren? Am Ende landet das ganze vermutlich in einem Tool. Also eine eher theoretische Chain.
Darum ging es mir ja. Wenn ich mehrere Anwendungen schreiben möchte, die meine Sprache parsieren müssen: Wie sollte dann der Parser aufgebaut sein, damit ich ihn nicht für jede Anwendung neu stricken muss.

Natürlich habe ich nicht vor, 1000 Anwendungen für meine Spielwiesensprache zu schreiben. Darum ging es hier auch nicht.
Am Schluss bleibt es dabei, was Du schreibst/brauchst hängt von der Sprache ab. Bei 20 Anweisungen wird das wohl überschaubar bleiben.
20 Anweisungen hat die virtuelle Maschine.
Ich schreibe seit 15 Jahren keinen Code mehr, von dem ich später keinen Nutzen mehr habe. Für Wegwerfcode habe ich keine Zeit mehr.

Da geht es mir zum Glück anders.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Compilerbau: Design des Frontends

Beitrag von Xin » Sa Mär 17, 2012 8:10 pm

Panke hat geschrieben:
Mal von fertigen Informatiker zu studierendem Informatiker.
Neuerdings kann man beides gleichzeitig sein :-)
Eigentlich nicht - wer ist schon "fertig"?
Panke hat geschrieben:
Unter einer Stapelmaschine verstehe ich erstmal einen Gabelstabler. Wenn Du (VM) dahinter schreiben musst, dann schreib doch einfach "virtuelle Maschine". Oder Interpreter. Es muss doch nicht alle fünf Jahre ein neues Wort für eine unveränderte Technik ausgepackt werden, welches dann auch noch irgendwie ins Deutsche gepresst wird. Gib das mal bei google ein und sag mir dann, was eine Stapelmaschine ist.
Ich sprach hiervon: http://en.wikipedia.org/wiki/Stack_machine. Ich wollte den Begriff Kellerautomat vermeiden, weil der mir zu sehr nach Theorie der formalen Sprachen klang. Hätte ich dich weniger verwirrt, wenn ich gleich Stackmaschine gesagt hätte? VM ist denke ich eine gängige Abkürzung, kam dazu, um klar zu machen, dass es das Dingen nicht als Hardware gibt / gab.
Ich konnte mir das schon denken, deswegen die Aussage "ins Deutsche gepresst".

Unabhängig davon rate ich Dir lieber drei Worte mehr zu verwenden. Nicht jeder hat die Vokabeln gelernt, wie Du sie gelernt hast - die Informatik ist leider voller Buzzwords, deren einziger Nutzen ist, zu verdecken, dass man etwas verkauft, was man von 40 Jahren unter einem anderen Begriff als Trivialität angesehen hat.

Und nicht jeder ist gleich in Deinem Thema drin. Wenn dann noch Abkürzungen wie "SE", am liebsten noch Deutsch und Englisch vermischt, denn "SE" könnte auch "ST" sein, nicht zu verwechseln mit "XT", welches sich gerne YAGNI zueigen macht. Man könnte auch von "SWT" spreichen, wobei das nicht nur ein Buchstabe mehr, sondern gleichzeitig auch keinerlei zusätzliche Information enthält, aber vor allem nicht mit "SWR" zu verwechseln ist, da sonst die QS versagt hat.
Abkürzungen brauchst Du nur für PPT - nicht weil man es da nicht ausschreiben könnte, sondern weil PPT wie UML sowieso keinen tieferen Sinn transportieren soll.
OK?
Panke hat geschrieben:
Bei SE gehe ich mal rein geraten von Software Engineering aus. Macht an der Stelle aber nur wenig Sinn. Wenn man euch beibringt, wie man Compiler baut, werdet ihr wohl keine Machbarkeitsstudie machen müssen, oder dem Prof ein Pflichtenheft erstellen, was er euch beizubringen hat? Vermutlich meinst Du Architektur?

Zur Softwareentwicklung gehören sicher mehr Sachen als die, die ich hier im Thema angesprochen habe. Alle spielen beim Schein keine Rolle. Hauptsache es läuft.
Man könnte das auch als positiv als "Training on the Job" bezeichnen ;-D
Panke hat geschrieben:Wie sollte dann der Parser aufgebaut sein, damit ich ihn nicht für jede Anwendung neu stricken muss.
Was kann die Sprache?

Wie baust Du die Sache auf? Der Lehrpfad beschreibt, dass man vom Quelltext über die Lexikalische Analyse zu einem TokenArray gelangt. Ich steige in der syntaktischen Analyse ein und verlange ein Token. Das suche ich mir dann aus dem Quelltext. Wenn das alles ist, was Du für den Parser brauchst, dann wäre das quasi schon der Jackpot.
Lieber Compiler, hier hast Du eine Zeile Quelltext, gib mir die Tokens und ich färbe die dann ein.

Wenn Du aber zum Beispiel selbstgeschriebene Komponenten hast - z.B. Variablen, dann bedeutet, dass die Variable eine solche ist, sie eben kein unbekannter Text ist. Das möchte man vielleicht farblich hervorheben. Dafür musst Du den kompletten Quelltext kennen. Die nächste Stufe wäre die Unterscheidung von eigenen Datentypen. Oder zum Beispiel konstante Werte zu unterstreichen etc.
Hier musst Du sehr konkrete Fragen an den Compiler stellen können. Deine Textzeile sollte also genau wissen, wo sie sich im Compilerbaum befindet.
Bei meinem Compiler habe ich das abstrahiert, in dem ich zwar vorrangig an einem Datei-Quelltext arbeite, aber eben auch auf andere Quellen vorbereitet bin: einen Editor z.B.
Dem könnte ich dann Feedback geben in der Form, dass ich einen Bereich der Zeile als Datentyp, Variable oder Fehlerhaft benenne.
Panke hat geschrieben:
Ich schreibe seit 15 Jahren keinen Code mehr, von dem ich später keinen Nutzen mehr habe. Für Wegwerfcode habe ich keine Zeit mehr.

Da geht es mir zum Glück anders.
Wenn Du Code schreibst, der einmal läuft, musst Du Dich damit nie wieder aufhalten. Das hat durchaus Vorteile.
Und Du stehst nie dumm da, wenn ein Code nicht läuft - Du hast ja die Quellen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten