(generate programs for lexical tasks)
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 sollen, wenn ein Muster gefunden wurde. Sie müssen angegeben werden. Die Definitionen und Benutzerfunktionen sind optional.
lex erzeugt eine Datei mit dem Namen lex.yy.c. Wenn lex.yy.c mit der Lex-Bibliothek übersetzt und gebunden wird, kopiert es die Eingabe auf die 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 Übereinstimmung gefunden wurde, befindet sich in yytext[], einem externen Zeichenfeld. Die Prüfung auf Übereinstimmung wird in der Reihenfolge der Suchmuster in der Eingabedatei durchgeführt.
Syntax
lex[ -ctvnV][ -Q[y|n]][ datei ...] |
steht für die Verwendung von C-Aktionen und ist der Standard
das Programm wird in die Datei lex.yy.c, nicht auf Standardausgabe geschrieben
liefert eine zweizeilige Statistik-Zusammenfassung
verhindert Ausdrucken der Zusammenfassung von -v
gibt Versionsinformationen auf die Standard-Fehlerausgabe aus
legt fest, ob Versionsinformationen an die Ausgabedatei lex.yy.c ausgegeben werden sollen. y|n 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.
Eingabedatei. Mehrere Dateien werden wie eine Einzeldatei behandelt. datei nicht angegeben 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:
Die Verwendung einer oder mehrerer Größen zieht automatisch die Option -v nach sich, wenn die Option -n nicht verwendet wird. Der Regelteil der Datei beginnt mit dem Begrenzungssymbol %%. Sie können im Regelteil lokale Variablen für yylex() vereinbaren. Alle Zeilen im Regelteil, die mit einem Leerzeichen oder Tabulator beginnen und vor der ersten Regel stehen, werden an den Anfang der Funktion yylex() kopiert, direkt hinter die erste geöffnete Klammer. Jede Regel besteht aus einem regulären Ausdruck, der ein aufzufindendes 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 weitergegeben. Ein regulärer Ausdruck besteht aus Textzeichen mit oder ohne zusätzliche Operatoren. Folgende Operatoren können bei lex verwendet werden:
Im Aktionsteil einer Regel können spezielle Aufgaben durchgeführt werden. Folgende Makros werden dafür von lex zur Verfügung gestellt:
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 bearbeiten:
|
Hinweis
Wird mit c89 [5] ein lex-Programm gebunden, muss als Bibliotheksparameter -ll angegeben werden. |
Internationale Umgebung
Die folgenden Umgebungsvariablen beeinflussen die Ausführung des Kommandos lex: LANG Gibt einen Standardwert für die Variablen für die internationale Umgebung an, die nicht gesetzt oder Null sind. Ist LANG nicht gesetzt oder Null, wird der entsprechende Standardwert der internationalen Umgebung verwendet. Enthält eine der Internationalisierungsvariablen eine ungültige Einstellung, verhält sich das Kommando so, als sei keine der Variablen definiert worden. LC_ALL Ist diese Variable auf einen Wert gesetzt, d. h. ist sie nicht leer, überschreibt dieser Wert die Werte aller übrigen Internationalisierungsvariablen. LC_COLLATE Bestimmt in regulären Ausdrücken die Bedeutung von Zeichenbereichen, Äquivalenzklassen und Zeicheneinheiten. LC_CTYPE Legt die internationale Umgebung für die Interpretation der Byte-Folgen eines Datentexts als Zeichen fest (z.B. Singlebytezeichen im Unterschied zu Mehrbytezeichen in Argumenten und Eingabedateien) sowie die Einteilung der Zeichen in Groß- und Kleinbuchstaben und deren Übereinstimmung. LC_MESSAGES Legt die internationale Umgebung für Format und Inhalt der Diagnosemeldungen fest, die in die Standardfehlerausgabe geschrieben werden. NLSPATH Legt den Pfad der Meldungsdateien für LC_MESSAGES fest. |
Siehe auch
yacc |