Syntax mit PC-PATR

Debugging - Fehlersuche

WAS MAN ALLES FALSCH MACHEN KANN, WIE MAN ES HERAUSFINDET, UND WIE MAN ES REPARIERT!

Syntax und Semantik formaler Sprachen

Wie bei natürlichen Sprachen unterscheidet man auch bei formalen Sprachen und Programmiersprachen zwischen der Syntax und der Semantik von Ausdrücken (Sätzen, Texten, Programmen). Die Syntax einer Sprache legt durch die Regeln fest, wie die Ausdrücke der Sprache gebildet werden können. Die Semantik legt die Bedeutung oder Funktion der Ausdrücke fest.

Voraussetzung für die sinnvolle Verarbeitung eines Programmes ist seine syntaktische Korrektheit. Falls ein Ausdruck gegen eine Regel oder mehrere Regeln verstößt, kann er nicht weiterverarbeitet werden, d.h. ihm kann keine Bedeutung oder Funktion zugeordnet werden. Dies gilt für natürliche Sprachen wie Englisch oder Deutsch genauso wie für formale, z.B. für die Prädikatenlogik erster Stufe oder für PATR-Grammatiken.

Ein Programm (eine Grammatik) ist semantisch korrekt, wenn es das tut, was es tun soll. Die syntaktische Korrektheit ist eine notwendige jedoch keine hinreichende Bedingung für die semantische Korrektheit eines Programmes (einer Grammatik). Mit anderen Worten, ein syntaktisch korrektes Programm kann semantisch abweichend sein.

Syntaxfehler

WinPATR FehlermeldungDie syntaktische Korrektheit von Grammatikdateien wird bereits beim Laden überprüft. Weist eine Grammatikdatei einen syntaktischen Fehler auf, erscheint die nebenstehende Fehlermeldung. Man erhält jedoch keinen Hinweis darüber, wo der Fehler zu suchen ist oder von welcher Art er ist. Fehler können unter Umständen von sehr subtiler Art sein.

Übung 1.
Versuchen Sie die Datei f01.grm in WinPatr zu laden. Sie werden feststellen, dass das nicht geht. Öffnen Sie die Datei im Editor, überprüfen Sie sie auf Fehler, nehmen Sie die notwendigen Korrekturen vor und versuchen sie es erneut. Wiederholen Sie diese Prozedur solange, bis die Datei problemlos geladen werden kann.
Übung 2.
Parsing sentence failedSyntaktisch fehlerhafte Lexikondateien werden problemlos geöffnet, die Fehler machen sich daher erst bei der Anwendung bemerkbar. Öffnen Sie zusätzlich zur inzwischen korrigierten Grammatikdatei f01.grm die Lexikondatei f01.lex. Versuchen Sie jetzt den Satz the boy cried zu analysieren. Es erscheint die nebenstehende Fehlermeldung. Sie kommt immer dann, wenn ein Wort in der Eingabekette im Lexikon nicht gefunden wird. Überprüfen Sie die Lexikon auf Fehler und nehmen Sie die notwendigen Korrekturen vor, solange bis der Eingabesatz korrekt analysiert wird. Überprüfen Sie auch den Satz John cried.

Grundsätzliches zur Syntax von PATR

Trennzeichen

Die einzelnen Elemente einer Grammatik (Schlüsselwörter, Symbole wie S, NP, VP, der Pfeil -> etc.) müssen durch Leerzeilen, Leerzeichen, oder Tabulatoren voneinander getrennt werden (engl. white space). Diese Trennzeichen werden ansonsten aber ignoriert. Wenn man zwischen vor oder nach dem Pfeil -> das Trennzeichen vergißt, wird es zum Bestandteil des vorangehenden oder nachfolgenden Symbols: NP -> besteht aus den Symbolen NP und ->, NP-> hingegen ist nur ein Symbol.

Kommentare

