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:

 

 

Name

_TETRA

Definition

TETRA

 

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.:

 

 

Name

_TETRA

Definition

**TETRA**

 

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

 

1.einen eindeutigen Namen haben,
2.ihnen eine semantische Aktion zugeordnet werden kann und
3.diese Namen auch im erzeugten C++-Code verfügbar sind.

 

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