Ü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