Tokenizer

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Ein Tokenizer (auch lexikalischer Scanner, kurz Lexer) ist ein Computerprogramm zur Zerlegung von Plain text (zum Beispiel Quellcode) in Folgen von logisch zusammengehörigen Einheiten, so genannte Token (englisch tokens). Als solcher ist er oft Teil eines Compilers.

Grundlagen[Bearbeiten]

Bei der Zerlegung einer Eingabe in eine Folge von logisch zusammengehörigen Einheiten, in die so genannten Token, spricht man auch von lexikalischer Analyse. Typischerweise geschieht die Zerlegung nach den Regeln von regulären Grammatiken, und der Tokenizer ist durch eine Menge endlicher Automaten realisiert. Ein Verfahren zur Überführung eines regulären Ausdrucks in einen nichtdeterministischen endlichen Automaten ist das Berry-Sethi-Verfahren. Durch Anwendung der Potenzmengenkonstruktion lässt sich dieser in einen deterministischen endlichen Automaten überführen.

Ein Tokenizer kann Bestandteil eines Parsers sein und ist dabei von vorverarbeitender Funktion. Er erkennt innerhalb der Eingabe Schlüsselwörter, Bezeichner, Operatoren und Konstanten. Diese bestehen aus mehreren Zeichen, bilden aber jeweils logische Einheiten, sogenannte Token. Diese werden an den Parser zu weiteren Verarbeitung (d.h. syntaktischen Analyse) weitergereicht.

Ein Tokenizer kann einen separaten, sogenannten Screener benutzen, um Leerraum und Kommentare zu entfernen und so die lexigrafische Analyse der Eingabedaten vereinfachen.

Programme zur Erzeugung[Bearbeiten]

Wenn man eine formale Beschreibung der zu erkennenden Lexik angeben kann, lässt sich ein Tokenizer automatisch generieren. Das in Unix-Betriebssystemen enthaltene Programm Lex sowie das als freie Software entwickelte Flex erfüllen genau diese Funktion. Aus der formalen Beschreibung generieren diese Programme eine Funktion, die aus einem eingegebenen Text das jeweils nächste Token ermittelt und zurückgibt. Diese Funktion findet dann meist in einem Parser Verwendung.

Siehe auch: Parsergenerator

Weblinks[Bearbeiten]