Abgabe: Donnerstag, den 21.11.96
ACHTUNG:
Leider ist mir ein kleiner Fehler unterlaufen: Kommentare
fürfen in C nicht geschachtelt sein. Deswegen
braucht das Programm auch keine geschachtelten
Kommentare zu erkennen.
Ein immer wiederkehrendes Problem in der praktischen Arbeit
am Computer ist das zerlegen von Texten, im Fachchinesisch
"parsen" genannt. Man benötigt Parser unter anderem für
Interpreter, Compiler, ... . Wie Sie aus der Vorlesung wissen
können reguläre Sprachen (z.B. C) durch einen endlichen
Automaten beschrieben werden, für das Parsen eines
Programmtextes bietet sich also ein solcher Automat an.
Nachdem Sie diesen tiefschürfenden Gedanken nachgegangen
sind beschließen Sie, einen solchen endlichen Automaten
in C zu schreiben, der eben C-Texte zerlegen kann. Um sich
das Leben nicht zu schwer zu machen setzen Sie voraus, daß
das C-Programm, das analysiert werden soll, syntaktisch
korrekt ist, und bereits vom Preprozessor bearbeitet
wurde (Makrosubstitutionen, Includes, ...) (Tip: man gcc
für die Option, damit nur der Preprozessor arbeitet).
Um das Programm einfach zu halten lesen Sie nur von der
Standardeingabe.
In der ersten Version soll dieses Programm lediglich Worte,
die Sie kurzerhand als Folge von den Zeichen [a-zA-Z0-9_] definieren,
getrennt durch newlines auf die Standardausgabe ausgeben.
Kommentare (die natürlich auch auf
"**/" enden dürfen) gelten nicht als Worte ebensowenig
wie Zeichenketten in einfachen oder doppelten Hochkommas
(Quotes: "" bzw '').
Zur Vereinfachung dürfen Sie auch das Escapezeichen
"\" ignorieren.
BEISPIEL:
Das Codefragment
#include<sys/time.h>
#define TRAP "if" /* Gemeinheit ;-) */
int main( )
{
}
sollte nach der Verarbeitung durch ihr Programm so aussehen:
include
sys
time
h
define
TRAP
int
main