Benannte Literale |
Top Previous Next |
Skripte > Tokendefinitionen > Literale > Benannte Literale
Manchmal ist es von Vorteil, statt einfache literaler Token zu verwenden, benannte literale Token zu definieren. Dies kann entweder direkt auf der Token-Seite erfolgen oder, besonders einfach, die Token werden innerhalb einer Produktion definiert indem dem literalen Text ein Unterstrich vorangestellt wird. In diesem Falle wird bei der Übernahme der Produktion automatisch ein neues Token auf der Token-Seite eingefügt. Wenn z.B. in der Produktion der Ausdruck _TETRA vorkommt, so wird daraus auf der Token-Seite folgendes Token:
Da Sonderzeichen in Skript-Namen nicht erlaubt sind, können auf diese Weise keine Token definiert werden, die Sonderzeichen enthalten. Es ist aber möglich, die Definition eines benannten Literals nachträglich entsprechend zu ändern. Z.B.:
Beginnt der Name eines Tokens mit einem Unterstrich, so werden alle in der Definition vorkommenden Zeichen literal interpretiert. Die Sterne '*' haben hier also nicht die Bedeutung von Wiederholungszeichen.
Die Vorteile benannter literaler Token sind, dass sie
zu 1. Dadurch, dass benannte literale Token einen eindeutigen Namen haben, können Schreibfehler vermieden werden, die unterlaufen könnten, wenn das gleiche Literal an verschiedenen Stellen der Grammatik verwendet wird.
zu 2. Wenn stets die gleiche semantische Aktion beim Antreffen eines bestimmten literalen Tokens im Text ausgeführt werden soll, auch wenn es mehrmals an verschiedenen Stellen der Grammatik vorkommt, dann ist es angebracht, die Möglichkeit auszunutzen, ein Token direkt mit einer Aktion zu verknüpfen. Es ist z.B. oft sinnvoll, bei der Erzeugung von Parse-Bäumen die Texte der literalen Token auf stets gleiche Weise als "Blätter" in den Baum einzufügen.
zu 3. Bei der Generierung von C++-Code aus einem Projekt wird für jedes Literal eine Zeichenkette erzeugt, der auch in Code des Programms verwendet werden kann, das den Parser benutzt. Z.B.
const char _protected[] = "protected";
|
Diese Seite gehört zur TextTransformer Dokumentation |
Home Inhalt English |