Add Query Command
Description
Das Skript
search-annotations.pl
ist nützlich, um bestehende
Syntaxbäume nach bestimmten Konfigurationen zu durchsuchen. Leider ist
es nicht in cdgp integriert; das hat verschiedene Vorteile:
- Operatoren und Funktionen können benutzt werden, die in Constraints nicht möglich sind, etwa der Statistikoperator
stat()
oder die Zuweisung :=, mit der Bäume automatisch geändert werden können.
- Statt Parses untersucht es Annotationen, was viel weniger Zeit und Speicher verbraucht. Nur so ist Suche in mehreren zehntausend Bäumen überhaupt möglich.
Dieselben Eigenschaften wirken sich aber auch als Nachteile aus:
- Weil keine Parses vorliegen, kann man nicht das normale
evalFormula()
verwenden. Stattdessen wurde die Constraintsprache in Perl reimplementiert -- mit vielen Beschränkungen und Inkompatibilitäten, die völlig undokumentiert sind.
- Die Perl-Repräsentation von Annotationen verbraucht immer noch mehr Speicher und Zeit, als nötig wäre, wenn man Annotationen direkt untersuchte.
- Es besteht keine Anbindung zum Hauptprogramm. Man kann xcdg nicht sagen, `Zeige mir alle Auxiliarketten der Länge vier im Bild.'
Statt des externen Skriptes soll ein Befehl
query
in
commands.c
geschrieben werden. Hier die Anforderungen:
- Der Befehl soll Formeln der CDG-Sprache entgegennehmen und passende Konfigurationen in geladenen Annotationen suchen und darstellen, so wie
search-annotations.pl
es jetzt tut.
- In xcdg sollen die Ergebnisse sogleich graphisch dargestellt werden, d.h. der Baum wird gezeichnet und die betreffenden Kanten rot hervorgehoben.
- Die Suche soll Annotationen verwenden, d.h. es soll kein
anno2parse
notwendig sein.
- Die Einschränkungen der Suchsprache sollen beseitigt werden; die Erweiterungen sollen erhalten bleiben. Insbesondere soll automatische Veränderung von Annotationen möglich sein.
Der letzte Punkt bedeutet einen erheblichen Eingriff in die
Eingabesprache. Entweder muß ein gänzlich anderer Zweig für
InputSeq
geschrieben werden, in dem nicht
Formula
und
Term
, sondern
QueryFormula
und
QueryTerm
verwendet werden, oder die alten
Nonterminale erhalten neue Möglichkeiten. Dann muß aber in
inputLoad()
geprüft werden, daß normale Constraints keine
Zuweisungen etc. enthalten.
Die Funktion
cmdQuery()
sollte dann durch
inputLoad()
die
Befehlszeile in eine
Formula
umwandeln und diese der Reihe nach auf
alle bekannten Annotationen anwenden. Dazu ist eine
eigene Hierarchie von Funktionen notwendig, denn
evalTerm()
etc.
benötigen LevelValue-Strukturen, die es in Annotationen nicht gibt.
Insbesondere kann man in diesen Funktionen nicht die normalen
Implementationen von Prädikaten und Funktionen verwenden, sondern muß
sie nachprogrammieren.
Comments
--
YannickVersley on 20 Jul 2005, 14:32:22
--
posted by MichaelDaum on 05 Nov 2004, 16:52:32