next up previous
Nächste Seite: Syntaktische Analyse (24. 11.) Aufwärts: Compilerbau Vorlesung, Wintersemester 2003 Vorherige Seite: Übungen Reguläre Ausdrücke (12.

Übung Scanner-Generator flex (21. 11.)

Ü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


next up previous
Nächste Seite: Syntaktische Analyse (24. 11.) Aufwärts: Compilerbau Vorlesung, Wintersemester 2003 Vorherige Seite: Übungen Reguläre Ausdrücke (12.
Johannes Waldmann 2004-01-28