Sektion Angewandte Informationsverarbeitung

Übungen zu Systemnahe Software I, Wintersemester 1996/97

Blatt 4

Abgabe: Donnerstag, den 21.11.96

Aufgabe 6 (20 Punkte)

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