Informatik > Lexikon

Lexikalische Analyse

Erste Aufgabe: Fehlerprüfung

Unter der lexikalischen Analyse versteht man die erste Arbeitsphase eines Compilers. Hier wird der Quelltext auf Rechtschreibfehler untersucht, die dann dem User zurückgemeldet werden (Fehlermeldungen). Eine Korrektur der Rechtschreibfehler durch den Compiler findet nicht statt, das muss der User selbst machen.

Beispiele für lexikalische Fehler (Rechtschreibfehler)

Ein falsch geschriebener Java-Bezeichner wie: Umfang&Radius

Dieser Bezeichner enthält ein Sonderzeichen, nämlich '&'. Solche Sonderzeichen sind in Java-Bezeichnern nicht erlaubt.

Eine falsch geschriebene double-Konstante wie: 3,1415

Eine double-Konstante darf kein Komma enthalten, sondern muss einen Punkt vorweisen.

Zweite Aufgabe: Erzeugung eines Tokenstroms

Die Prüfung auf Rechtschreibfehler ist nur die erste Aufgabe der lexikalischen Analyse. Die zweite Aufgabe besteht in der Erzeugung eines Tokenstroms. Darunter versteht man quasi eine Verallgemeinerung des Quelltextes. Dem Compiler ist es völlig egal, welchen Wert die double-Konstante hat. Wenn die Konstante den Wert 3.14 hat macht das für den Compiler keinen Unterschied im Vergleich zu einem Wert wie 7.38. Auch wenn der Compiler eine int-Variable verarbeiten muss, ist es ihm völlig egal, ob diese Variable den Bezeichner "radius" oder den Bezeichner "umfang" hat. Den Compiler interessieren solche Details nicht. Daher wandelt der Lexer - das ist der Teil des Compilers, der für die lexikalische Analyse zuständig ist - die Zeilen bzw. Befehle des Quelltextes in einen Tokenstrom um.

Aus der Java-Zeile

umfang = 2 * pi * radius;

könnte beispielsweise der Tokenstrom

Bezeichner -> Zuweisungsoperator -> int-Zahl -> 
arithmetischer Operator -> Bezeichner -> 
arithmetischer Operator - Bezeichner - Semikolon

generiert werden. Diesen eher abstrakten Tokenstrom kann der Parser - das ist der zweite Teil des Compilers - dann auf syntaktische Richtigkeit untersuchen. Details wie die Namen der Variablen etc. interessieren dabei nicht.

Bei der lexikalischen Analyse eines Quelltextes spielen übrigens deterministische endliche Automaten (kurz: DEAs) eine wichtige Rolle, auf die in der Folge 25.3 näher eingegangen wird.