Programmiersprachen
LVA 185.208, VU, 3 Ects, 2012 S
2. Übungsaufgabe
Überblick:
Entwickeln Sie ein Werkzeug zur Bearbeitung von Dateien nach einem festlegbaren Schema in einer dynamisch typisierten Scripting-Sprache wie Perl, PHP, Ruby, ...
Das Werkzeug soll einen in einer Konfigurationsdatei festgelegten Ablauf abarbeiten und dabei vorgegebene Programme auf Dateien anwenden, die einem vorgegebenen Muster entsprechen.
Eine solche Konfigurationsdateie erfüllt eine ähnliche Aufgabe wie ein Shell-Script.
Konfigurationsdatei:
Folgende Aktionen sollen in der Konfigurationsdatei festlegbar sein:
- Eine primitive Aktion ruft ein Programm auf bzw. setzt ein (Unix-)Kommando ab, möglicherweise mit Argumenten, die auch benannte Teile eines Musters (siehe unten) enthalten.
Die Ausführung einer primitiven Aktion ist erfolgreich, wenn der Programmaufruf mit dem Wert 0 terminiert, sonst ist sie gescheitert.
Alle anderen (nicht-primitiven) Aktionen erweitern oder kombinieren einfachere Aktionen.
- Eine Sequenz besteht aus mehreren Aktionen, die in der gegebenen Reihenfolge hintereinander ausgeführt werden.
Wenn eine Ausführung einer Aktion scheitert, werden die weiteren Aktionen nicht mehr ausgeführt, und die Ausführung der Sequenz gilt als gescheitert, sonst als erfolgreich.
- Eine Alternative besteht aus mehreren Aktionen, von denen nur die erste immer ausgeführt wird.
Weitere Aktionen werden nur ausgeführt, wenn alle davor stehenden Aktionen gescheitert sind.
Die Ausführung einer Alternative ist genau dann erfolgreich, wenn die Ausführung einer darin enthaltenen Alternative erfolgreich ist.
- Eine Mengen-Aktion besteht aus einem Muster und einer Aktion.
Das Muster spezifiziert eine Menge von Dateien (siehe unten), und die Aktion wird für jede Datei in der Menge in beliebiger Reihenfolge einmal ausgeführt.
Falls eine Ausführung der Aktion scheitert, wird die Aktion auf keine weitere Dateien mehr angewandt, und die Ausführung der Mengen-Aktion gilt als gescheitert.
- Eine Schleife beinhaltet eine Aktion, die ständig wiederholt ausgeführt wird, solange die Ausführung der Aktion erfolgreich ist und dabei zumindest eine primitive Aktion ausgeführt wird.
Die Ausführung einer Schleife terminiert nur dann erfolgreich, wenn die Aktion nur aus Mengen-Aktionen besteht, deren Muster in einem Durchlauf keine Dateien spezifizieren.
Muster in Mengen-Aktionen sollen Pfade im Dateisystem darstellen, die benannte Wildcards enthalten können.
Beispielsweise könnte
Bilder/2011-04-<tag>/<name>.jpg
für alle Dateien entsprechend dem Unix-Pfad
Bilder/2011-04-*/*.jpg
stehen, wobei
<<tag>>
und
<<name>>
in einer primitiven Aktion oder im Muster einer anderen enthaltenen Mengen-Aktion für die beiden Zeichenketten stehen, die im Unix-Pfad durch die beiden Wildcards (*) dargestellt werden.
Die genaue Syntax und Semantik für Muster (so wie in diesem Beispiel oder anders) sollen Sie selbst festlegen, genauso wie die Syntax des Inhalts einer Konfigurationsdatei.
Eine Konfigurationsdatei enthält in gewisser Weise ein einfaches Programm mit bedingten Anweisungen und Schleifen.
Ihre Aufgabe besteht also darin, die Syntax und einige semantische Details der Sprache festzulegen und einen einfachen Interpreter dafür zu implementieren.
Bitte halten Sie die Syntax so einfach, dass die Aufgabe leicht ohne spezielle Compilerbau-Werkzeuge lösbar ist.
Anwendungsbeispiele:
Obige Beschreibung ist abstrakt gehalten.
Hier werden einige Anwendungsbeispiele angerissen, die den Zweck klarer umschreiben und als Testfälle dienen können.
- Das Werkzeug überprüft, ob neue Dateien in einem Eingangs-Ordner erstellt wurden, verschiebt Dateien mit bestimmten Endungen im Namen in andere Ordner, und führt ein Protokoll über verschobene Dateien.
- Angenommen, Sie wollen mehrere Texte, die Sie per Mail bekommen und in einem Verzeichnis nach einem bestimmten Namensschema abgelegt haben, zu einer Einheit zusammenfügen.
Das Werkzeug kann Sie dabei unterstützen, indem es die entsprechend dem Namensschema zusammengehörenden Dateien zu großen Dateien zusammenfasst und je eine zusammengefasste Datei in einem Editor für weitere Korrekturen öffnet.
- Das Werkzeug erstellt für alle Bilder in einem Ordner je zwei Kopien in unterschiedlichen Größen in anderen Ordnern und fügt für jedes Bild eine passende Zeile in eine bestehende HTML-Datei ein, sodass die Bilder in einer Übersichtstabelle und im Detail auf einem Web-Browser betrachtet werden können.
Implementieren Sie das Werkzeug und probieren Sie es in einigen einfachen Anwendungsfällen aus.