Erwerb funktionaler, räumlicher und kausaler Beziehungen von ...

ai.cs.uni.dortmund.de

Erwerb funktionaler, räumlicher und kausaler Beziehungen von ...

Klassifikation von Schadensteilen mit STT 57

6.4 Realisierung von DOCTOFAC

Bei DOCTOFAC handelt es sich um ein in der Programmiersprache C++ geschriebenes

Programm. Es läßt sich leicht auf verschiedene Systeme übertragen und wurde bereits mit

verschiedenen Compiler übersetzt. Dazu gehören Borland C++ Version 2.0 für MS-DOS,

Microsoft Visual C++ Version 4.0 für WINDOWS NT, SUN C++ Version 3.0.1 für

UNIX. Der Programmablauf von DOCTOFAC läßt sich in folgende Schritte aufteilen:

• Einlesen Konfigurationsdatei

Die Konfigurationsdatei wird zeilenweise gelesen und auf Fehler überprüft. Konnte

kein Fehler gefunden werden, wird der Inhalt der Zeilen in einer Datenstruktur

abgelegt. Diese enthält die Namen der Ein- und Ausgabedatei, die Argumentdefinition,

die Anzahl der Prädikatsdefinitionen und zwei Zeiger auf eine dynamische Liste, die

die Prädikatsdefinitionen enthält. Somit ist die Anzahl der Prädikatsdefinitionen nur

abhängig von der Größe des verfügbaren Speichers.

• Lesen der Eingabedatei und Generierung der Fakten

Die Eingabedatei wird zeilenweise gelesen und aus jeder Zeile werden entsprechend

der Definition Fakten gebildet, wenn diese Zeile den Mustern der Filter für

Argumentdefinition und Prädikatsdefinition entsprechen. Dabei wird in jeder Zeile

zuerst das Argument des Faktums gebildet. Danach wird die Liste der

Prädikatsdefinitionen durchlaufen und jeder Eintrag dieser Liste erzeugt Fakten. Die so

erzeugten Fakten werden nicht sofort in die Ausgabedatei geschrieben, da es

vorkommen kann, daß identische Fakten erzeugt werden. Statt dessen werden die

Fakten in einer dynamischen Liste im Hauptspeicher gehalten, und für jedes neu

erzeugte Faktum wird überprüft, ob es bereits vorhanden ist. Ist dies nicht der Fall,

wird es an die Liste der Fakten angehängt. Während der Faktengenerierung wird die

Anzahl eingetragenen Fakten und die Anzahl der gelesenen Zeilen festgehalten.

• Schreiben der Ausgabedatei und Ausgabe der Informationen

Nachdem die gesamte Eingabedatei gelesen wurde, und alle Fakten generiert wurden,

wird die Liste der Fakten in die Ausgabedatei geschrieben. Dabei entspricht jedes

Faktum einer Zeile in der Ausgabedatei.

Im letzten Schritt werden, wenn dies in der Konfigurationsdatei nicht unterbunden

wurde, die Anzahl der gelesenen Zeilen und die Anzahl der Fakten eines bestimmten

Typs ausgegeben.

Bei der Programmierung von DOCTOFAC wurde Wert auf eine dynamische

Datenstruktur gelegt, damit weder die Anzahl der Prädikatsdefinitionen in der

Konfigurationsdatei, noch die Anzahl der erzeugten Fakten beschränkt ist (außer durch

die Größe des Hauptspeichers). Aus diesem Grunde wurden dynamische Listen als

Datenstruktur verwendet. Bei der Speicherung des Inhalts der Konfigurationsdatei ist der

Einsatz von Listen nicht weiter tragisch, da die Liste beim Einlesen der

Konfigurationsdatei einmal erzeugt wird und danach für jede Zeile der Eingabedatei

einmal vollständig durchlaufen werden muß. Weniger effizient ist die Speicherung der

erzeugten Fakten in einer Liste, da bei jedem neu erzeugten Faktum ein Durchlauf der

Liste erforderlich ist, um festzustellen, ob dieses Element bereits vorhanden ist. Das

bedeutet im worst case eine Laufzeit von O(n 2 ). Zur Verbesserung der Laufzeit könnte

man eine Baumstruktur anstatt der Listenstruktur verwenden, was eine Laufzeit von

Weitere Magazine dieses Users
Ähnliche Magazine