Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ lex(1) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

yacc(1)

expressions(5)

lex(1)                                                               lex(1)

NAME
     lex - Scanner erstellen

SYNTAX
     lex [-ctV] [-n|-v] [-Q[o]] [--] [Datei]

BESCHREIBUNG
     lex erzeugt ein C-Programm aus einer Datei, die den "lex-Quelltext"
     enthält, den Sie für das vorliegende Problem entwickelt haben. Ein
     lex-Quelltext besteht aus höchstens drei Abschnitten: Definitionen,
     Regeln und Benutzerfunktionen. Die Regeln geben an, welche Muster in
     einem Eingabetext gesucht und welche Aktionen ausgeführt werden sol-
     len, wenn ein Muster gefunden wurde. Sie müssen angegeben werden. Die
     Definitionen und Benutzerfunktionen sind optional. Damit ergibt sich
     folgender Aufbau für die lex-Quelldatei:

     Definitionen
     [%%
     Regeln]
     [%%
     Benutzerfunktionen]

     Mehrere Dateien werden wie eine Einzeldatei behandelt. Wenn keine
     Datei oder - als Dateiname angegeben wird, wird die Standardeingabe
     verwendet.

     lex erzeugt eine Datei mit dem Namen lex.yy.c. Wenn lex.yy.c mit der
     Lex-Bibliothek übersetzt und gebunden wird, kopiert das erzeugte Pro-
     gramm die Standard-Eingabe auf die Standard-Ausgabe, es sei denn, ein
     in der Datei angegebenes Muster wird gefunden. In diesem Fall wird der
     entsprechende Programmtext ausgeführt. Das Muster, für das eine Übe-
     reinstimmung gefunden wurde, befindet sich in der Variablen yytext.
     Die Prüfung auf Übereinstimmung wird in der Reihenfolge der Suchmuster
     in der Eingabedatei durchgeführt.

OPTIONEN
     -c     Steht für die Verwendung von C-Aktionen (im Gegensatz zu ande-
            ren Programmiersprachen, wie z. B. Fortran) und ist der Stan-
            dard.

     -t     Das Programm wird auf die Standard-Ausgabe, nicht in die Datei
            lex.yy.c geschrieben.

     -v     Liefert eine zweizeilige Statistik-Zusammenfassung.

     -n     Verhindert Ausdrucken der Statistik-Zusammenfassung. Wurden
            keine Tabellengrößen definiert und ist -v nicht angegeben, wird
            implizit -n angenommen.

     -V     Gibt Versionsinformationen auf die Standard-Fehlerausgabe aus.





Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

lex(1)                                                               lex(1)

     -Q[o]  Legt fest, ob Versionsinformationen an die Ausgabedatei
            lex.yy.c ausgegeben werden sollen.

            o steht für eine ja/nein-Angabe in der jeweils eingestellten
            Sprachumgebung. In einer englischsprachigen Umgebung geben Sie
            -Qy an, um Versionsinformationen in die Datei lex.yy.c zu
            schreiben, und -Qn, um keine Versionsinformationen auszugeben.
            In einer deutschsprachigen Umgebung müssen Sie beispielsweise
            -Qj oder -Qn angeben.

            Standardmäßig werden keine Versionsinformationen ausgegeben.

     --     Ende der Optionenliste. Die Angabe ist nötig, wenn Datei mit -
            beginnt.

   Definitionen

     Im Definitionsteil können Ersetzungen definiert werden. Sie werden in
     folgender Form angegeben und müssen am Zeilenanfang stehen:

     name subsitute          Die Zeichenkette substitute ersetzt {name},
                             wenn dieser im Regelteil vorkommt.

     Der Typ von yytext kann im Definitionsabschnitt deklariert werden:

     %array                  yytext ist vom Typ Zeichen-Array

     %pointer                yytext ist vom Typ String-Pointer

     Außerdem definieren Sie hier Startzustände von lex:

     %sname bzw. %Sname      einfacher Startzustand

     %xname bzw. %Xname      exklusiver Startzustand

     Befindet sich der erstellte Scanner in einem exklusiven Zustand, werden nur
     Muster berücksichtigt, die für diesen Zustand angegeben wurden. Einfache
     Zustände berücksichtigen dagegen auch alle Muster ohne Zustandsangabe.

     Bestimmte Standard-Tabellengrößen sind für einige Benutzer zu klein.
     Die Tabellengrößen für den erzeugten endlichen Automaten können im
     Definitionsabschnitt gesetzt werden:

     %p n   Anzahl der Positionen ist n (Standard 2500)
     %n n   Anzahl der Zustände
     %e n   Anzahl der Knoten des Syntaxbaums ist n (1000)
     %a n   Anzahl der Übergänge ist n (2000)
     %k n   Anzahl der gepackten Zeichenklassen ist n (2500)
     %o n   Größe des Ausgabefelds ist n (3000)

     Die Verwendung einer oder mehrerer Größen zieht automatisch die Option
     -v nach sich, wenn die Option -n nicht verwendet wird.


Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

