Die Eingabedatei hat folgendes Format:
PARAMETER
Parameter = Wert
...
ENDE
REGELN
Regel1
Regel2
...
ENDE
START
step
step
...
ENDE
Das Kommentarzeichen ist //. Leerzeilen, Leerzeichen und
Groß- und Kleinschreibung sind weitgehend beliebig.
In der folgenden Beispiel-Eingabedatei beispiel.in sind alle
Parameter im Parameterblock kurz erklärt, weiter unten folgt die
vollständige Erklärung.
Der Regelblock enthält vollständig geklammerte Regeln, so wie in Einführung beschrieben.
Der Startblock kann die Anweisungen step und steps
enthalten. Ein ``step'' oder ``Schritt'' endet, wenn auf alle Sätze,
die im vorherigen Schritt erzeugt wurden, alle Regeln angewandt
wurden. Die Anweisung steps führt solange Schritte aus, bis
in einem Schritt kein neuer Satz mehr erzeugt wurde oder der
festgelegte maximale Speicherbedarf überschritten wird, siehe
Parameter.
// Beispiel-Eingabedatei
PARAMETER
chunksize = 10000 // Speicher wird in Einheiten
// von 10k angefordert
Info bei Speicheranforderung ausgeben = BILD
// wenn Speicher chunksize
// angefordert wird, wird ein
// Informationsblock auf dem
// Bildschirm ausgegeben
Dateiausgabe = EIN // Ausgabe in die Ausgabedatei
Bildschirmausgabe = EIN // Ausgabe auf dem Bildschirm
// Kommentarzeile = // // Kommentarsymbol festlegen
Aequivalenzklassen ausgeben = DATEI // Aequivalenzklassen werden nur
// in die Ausgabedatei ausgegeben
Aequivalenzklassen nur auf Disk = AUS // Aequivalenzklassen werden
// nur in die Ausgabedatei
// ausgegeben
neue Regeln ausgeben = EIN // neue Regeln werden ausgegeben
obsolete Regeln ausgeben = DATEI // obsolete Regel werden
// in die Ausgabedatei ausgegeben
Unifikationsprozess ausgeben = AUS // detaillierte Infomationen
// ueber das Finden eines
// allgemeinsten Unifikators
Einordnen ausgeben = AUS // detaillierte Informationen
// ueber das Einordnen von
// Regelergebnissen
Regelergebnisse ausgeben = AUS // alle Regelergebnisse
// werden ausgegeben
standardisieren ausgeben = AUS // Ergebnisse aus dem
// Standardisieren werden
// ausgegeben
Suchbaum ausgeben = AUS // alle gefundenen Ausdruecke
// und Unterausdruecke werden
// nach jedem Schritt ausgegeben
Aequivalenzklassenverweise ausgeben = EIN
Warnungen ausgeben = AUS // (sehr viele) Warnungen
// fuer den Benutzer
bei Warnung anhalten = AUS // bei einer Warnung auf
// Tastendruck warten
bei Fehler anhalten = EIN // bei einem Fehler auf
// Tastendruck warten
max Laenge Regelergebnis = 8 // Regelergebnisse laenger
// als diese Laenge werden
// ignoriert
max Laenge Substitution = 4 // Regelergebnisse, die aus
// Substitutionen laenger als
// diese Laenge enstehen
// wuerden werden ignoriert
max anz versch Variablen = 2 // Regelergebnisse, die mehr
// verschiedene Variablen als
// diese Anzahl enthalten
// werden ignoriert
max anz Regelvariablen = 10 // Variablen #0-#9 duerfen in
// Regeln vorkommen
max Speicher = 1000000 // maximal allozierter
// Speicher in byte, ungefaehr!
ENDE
REGELN
*(*(#0,#1),#2) = *(#0,*(#1,#2))
*(1,#0) = #0
*(i(#0),#0) = 1
ENDE
START
// steps // beliebig viele Schritte werden
// ausgefuehrt
step // 4 Schritte werden ausgefuehrt
step
step
step
ENDE
Speicher wird in Einheiten von Größe Bytes angefordert. Die Einheiten werden dabei verschiedenen ``Pools'' zugeordnet, je nach Typ der gespeicherten Strukturen. Die Größe sollte dabei größer als etwa 1000 sein, da sonst zu viel Speicher für Verwaltungsaufgaben verbraucht wird. Voreinstellung ist 10000. Je kleiner die Größe, desto öfter wird ein Infoblock ausgegeben, falls ``Info bei Speicheranforderung ausgeben'' eingeschaltet ist.
Der Wert kann EIN, AUS, BILD
oder DATEI sein. Voreinstellung ist EIN. Dementsprechend
wird bei Anforderung einer neuen Speichereinheit ein Info-Block auf
dem Bildschirm und/oder in die Ausgabedatei ausgegeben. Zur
Bedeutung der Einträge im Info-Block siehe
Info-Block.
Der Wert kann EIN oder AUS
sein. Voreinstellung ist EIN. Dementsprechend wird die
Ausgabe in die Ausgabedatei, siehe
Kommandozeilenoptionen, ein- oder ausgeschaltet. Auch bei
ausgeschalteter Dateiausgabe werden allerdings wenigstens alle
Zeilen bis zu dieser Parameterzeile in die Ausgabedatei ausgegeben.
Der Wert kann EIN oder AUS
sein. Voreinstellung ist EIN. Dementsprechend wird die
Ausgabe auf dem Bildschirm (Standardausgabe) ein- oder
ausgeschaltet. Auch bei ausgeschalteter Bildschirmausgabe werden
allerdings wenigstens alle Zeilen bis zu dieser Parameterzeile auf
dem Bildschirm ausgegeben, desweiteren Fehlermeldungen etc.
Der Wert kann eine beliebige Zeichenkette
sein. Voreinstellung ist //. Zeichen in einer Zeile nach der
Kommentarzeichenkette werden ignoriert. Die neue
Kommentarzeichenkette ist ab der Zeile nach dieser Parameterzeile
wirksam. In der Beispieleingabedatei ist diese Zeile auskommentiert,
denn Zeichen nach // werden ja gemäß der Voreinstellung
ignoriert. D.h. die Kommentarzeichenkette würde auf die leere
Zeichenkette gesetzt werden und alle folgenden Zeilen würden
ignoriert, da sie alle die leere Zeichenkette an der ersten Position
enthalten. Beispiel: Kommentarzeile = /*// setzt die
Kommentarzeichenkette auf /*.
Der Wert kann EIN oder AUS
sein. Voreinstellung ist AUS. Dementsprechend werden
Äquivalenzklassen in die Ausgabedatei bzw. auf dem
Bildschirm ausgegeben. Dieser Parameter wurde durch den
Parameter Aequivalenzklassen ausgeben überflüssig.
Der Wert kann EIN, AUS, BILD
oder DATEI sein. Voreinstellung ist
EIN. Dementsprechend werden die Äquivalenzklassen in
die Ausgabedatei bzw. auf dem Bildschirm ausgegeben. Zum Format der
Ausgabe siehe
Äquivalenzklassen.
Der Wert kann EIN oder AUS
sein. Voreinstellung ist AUS. Dementsprechend werden
Äquivalenzklassen, die nur einen Verweis enthalten, ebenfalls
ausgegeben. Siehe
Technische Details.
Der Wert kann EIN, AUS, BILD
oder DATEI sein. Voreinstellung ist
EIN. Dementsprechend werden die neuen Regeln in die
Ausgabedatei bzw. auf dem Bildschirm ausgegeben.
Der Wert kann EIN, AUS, BILD
oder DATEI sein. Voreinstellung ist
EIN. Dementsprechend werden neue Regeln, die obsolet
geworden sind, in die Ausgabedatei bzw. auf dem Bildschirm
ausgegeben. Zum Begriff obsolet und neue Regeln siehe
Einführung.
Der Wert kann EIN, AUS, BILD
oder DATEI sein. Voreinstellung ist
AUS. Dementsprechend werden detaillierte Angaben über den
Unifikationsprozess in die Ausgabedatei bzw. auf dem Bildschirm
ausgegeben. Dieser Parameter dient dazu festzustellen, ob bestimmte
Ergebnisse erzeugt werden bzw. warum sie nicht erzeugt
werden. Hierdurch werden i.d.R. sehr große Ausgabedateien (größer
100 MB) geschrieben.
Der Wert kann EIN, AUS, BILD
oder DATEI sein. Voreinstellung ist
AUS. Dementsprechend werden detaillierte Angaben über das
Einordnen von Ergebnissen in die Ausgabedatei bzw. auf dem
Bildschirm ausgegeben. Dieser Parameter dient dazu festzustellen, in
welche Äquivalenzklassen bestimmte Ergebnisse eingeordnet werden
etc. Auch er erzeugt i.d.R. sehr große Ausgabedateien.
Der Wert kann EIN, AUS, BILD
oder DATEI sein. Voreinstellung ist
AUS. Dementsprechend werden alle Regelergebnisse in die
Ausgabedatei bzw. auf dem Bildschirm ausgegeben. Dieser Parameter
dient dazu festzustellen, welche Ergebnisse aus welchen Satz erzeugt
werden. Auch hierdurch können die Ausgabedateien sehr groß werden.
Der Wert kann EIN, AUS, BILD
oder DATEI sein. Voreinstellung ist
AUS. Dementsprechend werden ausführliche Informationen über
das Standardisieren in die Ausgabedatei bzw. auf dem Bildschirm
ausgegeben. Das Standardisieren wird hier nicht weiter dokumentiert.
Der Wert kann EIN, AUS, BILD
oder DATEI sein. Voreinstellung ist
AUS. Dementsprechend wird der Suchbaum in die Ausgabedatei
bzw. auf dem Bildschirm ausgegeben. Alle in irgendeiner
Äquivalenzklasse vorkommenden Ausdrücke und Unterausdrücke werden in
einem Suchbaum gespeichert, so dass mehrfach vorkommende
Unterausdrücke nur einmal abgespeichert werden müssen. Dieser
Parameter dient in erster Linie dazu auszugeben, welche
Unterausdrücke schon vorgekommen sind. Die Zahl dieser
Unterausdrücke kann sehr groß sein.
Der Wert kann EIN, AUS, BILD
oder DATEI sein. Voreinstellung ist
AUS. Dementsprechend werden (sehr viele!) Warnungen in die
Ausgabedatei bzw. auf dem Bildschirm ausgegeben. Siehe
Fehler und Warnungen.
Der Wert kann EIN oder AUS
sein. Voreinstellung ist AUS. Dementsprechend wartet das
Programm bei einer Warnung auf einen Tastendruck oder nicht.
Der Wert kann EIN oder AUS
sein. Voreinstellung ist EIN. Dementsprechend wartet das
Programm bei einem Fehler auf einen Tastendruck oder nicht. Fehler
werden immer auf dem Bildschirm und in die Ausgabedatei
ausgegeben. Siehe
Fehler und Warnungen.
Der Wert muss eine positive ganze Zahl sein. Es werden nur
solche Regelergebnisse in die Äquivalenzklassen eingeordnet, deren
Länge kleiner oder gleich dem Wert ist. Die Länge eines
Ausdrucks ist dabei die Summe der Längen der Unterausdrücke plus 1
(für das Funktionssymbol). Die Länge von Variablen und Konstanten
ist 1. Beispiel: Die Länge von i(1) ist 2 und die Länge von
*(1,#0,i(0)) ist 1+(1+1+(1+1))=5. Die Länge einer Regel
ist das Maximum der Längen der linken und der rechten Seite.
Der Wert muss eine positive ganze Zahl sein. Es werden nur
solche Regelergebnisse in die Äquivalenzklassen eingeordnet, die mit
einer Unifikation (siehe
Einführung)
der Länge kleiner oder gleich dem Wert entstanden sind. Die
Länge einer Substitution ist dabei die Summe der Längen der
Substitutoren. Beispiel: Die Länge von
(#0->1,#1->i(0)) ist 1+2=3.
Der Wert muss eine positive ganze Zahl sein. Es werden nur solche Regelergebnisse in die Äquivalenzklassen eingeordnet, die höchstens Wert verschiedene Variablen enthalten. Ist das Regelergebnis eine Regel, so darf jede Seite nur höchstens Wert verschiedene Variablen enthalten.
Der Wert muss eine positive ganze Zahl sein. In Regeln
werden dann Variablen kleiner oder gleich Wert
zugelassen. Dieser Wert ist zu erhöhen, falls die Zahl der Variablen
für Regeln (auch für neue Regeln!) nicht ausreicht. Der
Wert sollte größer oder gleich dem Parameter max anz
versch Variablen sein.
Der Wert muss eine positive ganze Zahl sein. Sobald der im Info-Block, siehe Info-Block, angezeigte Speicherbedarf in Bytes Wert Bytes überschreitet, bricht das Programm ab. Der tatsächliche Speicherbedarf darf derzeit als etwa doppelt so groß wie angezeigt angesetzt werden. Den physikalischen RAM-Speicher erheblich zu überschreiten hat wenig Sinn, da das Programm sonst in exzessives Swappen gerät.