Mittlerweile sind zwei Wochen vorbei, was in FernUni Hagen-Abschnitten bedeutet, dass die erste Kurseinheit abgeschlossen sein sollte. Das ist erfreulicherweise auch der Fall, wenn auch nicht ganz so, wie ich erwartet beziehungsweise gehofft hatte. Der erste Bericht steht in einem vorherigen Blogbeitrag.
Aktuelle Inhalte
Nach den einführenden Inhalten des ersten Teils der ersten Kurseinheit ging es weiter mit der Beschreibung von Token durch Zustandsdiagramme und einer direkten Implementierung eines Scanners mit der Programmiersprache C. Im Teil der Zustandsdiagramme gab es nicht viel Neues. Ein Rundumschlag zu regulären Ausdrücken, wie Token durch diese beschrieben werden und deterministische endliche Automaten. Damit sind wir auch schon bei einem Kernthema der ersten Kurseinheit, die sich mit der Darstellung und Erkennung von Token befasst.
Dazu gehört auch die Implementierung eines Scanners. Wie schon am Anfang der ersten Kurseinheit beschrieben, wird dafür C eingesetzt. Aufgrund des Umfangs wurde nur ein kleiner Teil der Implementierung gezeigt. Konkret die Methode gettoken()
, die über eine switch
-Anweisung und eine verschachtelte Statusvariable die verschiedenen Token erkennt.
Interessant ist das Detail, dass es zwei Variablen für die Positionen in einem Pufferbereich gibt. In diesem Puffer steht der gesamte Eingabestrom. Eine Variable bleibt auf dem ersten erkannten Zeichen, also der Startposition. Die zweite Variable wird schrittweise inkrementiert und dabei die Zeichen gelesen. Dass ist die aktuelle Position im Token. Dadurch wird ein Zustandsdiagramm durchprobiert. Wenn alle Zeichen in einem Diagramm erkannt werden konnten, wird das Token akzeptiert. Dann können beide Positionsvariablen auf das Zeichen nach dem Token gesetzt werden. Bei einem Fehler kann die Variable mit der aktuellen Position auf die Startposition zurückgesetzt werden, die in der anderen Variablen gespeichert wurde. Anschließend kann ein weiteres Diagramm durchprobiert werden. Das ist eine sehr simple und einfache Implementierung, die aber nicht minder effizient ist.
Der letzte Teil der zweiten Kurseinheit behandelt die Implementierung eines Scanners mit Lex. Dieses Tool nimmt eine Lex-Spezifikation entgegen und erzeugt daraus ein C-Programm. Dieses kann wiederum mit einem üblichen C-Compiler in ein ausführbares Programm überführt werden. Neben der allgemeinen Syntax und dem Aufbau einer Lex-Spezifikation werden auch die Vorteile erklärt und ein Beispiel gezeigt. Damit ist eine Scanner-Implementierung schneller und einfacher zu erreichen.
Mein Fortschritt
Die Bearbeitung der ersten Kurseinheit ging gut voran. Mit Erfahrungen in der Softwareentwicklung sind die Bereiche und Beispiele, die Implementierungen enthalten, keine großen Hindernisse. Auch die Theorie hält sich in dieser Kurseinheit noch in Grenzen.
Leider bin ich bei der ersten Einsendeaufgabe nicht gut voran gekommen. Aufgrund eines Vortrags auf der NRW Conf 2013 und einem vollgepackten Wochenende, musste ich die Aufgaben schieben. Pflicht sind sie nicht, deshalb ist es im Moment noch nicht so schlimm. Für eine Prüfung sollte ich sie allerdings schon nachholen. Ich hoffe, die Bearbeitung der weiteren Aufgaben gelingt mir in Zukunft besser.
Fazit
Der Kurs 01810 – Übersetzerbau macht bisher ziemlich viel Spaß. Der Aufwand scheint jetzt mit der zweiten Kurseinheit zu steigen. Allerdings sind auch die Themen noch ein Stück weit interessanter, die sich um die Syntaxanalyse im Allgemeinen und die Top-Down-Analyse im Speziellen drehen.
[…] hoffe, dass sich dieser Zustand Anfang nächster Woche wieder bessert. Am Ende der ersten Kurseinheit hatte ich noch ein gutes Zeitgefühl. Am Montag, den 28. Oktober soll, zumindest laut Plan, schon […]