|
Bem.: das Beispiel stammt in dieser Version aus der Virtuellen Lehrerweiterbildung Informatik in Niedersachsen: www.vlin.de
Das folgende Beispiel soll anhand eines Standardthemas der Schulinformatik - dem Parsen von Sprachkonstrukten - zeigen, wie mithilfe der erlernten Methoden auf einfachem Niveau ein "Computersprache" gebastelt werden kann, die zwar nicht sehr umfangreich ist, aber sehr zum Spielen einlädt und damit zum Spaß am Unterricht beiträgt. Geplant wird eine Unterrichtseinheit für einen Oberstufenkurs, der mit Java vertraut ist - in diesem Fall mit dem JBuilder von Borland. Weiterhin sollten Grundkenntnisse aus dem Bereich der endlichen Automaten vorhanden und Syntaxdiagramme vertraut sein. Es zahlt sich also aus, wenn im Sinne des vorbereitenden Lernens diese Konstrukte schon vorher mehrmals benutzt worden sind, und es kann auch nichts schaden, wenn schon einmal eine Turtlegrafik implementiert wurde. Der vorhergehende Unterricht hat ähnlich wie in den Naturwissenschaften u. a. die Aufgabe, Erfahrungen zu ordnen und ggf. zu verschaffen, anhand derer eine informatische Begriffsbildung erfolgen kann, die weitgehend der Vermittlung fundamentaler Ideen entspricht. Die entwickelten Begriffe sind in einem geeigneten Kontext einzuführen und anzuwenden, sodass im weiterführenden Unterricht auf sie aufgebaut werden kann. Unter dieser Voraussetzung stehen dann z. B. in der Sekundarstufe II genügend Erfahrungen und Unterrichtszeit zur Verfügung, um z. B. theoretische Inhalte angemessen vertieft zu unterrichten. Wenn es also möglich ist, dann sollten schon sehr früh Begriffe wie Zustand, Zustandswechsel, Automat, ... benutzt werden - auch wenn es nicht unbedingt nötig ist. Solange es nicht stört, kann damit weiterführender Unterricht effizient vorbereitet werden.
Die - meist vereinfachten - Konstrukte gängiger Programmiersprachen können geeignetes Übungsmaterial liefern, um das Parsen als Anwendung endlicher Automaten zu verstehen und zu üben. Man kann mit ihnen alleine allerdings nicht so recht etwas anfangen. Gesucht sind deshalb Beispiele ähnlicher Komplexität (oder Einfachheit - je nachdem wie man es sieht), die in sich sinnvolle Anwendungen bilden. Als ein solches Beispiel hat die einfache Grafiksprache LOGO für Arme sehr bewährt. Beachten wir, dass es m. E. Aufgabe des Informatikunterrichts ist, den Schülerinnen und Schülern zu einem gültigen Computermodell zu verhelfen, dann bietet ein solches kleines Projekt die Möglichkeit, über konstruktive Arbeit die Arbeitsweise eines Compilers bzw. Interpreters zu erfahren.
Sehen wir uns zuerst ein mögliches Ergebnis
an:
In das obere Textfeld am unteren Rand des Applets
werden Befehle eingegeben, die von der Turtle, dem kleinen Pfeil in der
Bildmitte, ggf. ausgeführt werden. Im unteren Textfeld sollen Fehlermeldungen
etc. erscheinen. Geben wir einen gültigen Turtlebefehl ein (was immer
das sein mag), dann wird der ausgeführt. Enthält die Zeile Fehler,
dann werden sie angezeigt.
Dafür benötigen wir natürlich
eine eine Turtlegrafik!
Programmkonstrukt | Syntaxdiagramm | Erläuterung |
Programm
|
|
Ein definiertes Ende-Zeichen (hier: <#>) erleichtert
meist die Analyse einer Zeichenfolge. Davon machen viele Sprachen Gebrauch:
<end.> bei Delphi, <;> nach jedem Java-Befehl
|
Anweisung |
|
Damit die Sprache mit endlichen Automaten analysierbar bleibt, müssen wir geschachtelte Strukturen vermeiden. (Dieser Punkt muss bei der Diskussion der Sprache deutlich herausgearbeitet werden!) In unserem Fall erreichen wir das, indem wir zwei unterschiedliche Arten von Befehlen benutzen. Diese Trennung ergibt sich auch aus der Sache, weil die Zeichenbefehle die Turtle kontrollieren, während die Kontrollbefehle den Programmablauf steuern. |
Kontrollbefehl |
|
Die Syntax ist etwas an Java angelehnt (mit den geschweiften Klammern). Es können nur Zeichenanweisungen mehrfach wiederholt werden. |
Zeichenanweisung |
|
penUp
penDown
Home
Clear
Move ...
Turn ...
... weitere Befehle
möglich
|
Mögliche Befehlsfolgen sind
E = {U,D,H,C,M,T,R,0,1,2,3,4,5,6,7,8,9,{,},;,#}
Der Parser wird als eigene Java-Klasse realisiert.
Der Parser muss vom Applet auch benutzt werden. Dazu wird erstmal eine Instanz des Parsers erzeugt.
Turtleparser tp = new Turtleparser();
Danach wird der zu überprüfende String
s dem Parser zeichenweise übergeben. Zwischendurch wird nachgesehen,
ob ein Fehlerzustand erreicht wurde. Falls das der Fall ist, wird eine
entsprechende Fehlermeldung erzeugt. Zuletzt wird überprüft,
ob der Endzustand erreicht wurde. In Abhängigkeit davon wird das Ergebnis
des Parsings zurückgegeben.
private boolean parse(String s)
private void werteAus(String s)
|