Compilerbauhome Compilerbau: JLex / JFlex Prof. Dr. Uwe Schmidt FH Wedel

JLex / JFlex

weiter

weiter

Scanner Generator

JLex
erzeugt aus einer Liste von regulären Ausdrücken eine Java-Klasse.
weiter
ist in Java implementiert.
weiter
ist eine Weiterentwicklung von JLex, die bis auf Kleinigkeiten mit der gleichen Eingabesyntax arbeitet.
lex, flex
besitzt im Wesentlichen die gleiche Funktionalität wie die Scanner-Generatoren für C.
weiter
Rahmen
für die Umgebung, in die der erzeugte Scanner eingebettet ist
 
reiner Java Code für die Token-Klasse und die Umgebung
weiter
Direktiven
zur Parametrisierung der erzeugten Java-Klassen
 
%class      Scanner        // erzeugte Klasse
%function   nextSymbol     // Methode für nächstes Symbol
%type       Token          // Symbol Klasse
weiter
Makros
für gemeinsame Teilausdrücke in den regulären Ausdrücken
 
digit=[0-9]
digits={digit}+
weiter
gut
bessere Wartbarkeit
weiter
Token
typische Token Klasse
 
class Token {
    int symbol;
    int line;
    String text;
}
weiter
Variable: yytext, yyline, ...
vordefinierte Variablen für die Zeichenreihe des aktuellen Symbols,
für die momentane Zeilen- und Spaltennummer
...
weiter
Aktionen
Java-Anweisungen für die Aktionen, nachdem ein Symbol erkannt worden ist
weiter
für einen Scanner für 4 Symbole
weiter
Scanner- Zustände
Erweiterung
weiter
merke
reguläre Ausdrücke für komplexere syntaktische Konstrukte sind nicht einfach zu entwickeln
weiter
merke
Immer Suche nach der längsten Zeichenreihe für einen R.E.
weiter
Beispiel
Kommentare mit mehreren Zeichen als Anfangs- und Ende-Klammern
 
/* ... C ... */ .... /* ... */
 
<!-- .... html ... -->
weiter
R.E.
falsch
 
"/*"(.|\n)*"*/"
weiter
R.E.
richtig (???)
 
"/*"(\n|[^*]|"*"+[^/])*"*/"
 
Test: /***/
weiter
merke
Ähnliche Probleme bei Text-Konstanten und Ersatzsequenzen
weiter
Lösung
Aufteilen eines Scanners in mehrere kleine Scanner (endliche Automaten) und kontrollierte Übergänge zwischen den einzelnen Automaten
weiter
Beispiel
  1. "normaler" Automat
  2. Automat für Kommentare
  3. Automat für Text-Konstanten
weiter
Beispiel
für HTML
  1. Automat für Text
  2. Automat für Kommentare
  3. Automat für Tags
  4. Automat für DTDs
weiter
Kommentar
aus C mit regulären Ausdrücken
 
"/*"       Kommentar-Anfang
"*/"       Kommentar-Ende
.|\n       ein Kommentarzeichen
weiter
für einen einfachen HTML Scanner
weiter

Letzte Änderung: 27.11.2012
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel