Loading AI tools
Tokenizer zur Generierung von Tokenizern Aus Wikipedia, der freien Enzyklopädie
Das Programm Lex wird im Übersetzerbau benutzt, um Scanner für die lexikalische Analyse von Quelltexten zu erstellen. Ein lexikalischer Scanner ist Teil eines Übersetzers.
Lex wird oft genutzt in Kombination mit Yacc, der für die syntaktische Analyse zuständig ist.
Lex wurde Mitte der 1970er Jahre an den Bell Labs von Mike Lesk in C programmiert; die Regex-Behandlung stammte von Alfred V. Aho und Ken Thompson. Im Sommer 1976 wurde das Programm von dem damaligen Bell-Labs-Praktikanten Eric Schmidt neu implementiert.
Damit Lex ein Analyseprogramm generieren kann, muss eine Beschreibungsdatei erstellt werden. In dieser Datei werden sogenannte Token mittels regulärer Ausdrücke definiert.
Hier ein Beispiel einer solchen Datei:
%{
#include "y.tab.h"
extern int yylval;
%}
%%
"=" { return EQ; }
"!=" { return NE; }
"+" { return PLUS; }
"-" { return MINUS; }
";" { return SEMICOLON; }
"print" { return PRINT; }
[0-9]+ { yylval = atoi(yytext); return NUMBER; }
...
Das resultierende Analyseprogramm liest den Quellcode des zu kompilierenden Programmes ein und teilt diesen in Token ein. Sollte dies nicht möglich sein, liegt ein lexikalischer Fehler vor. Die Token werden dann dem syntaktischen Analyseteil bzw. -programm eines Übersetzers übergeben.
Für einen Beispiel-Quelltext wie
print 15+5;
sind die Token:
Es ist zu beachten, dass Lex keine Kenntnis von erlaubter Syntax hat. Konkret bedeutet dies, dass der Beispielcode
15+ print; 5
ebenfalls in dieselben Token überführt würde (jedoch in anderer Reihenfolge).
lex
: generate programs for lexical tasks – Open Group Base Specificationflex(1)
: fast lexical analyzer generator – OpenBSD General Commands ManualSeamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.