Hauptnavigation

Tokenizer next up previous contents
Weiter: Header-Gruppe Hoch: Parser und Tokenizer Zurück: Einlesen einer Datei

Tokenizer

Die Klasse Tokenizer.java ?bernimmt die Aufgabe eines Scanners. Die einzelnen Zeichen des Eingabedokuments werden von ihm gelesen. Abh?ngig von der Art des Zeichens werden daraufhin Teilzeichenketten, so genannte Tokens, zusammengesetzt.

Der Tokenizer unterscheidet die folgenden f?nf Klassen von Tokens:

  • ControlWord
    Ergeben die gelesen Zeichen ein Kontrollwort der RTF-Syntax, bilden sie ein Token das durch die Klasse ConrolWord.java repr?sentiert wird.
  • DocumentText
    Der eigentliche Text des Dokumentes wird durch Tokens der Klasse
    DocumentText.java dargestellt.

  • GroupStart
    Findet der Tokenizer bei der Analyse des Textes eine ?ffnende Geschweifteklammer, so handelt es sich um den Beginn einer Gruppe. Der Gruppenstart wird durch ein Token der Klasse GroupStart.java repr?sentiert.
  • GroupEnd
    Findet der Tokenizer bei der Analyse des Textes eine schlie?ende Geschweifteklammer, so handelt es sich um das Ende einer Gruppe. Das Gruppenende wird durch ein Token der Klasse GroupEnd.java repr?sentiert.
  • DocumentEnd
    Liefert die Klasse FileHandler.java keine Zeichen mehr, sondern gibt das Ende der Datei bekannt, wird das Token DocumentEnd erzeugt.

Abbildung 8.2: UML Diagramm der Klassen die die einzelnen Tokens realisieren. Die Methoden und Attribute sind hier aus Gr?nden der ?bersicht nicht dargestellt.
\begin{figure}\centering\epsfig{file=bilder/UML_Tokens.eps, width=11cm} \end{figure}

Die zuvor genannten Klassen sind in Abbildung 8.2 dargestellt. Da die Klassen einige Eigenschaften gemeinsam aufweisen, erben sie diese von der Klasse Token.java. Spezialisierungen sind in den einzelnen Unterklassen implementiert.

Damit die genannten Tokens aber erst einmal erkannt werden, liest der Tokenizer jedes einzelne Zeichen. F?r diesen Vorgang wurden zwei wichtige Methoden implementiert:

  • readChar():int
  • peekChar(int i):int
Die Methode readChar():int liest das n?chste Zeichen ein. Mit der Methode
peekChar(int i) ist es wiederum m?glich nachzuschauen, welches Zeichen als n?chstes gelesen wird, ohne es zu lesen29. Der Parameter i gibt dabei an, wie viele Zeichen »vorhergesagt« werden sollen. Der Tokenizer wurde mit einem Lookahead von zwei Zeichen implementiert, so dass i die Werte 0 und 1 annehmen kann. Zu wissen, welche Zeichen als n?chstes gelesen werden, ist beispielsweise bei der Behandlung von Sonderzeichen oder Umlauten in Dokumenten wichtig:


\begin{example} % latex2html id marker 3781Wie in Abschnitt \ref{subsection:R... ...lemotleft{} den Buchstaben \guillemotright{}?\guillemotleft{}. \par\end{example}

Die privaten Methoden readChar() und peekChar(int i) werden also f?r die Erzeugung der verschiedenen Tokens und zur Behandlung von Sonderzeichen genutzt. Der Parser selbst kann nun die erstellten Tokens verarbeiten und braucht sich nicht mehr um einzelne Zeichen zu k?mmern.

Analog zu den oben genannten Methoden f?r einzelne Zeichen stehen hierf?r folgende Methoden zur Verf?gung:

  • peekType(int i):int
    liefert den Typ des n?chsten bzw. des ?bern?chsten Tokens, ohne das weitere Zeichen aus dem Datenstrom gelesen werden m?ssen.
  • peekToken(int i):Token
    liefert das n?chste bzw. das ?bern?chste Token, ohne das weitere Zeichen aus dem Datenstrom gelesen werden m?ssen.
  • readToken():Token
    liefert das n?chste Token und veranlasst die Erzeugung eines neuen Tokens wof?r weiter Zeichen aus dem Datenstrom gelesen werden.

Die Hauptaufgabe des Tokenizers, aus dem einzulesenden Text Teilstrings zu bilden, kann mit den vorgestellten Methoden erledigt werden.


next up previous contents
Weiter: Header-Gruppe Hoch: Parser und Tokenizer Zurück: Einlesen einer Datei
Christian H?ppe, christian.hueppe@web.de