Optionen |
Top Previous Next |
Skripte > Produktionen > ANY > Optionen
Dieser Abschnitt ist nur für Spezialisten. Dem normalen Benutzer wird empfohlen, die Defaulteinstellung "keine Fehlschlagsalternative für ANY" in den Projektoptionen zu belassen und diesen Abschnitt zu überspringen.
In den Projektoptionen kann gewählt werden, ob der Kontext der Produktion in der ein ANY-Symbol steht bei der Berechnung seiner Tokenmenge berücksichtigt wird oder nicht.
1. keine Fehlschlagsalternative
Gemäß dieser Option werden die Alternativen in der eine Produktion steht, die ein die ANY-Symbol verwendet, bei der Berechnung der Tokenmenge dieses Symbols berücksichtigt. Beispiel:
Produktion1 ::= ANY | "a" Produktion2 ::= "b" Produktion3 ::= Produktion1 | Produktion2
Dadurch, dass Produktion2 eine Alternative zu Produktion1 ist, wird "b" zu einer Alternative von ANY. ANY erkennt somit alle Token außer "a" und "b".
Diese Option ist für neue Projekte voreingestellt, da sie den Intuitionen des Anwenders entsprechen dürfte.
Allerdings gibt es in einem speziellen Fall ein Problem. Steht das ANY-Symbol in einer löschbaren Struktur am Ende einer Produktion und hat diese in verschiedenen Kontexten verschiedene Nachfolger, kann es zu einem unerwarteten Verhalten kommen.
Any ::= ANY+ Production ::= "a" Any "b" | "c" Any "d"
Der Text "a d b" wird in diesem Fall nicht geparst. Die erste Alternative ließe das erwarten, aber wegen der zweiten wird "d" aus der Menge der von ANY erkannten Token ausgeschlossen. In solchen Fällen generiert der TextTransformer eine Warmeldung.
2. Fehlschlagsalternativen
Einfacher und daher etwas schneller ist die Berechnung der von ANY erkannten Tokenmenge, wenn der Kontext nicht berücksichtigt wird. Das hat aber den gravierenden Nachteil, dass z.B. die obige Produktion3 nicht kompiliert. ANY erkennt dann alle Token außer "a" und steht somit in Konflikt mit Produktion2. Sinnvoll kann diese Option sein, wenn Kompatibilität mit Coco/R-Projekten gewahrt werden soll, da ANY dort auf diese Weise berechnet wird.
|
Diese Seite gehört zur TextTransformer Dokumentation |
Home Inhalt English |