Optionen |
Top Previous Next |
Skripte > Produktionen > SKIP > Optionen
Es gibt drei Optionen für das SKIP-Symbol, die die Behandlung möglicher Konflikte regeln. Zwei davon können in den Projektoptionen voreingestellt werden. Soll eine nicht voreingestellte Option verwendet werden, so kann dies durch Anhängen eines Parameters an "SKIP" ausgedrückt werden. Z.B.
SKIP[ F ]
1. keine Fehlschlagsalternative
Wenn in den Projektoptionen die Verwendung globaler Scanner eingestellt ist, kann es passieren, dass an der aktuellen Position des Quelltextes ein Token erkannt wird, das in der Grammatik nicht erwartet wird. Beispielsweise ist in sehr vielen Projekten ist ein regulärer Ausdruck zu Erkennung von Bezeichnern definiert. Wird nun mit
SKIP "Welt"
der folgende Text geparst:
Hallo Welt
so würde "Hallo" als Bezeichner interpretiert. Bei strikter Anwendung des Scanner-Algorithmus würde SKIP dann nicht getestet und es würde eine Fehlermeldung erzeugt. Wenn aber keine Fehlschlagsalternativen zugelassen sind, wird "Hallo" durch SKIP übersprungen und somit der gesamte Text korrekt geparst. Innerhalb einer Produktion kann diese Option mit dem Parameter NFA (no failure alternative) explizit gesetzt werden:
SKIP[ NFA ]
Allerdings gibt es bei dieser Option ein Problem mit verdeckten Alternativen: Beispiel:
( ID ";"* )* SKIP
Beginnt ein Text mit einem Semikolon, so wird es mit SKIP übersprungen. Beginnt der Text mit einem Bezeichner, auf den ein Semikolon folgt, so wird der Bezeichner korrekt erkannt. Das Semikolon wird aber wiederum übersprungen. Es wird zwar zunächst erkannt, aber nicht als Alternative zu SKIP gewertet. In diesem Fall wäre die strikte Option 3 (s.u.) für SKIP angebracht.
2. Sprungziele an der aktuellen Position zulassen // experimentell
Ein ähnlicher Konflikt wie eben beschrieben entsteht, wenn schon an der aktuellen Position des Quelltextes ein Token erkannt wird, das als Ziel des SKIP-Knotens gesetzt ist.
SKIP ID
Das Wort "Hallo" im Text:
Hallo Welt
wird dann bereits als Bezeichner ID erkannt. Die oben beschriebene Option keine Fehlschlagsalternativen zuzulassen greift hier nicht, da die Sprungziele von SKIP nicht zu diesen Alternativen hinzugerechnet werden. Würden sie hinzugerechnet, wäre ein Ausdruck wie
SKIP? ID
sinnlos. SKIP würde immer auf den Text passen (abgesehen vom Textende, bei dem kein Bezeichner mehr folgt). Es ist also zu empfehlen, die Grammatik entsprechend abzuändern: Mit
SKIP? ID+
wird "Hallo Welt" korrekt geparst. Experimentell gibt es die NF-Option (no failure)
SKIP[ NF ] // experimentell
Möglicherweise wird diese Option in zukünftigen TETRA-Versionen nicht mehr verfügbar sein, es sei denn sie wird von Benutzern ausdrücklich gewünscht.
3. strikte Fehlererzeugung
Bis zu TextTransformer 1.5.0 wurde in den oben dargestellten Fällen immer Fehler erzeugt. Diese Option zwingt den Programmierer dazu, Konfliktfälle explizit zu bedenken und zu behandeln. Die Möglichkeit SKIP optional zu machen wurde bereits angeführt. Ein andere Möglichkeit wäre:
( SKIP | ID ) ID
Strikte Fehlererzeugung kann in einer Produktion mit dem F-Parameter gesetzt werden:
SKIP[ F ]
Anmerkung Nochmals sei darauf hingewiesen, dass die genannten Konfliktmöglichkeiten aus der Einstellung resultieren, globale Scanner zu verwenden. Ein Konflikt mit Literalen kann sich nur ergeben, wenn auch die Option "alle Literale testen" gesetzt ist und es ein Literal als unmittelbare Alternative zu SKIP gibt. Andernfalls wird auf Literale überhaupt nicht getestet.
|
Diese Seite gehört zur TextTransformer Dokumentation |
Home Inhalt English |