lex(1)                                                               lex(1)

   Regeln

     Der Regelteil der Datei beginnt mit dem Begrenzungssymbol %%. Sie kön-
     nen im Regelteil lokale Variablen für yylex() vereinbaren: Alle Zeilen
     im Regelteil, die mit einem Leerzeichen oder Tabulator beginnen oder
     in %{ und %} eingeschlossen sind und vor der ersten Regel stehen, wer-
     den an den Anfang der Funktion yylex() kopiert, direkt hinter die
     erste geöffnete Klammer.

     Jede Regel besteht aus einem regulären Ausdruck, der ein aufzufinden-
     des Muster beschreibt, und Aktionen, die ausgeführt werden sollen,
     wenn das Muster gefunden wird. Eingabetext, der keinem aufzufindenden
     Muster entspricht, wird von lex unverändert an die Ausgabedatei wei-
     tergegeben.

     lex unterstützt erweiterte reguläre Ausdrücke [siehe expressions(5)]
     mit folgenden Ausnahmen bzw. Erweiterungen:

     "xy"           xy, auch wenn x und/oder y lex-Operatoren sind (außer
                    \)

     ^x             x am Zeilenanfang (nur zu Beginn eines Musters)

     <y>x bzw. <y1,y2,...>x
                    x wenn lex sich im Zustand y bzw. in einem der Zustände
                    y1, y2 usw. befindet

     x$             x am Ende einer Zeile (nur am Ende eines Musters)

     x/y            x wenn y folgt

     {xx}           Ersetzung für xx aus dem Definitionsteil

     \oktal         Zeichen mit dem oktalen Code oktal

     \xhexadezimal  Zeichen mit dem hexadezimalen Code hexadezimal

     \zeichen       das Zeichen zeichen, außer \zeichen ist eine der fol-
                    genden Escape-Sequenzen: \\, \a, \b, \f, \n, \r, \t, \v

     Die Priorität, in der reguläre Ausdrücke ausgewertet werden, weicht in
     einigen Punkten von der Standard-Reihenfolge ab. Die folgende Tabelle
     ist nach fallender Priorität sortiert:

     Klassen/Zeicheneinheiten     [==] [::] [..]

     entwertete Zeichen           \zeichen

     Klammer-Ausdrücke            [ ]

     Ausdrücke in ""              "..."



Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

lex(1)                                                               lex(1)

     Gruppierung                  ( )

     Definitionen                 {name}

     Wiederholung                 * + ?

     Konkatenierung               xy

     Intervalle                   {m,n}

     oder                         |

     Im Aktionsteil einer Regel können spezielle Aufgaben durchgeführt wer-
     den. Folgende Makros werden dafür von lex zur Verfügung gestellt:

     input()        ein weiteres Zeichen wird vom Eingabestrom gelesen

     unput()        ein Zeichen wird für einen späteren Lesevorgang zurück-
                    gestellt

     output()       ein Zeichen wird in den Ausgabestrom geschrieben

     echo           yytext wird in den Ausgabestrom geschrieben

     Sie können diese Makros umdefinieren, wenn Sie die Ein-/Ausgabe selbst
     steuern möchten. Achten Sie dabei aber auf Konsistenz.

     Abgesehen vom Abspeichern gefundener Muster in yytext gibt es weitere
     Möglichkeiten, mit lex-Funktionen die gefundenen Textmuster zu bear-
     beiten:

     yymore()       Neu erkannte Zeichen werden an die bereits in yytext
                    befindlichen angehängt (normalerweise wird yytext mit
                    den nächsten gefundenen Zeichen überschrieben).

     yyless(n)      Nur die ersten n Zeichen in yytext werden berücksich-
                    tigt.

     REJECT         Zeichenketten, die sich überlappen oder die zum Teil in
                    einer anderen Zeichenkette enthalten sind, werden ver-
                    arbeitet. REJECT springt direkt zur nächsten Regel,
                    ohne den Inhalt von yytext zu ändern.

INTERNATIONALE UMGEBUNG
     Die Sprache der Meldungstexte und ja/nein-Angaben werden durch die
     Umgebungsvariablen LCALL, LCMESSAGES oder LANG bestimmt.

     In der Standardeinstellung verhält sich das System so, als wäre es
     nicht internationalisiert, d. h. die Meldungstexte erscheinen in eng-
     lischer Sprache und ja/nein-Angaben müssen ebenfalls in englischer
     Sprache (y oder n) eingegeben werden. Wenn Sie die Sprachumgebung
     ändern wollen, müssen Sie eine dieser Variablen entsprechend setzen.


Seite 4                      Reliant UNIX 5.44               Gedruckt 11/98

lex(1)                                                               lex(1)

     In regulären Ausdrücken bestimmt die Umgebungsvariable LCCOLLATE die
     Bedeutung von Zeichenbereichen, Äquivalenzklassen und Zeicheneinhei-
     ten, die Umgebungsvariable LCCTYPE bestimmt die Bedeutung von Zei-
     chenklassen. Wenn diese Variablen nicht gesetzt sind, wird dier Wert
     von LANG verwendet. Ist auch LANG nicht oder als leere Zeichenkette
     definiert, verhält sich das System so, als wäre es nicht internationa-
     lisiert.

     Ausführliche Informationen zu den Abhängigkeiten der Umgebungsvaria-
     blen und zur Internationalisierung im allgemeinen finden Sie im Hand-
     buch "Leitfaden für Programmierer: Internationalisierung - Lokalisie-
     rung". Zur Einstellung der Benutzerumgebung siehe auch environ(5).

SIEHE AUCH
     yacc(1), expressions(5).

     Kapitel "lex" in "Leitfaden und Werkzeuge für die Programmierung mit
     C".




































Seite 5                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026