%% -*- mode: latex; TeX-master: "compilerbau.tex"; -*-

\begin{slide}{Scanner mit Flex (I)}

\kopf{$ $Id: flex.tex,v 1.1 2011-10-16 14:06:16 waldmann Exp $ $}

Das Programm \verb|flex| erzeugt aus einer Scanner-Beschreibung
einen Scanner (ein C-Programm).

Wie beschrieben wird aus regulären Ausdrücken $X_i$
ein (markierter) deterministischer Automaten $A$ bestimmt.

Beim Feststellen eines matches kann eine Aktion ausgeführt werden
(default: String ausgeben).

Bei mehreren gleichlangen matches wird der (im Quelltext) erste genommen.

Damit der Scanner niemals hängt, gibt es einen Default-Tokentyp,
der (zuletzt) jedes einzelne Zeichen matcht (und ausgibt).

\end{slide}


\begin{slide}{Scanner mit Flex (II)}
\begin{verbatim}
DIGIT   [0-9]
%%
DIGIT+  { fprintf (stdout, "%s", yytext); }
" "+    { fprintf (stdout, " "); }
"\n"    { fprintf (stdout, "\n"); }
%%
int yywrap () { return 1; }
int main ( int argc, char ** argv ) { yylex (); }
\end{verbatim}
Aufruf mit \verb|flex -t simple.l > simple.c|. Optionen:
\begin{itemize}
\item \verb|-T| (Table) zeigt Automatentabellen
\item \verb|-d| (debug), 
\item \verb|-f| (fast) ohne Tabellen-Kompression
\end{itemize}

\end{slide}
