Token

Top  Previous  Next

Beispiele > Cocor Import > Token

 

Eine automatische Übersetzung der Tokenspezifikationen von Coco/R in die regulären Ausdrücke des TextTransformers wäre prinzipiell machbar.

Dies soll hier aber nicht geschehen, da dies - insbesondere wegen der unterschiedlichen Art der Definition von Zeichenmengen - doch einigen Aufwand bedeuten würde. Die Tokendefinitionen machen zudem nur einen kleinen Teil eines Übersetzungsprojekts aus.

Um Coco/R Compilerbeschreibungen parsen zu können werden die Coco/R Tokendefinitionen deshalb hier direkt übersetzt.

 

Bei Coco/R werden zunächst die verwendeten Zeichenklassen definiert und diese bilden dann die Grundlage zur EBNF-Definition der Token. Im TextTransformer wäre diese Zwei-Schrittverfahren ebenfalls anwendbar, üblicherweise werden die Token jedoch zusammen mit ihren Zeichenklassen definiert. Hierbei kann auf eine Menge vordefinierter Zeichenklassen zurückgegriffen werden, die es für Coco/R nicht gibt.

 

Die entsprechenden Zeilen aus Cr_17.atg sind:

 

CHARACTERS

letter   = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_" .

digit    = "0123456789" .

cntl     = CHR(0)..CHR(31).

tab      = CHR(9) .

eol      = CHR(13).

lf       = CHR(10) .

back     = CHR(92) .

noQuote1 = ANY - '"' - cntl - back .

noQuote2 = ANY - "'" - cntl - back .

graphic  = ANY - cntl .

 

TOKENS

ident     = letter {letter | digit} .

str    =   '"' {noQuote1 | back graphic } '"'

             | "'" {noQuote2 | back graphic } "'" .

badstring =   '"' {noQuote1 | back graphic } ( eol | lf )

             | "'" {noQuote2 | back graphic } ( eol | lf ) .

number    = digit {digit} .

 

 

 

Im TextTransformer können die Zeichenklassen folgendermaßen ausgedrückt werden:      

 

noQuote1 =  [^\"[:cntrl:]\\]

noQuote2 =  [^'[:cntrl:]\\]

graphic  =  [^[:cntrl:]]

 

Damit ergibt sich für die Token:

 

IDENT        :: =        [[:alpha:]_]\w*

STRING        ::=        \"([^\"[:cntrl:]\\]|\\[^[:cntrl:]])*\" \

                             |'([^'[:cntrl:]\\]|\\[^[:cntrl:]])*'

BADSTRING        ::=        \"([^\"[:cntrl:]\\]|\\[^[:cntrl:]])*(\r|\n) \

                               |'([^'[:cntrl:]\\]|\\[^[:cntrl:]])*(\r|\n)

NUMBER        ::=        \d+

 

 



Diese Seite gehört zur TextTransformer Dokumentation

Home  Inhalt  English