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