Übung zu flex (21. 11. 03)
Id: uflex.tex,v 1.1 2003/11/20 14:58:36 joe Exp
Finden Sie flex? Falls nicht, dann (bash-Syntax)
export PATH=$PATH:/usr/local/share/bin export MANPATH=$MANPATH:/usr/local/share/man
flex benutzen
Ein Scanner, der Folgen von ab erkennen
(und zählen) soll (in ein File scanner.l)
%{
#include <string.h>
#include <stdio.h>
%}
%%
"ab"+ { fprintf (stdout, "%d ",
strlen (yytext)); }
. /* ignore */
%%
int yywrap () {
return 1;
}
int main ( int argc, char ** argv ) {
yylex ();
fprintf (stderr, "\n");
}
Make-Regeln für flex
im Makefile:
CC = gcc
LEX = flex
%.c : %.l
$(LEX) -t $< > $@
(die Regel ist tatsächlich schon als Default-Regel eingebaut)
Den flex-Scanner analysieren
Id: einzel.tex,v 1.2 2003/11/20 23:47:56 joe Exp
Scanner herstellen mit gmake scanner
Testen mit echo 'abaababbababba' | ./scanner
Konstruieren Sie von Hand einen endlichen Automaten für den Scanner.
Vergleichen Sie mit dem von flex konstruierten.
Benutzen Sie passende debug-Optionen.
Scanner für Java
Id: java.tex,v 1.1 2003/11/20 23:47:56 joe Exp
Schreiben Sie einen flex-Scanner für (eine Teilmenge von) Java.
Wählen Sie dazu passende Tokenklassen und jeweils einen regulären Ausdruck.
Ergänzen Sie http://www.imn.htwk-leipzig.de/~waldmann/ws03/compilerbau/programme/scanner/java.l
Hinweis: dieser Scanner wird später nochmal verwendet