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 |