Textelemente, die nicht zur Grammatik selbst gehören, müssen syntaktisch als Kommentare ausgewiesen sein. Dies kann auf zweierlei Weise geschehen:

  1. Einzeilige Kommentare werden durch ein Kommentarzeichen eingeleitet und erstrecken sich nur über eine Zeile. Das Standard-Kommentarzeichen ist das Semikolon (';'). Beispiel:

                Rule S -> NP VP. ;der Punkt signalisiert das Ende einer Regel.

  2. Mehrzeilige Kommentare sind entweder eine Folge von einzeiligen Kommentaren oder ein mehrzeiliger Text, der durch das Schlüsselwort comment eingeleitet wird. Der Geltungsbereich von comment reicht bis zum nächsten Schlüsselwort. Beispiel:

    Comment
    Kommentare, die mit dem Schlüsselwort "comment" beginnen können sich ohne zusätzliche syntaktische Mittel über mehrere Zeilen erstrecken. Der Kommentar endet mit dem nächsten Schlüsselwort (außer comment selbst natürlich).

                End     ;"End" ist ein Schlüsselwort, alles was auf "End" folgt wird ignoriert.

Regeln

Eine Grammatik-Regel in PC-PATR ohne Merkmalsgleichungen (dazu später mehr), besteht aus folgenden Teilen (in der angegebenen Reihenfolge):

  1. dem Schlüsselwort Rule
  2. einem optionalen Regelnamen, der in geschweifte Klammern eingeschlossen wird ({})
  3. einer Phrasenstruktur-Regel aus folgenden Elementen:
    1. dem zu expandierenden nicht-terminalen Symbol als Kopf (z.B. NP)
    2. einem Pfeil (->) oder Gleichheitszeichen (=)
    3. dem Rumpf, der entweder leer ist oder aus einem oder mehreren terminalen oder nicht-terminalen Symbolen besteht, die ggf. als alternative oder optionale Konstituenten markiert sind
  4. einem optionalen Doppelpunkt (:), der nur zu stehen braucht, wenn Merkmalsgleichungen folgen;
  5. einem optionalen Punkt (.)
Hinweis:
Benutzen Sie die Hilfefunktion von WinPatr. Sie beinhaltet das gesamte WinPatr-Handbuch und bezieht sich nicht nur auf rein technische Aspekte.

Semantikfehler

Unvollständiges Lexikon

Wenn sich ein Satz bei vermutlich fehlerfreier und vollständiger Grammatik nicht analysieren läßt, dann muss es am Lexikon liegen. Ein häufiger Fehler ist, daß das Lexikon, so wie es nach dem Einlesen der Lexikondatei dem Programm verfügbar ist, unvollständig ist. In diesem Fall wird bei einem Analyseversuch eine Fehlermeldung angezeigt. Dafür kann es zwei Gründe geben:

  1. Der Lexikoneintrag fehlt tatsächlich, ist also in der Lexikondatei nicht vorhanden. In diesem Fall muss er entsprechend ergänzt werden.
  2. Die Lexikondatei ist syntaktisch fehlerhaft (Schrägstrich (slash) / statt "Backslash" (\), oder falsche Markierungen (z.B. \l oder etwas anderes statt \w oder \c). Dann müssen diese Fehler beseitigt werden.

Das Lexikon kann aber auch "semantisch" falsch sein, insofern beispielsweise die Wörter falschen Kategrien zugeordnet werden. Der folgende Lexikoneintrag ist vermutlich falsch (boy kann normalerweise nicht als Verb verwendet werden):

\w        boy
\c         V

Leider sind solche Fehler nur dadurch erkennbar, das gar nichts mehr geht. Was dann zu tun ist, soll im folgenden gezeigt werden.

Fehlerhafte Grammatik

Wenn die Grammatik (inklsive Lexikon) fehlerhaft ist, dann scheitert die Analyse der zu beschreibenden Ausgangsdaten oder liefert falsche Beschreibungen. Das kann folgende Gründe haben:

  1. die Grammatik ist unvollständig
  2. die Grammatik enthält falsche Regeln
  3. Grammatik und Lexikon harmonieren nicht

Menü SettingsDas Programm ist so voreingestellt, dass nur dann ein Ergebnis angezeigt wird, wenn es wenigstens eine erfolgreiche Analyse gibt. Das ist natürlich für die Fehlersuche nicht besonders hilfreich. Man kann diese Einstellung jedoch ändern.

Wählen Sie im Menü Settings die Option Program Variables. In der sich öffnenden Karteikarte aktivieren Sie die Option Partial Results for Failures. Das bewirkt, dass bei einem Scheitern der Analyse zumindest die bisher erreichten Zwischenergebnisse angezeigt werden, was ggf. wichtige Hinweise für die Verbesserung der Grammatik liefert.

Wir wollen im folgenden diese drei Punkte im Detail abhandeln. Wir verwenden dabei eine als korrekt angenommene Lexikondatei, die im wesentlichen der der Hausaufgabe entspricht.

1. Die Grammatik ist unvollständig

Schritt 1.
Öffnen Sie die Lexikondatei f02.lex in WinPatr (File ® Load Lexicon) und die rudimentäre Grammatikdatei f02.grm.
Schritt 2.
Versuchen Sie mit dieser Grammatik den Satz the boy gave the girl a present zu analysieren.

Sie erhalten ein partielles Analyseergebnis, das auch einen Hinweis darauf gibt, wie das Programm arbeitet. Die Wörter in der Eingabekette werden mit Informationen aus dem Lexikon identifiziert und lexikalischen Kategorien zugeordnet. Das Programm versucht dann, Wortgruppen zu Konstituenten zusammenzufassen und syntaktischen Kategorien (NP, VP) zuzuweisen, findet dafür aber keine geeigneten Regeln in der Grammatik; daher das Fragezeichen.

Schritt 3.
Ergänzen Sie zunächst die Grammatik um eine Regel für NP, die Det und N zu einer Kategorie zusammenfaßt. Analysieren Sie jetzt den gleichen Satz mit der erweiterten Grammatik.

Das Ergebnis sieht jetzt schon sehr viel besser aus. Es wird jedoch die Beziehung zwischen dem Verb und seinen Ergänzungen noch nicht ausgedrückt, wir brauchen also eine Regel, die das Verb (hier Vt2) und seine beiden Objekte zu einer Konstituente (VP) zusammenfaßt.

Schritt 4.
Ergänzen Sie die Grammatik um diese Regel und analysieren Sie den gleichen Satz erneut.

Siehe da! Der Satz kann jetzt vollständig analysiert werden.

2. Die Grammatik enthält falsche Regeln

Falsche Regeln führen nicht unbedingt dazu, dass die Analyse scheitert, sondern ergeben meist eine falsche Strukturbeschreibung. Falsche Regeln, die bei unseren Daten ein Scheitern herbeiführen würden, wären z.B.

Rule    VP -> Vtp PP NP ; die Reihenfolge von PP  und NP ist falsch
Rule    Vp -> Vi        ; das Symbol Vp ist falsch und muss  zu VP korrigert
                        ; werden
Wichtiges Grundprinzip:
Eine korrekte Grammatik muss alle grammatischen Sätze erfassen und alle ungrammatischen ausschließen. Wenn Sie eine Grammatik erstellt haben, muss diese zunächst an allen Ausgangsdaten überprüft werden.

Bei vielen Daten wäre es eine lästige Angelegenheit, die zu analysierenden Daten immer wieder neu eingeben zu müssen. Das Programm WinPatr bietet daher eine Möglichkeit, Sätze in einem ‘Stapel’ zu verarbeiten. Dazu muss eine Textdatei angelegt werden, in der alle zu analysierenden Sätze enthalten sind:

Schritt 5.
Öffnen Sie die Grammatik G4(f04.grm, f04.lex), die der Lösung der Hausaufgabe entspricht.
Schritt 6.
Erstellen Sie im Editor eine Satz-Datei mit den Ausgangsdaten für die Hausaufgabe und speichern Sie diese unter dem Namen f04.sen ab:
 the boy ran
 the boy admired the girl
*the boy admired
 the student put the book on the table
*the student put the book
*the student put on the table
*the student put
 Mary gave John a present
*Mary gave John
?Mary gave a present
*Mary gave
 the professor lived in a village
*the professor lived
Achtung:
In der Satzdatei müssen die Markierungen für ungrammatische ('*')  und fragwürdige Sätze ('?') natürlich fehlen!
Schritt 7.
Sentence filesDer Befehl Parse File bietet die Möglichkeit, eine Liste von Sätzen, die in einer separaten Satzdatei enthalten sind, mit einem Befehl zu analysieren und sie in eine Ergebnisdatei abzuspeichern. Wählt man den Menüpunkt Parse File öffnet sich das Fenster zum Öffnen von Dateien, wobei allerdings nur Sentence files mit der Dateityp-Erweiterung .sen gewählt werden können. Wählen Sie die Datei f04.sen aus.
Eine Satzdatei besteht wie gesagt aus einer Liste von Sätzen, die jeweils auf einer Zeile stehen müssen. Wie bei den Grammatik- und Lexikondateien handelt es sich um reine Textdateien.
Hat man eine Satzdatei ausgewählt, öffnet sich sofort erneut das Dialogfenster zum Öffnen von Dateien.
Parse output filesDiesmal geht es darum, den Namen einer Datei zu bestimmen, in die die Analyseergebnisse ausgegeben werden sollen. Es handelt sich ebenfalls um reine Textdateien. Die Standard-Dateityp-Erweiterung ist .par.
Geben Sie als Namen f04.par an. Es handelt sich hierbei um eine sog. Stapelverarbeitung: die Sätze in der Satzdatei werden nacheinander analysiert, und die Analyseergebnisse – falls erfolgreich – werden nacheinander in die Ausgabedatei (z.B. f04.par) geschrieben. Es ergolgt keine Ausgabe auf dem Bildschirm!
Sehr wichtig:
Im Gegensatz zur interaktiven Analyse wird bei der Stapelverarbeitung auch protokolliert, warum eine Analyse fehlgeschlagen ist.
Schritt 8.
Öffnen Sie im Editor die soeben von WinPatr erzeugte Analysedatei f04.par und sehen Sie sich das Ergebnis genau an.

3. Grammatik und Lexikon harmonieren nicht

Schritt 9.
Öffnen Sie die Grammatik G(f03.grm, f02.grm) in WinPatr und versuchen Sie, bei gleichbleibendem Lexikon, unseren Beispielsatz zu analysieren. Sie werden feststellen, dass die Analyse wieder scheitert. Es werden offensichtlich keine Regeln für die VP gefunden. Ist wirklich keine vorhanden? Überprüfen Sie das!
Lexikon und Grammatik stehen über die terminalen Symbole in den Regeln einerseits und den Angaben über die lexikalischen Kategorien (im Feld \c im Lexikon) miteinander in Beziehung. Terminale Symbole sind solche, die nur auf der rechten Seite einer Regel vorkommen und für die es daher keine syntaktischen Regeln gibt, die sie weiter expandieren. In unserer Beispielgrammatik sind also Name, Det, N, V, P terminale Symbole. Terminale Symbole in den Grammatikregeln und lexikalische Kategorien in den Lexikoneinträgen müssen korrespondieren und sich entweder direkt entsprechen oder durch besondere lexikalische Regeln miteinander in Beziehung gesetzt werden. Dazu später mehr, wenn es um Merkmalstrukturen geht.