Skript mit Übungen - Hochschule Ravensburg-Weingarten
Skript mit Übungen - Hochschule Ravensburg-Weingarten
Skript mit Übungen - Hochschule Ravensburg-Weingarten
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
3.6 Der Lexical Analyzer Lex<br />
Lex, bzw. FLEX ist ein sogenannter Lexical Analyzer. Er kann dazu verwendet werden, für<br />
reguläre Sprachen das Wortproblem zu lösen, das heisst, zu entscheiden, ob ein vorgegebenes<br />
Wort zu einer Sprache L gehört. Lex kann daneben sogar noch erkannte Wörter ersetzen<br />
entsprechend definierten Regeln.<br />
Das Ersetzen von Ausdrücken der Form<br />
Tel.: 0751/501-721<br />
durch Ausdrücke der Form<br />
Phone: ++49-751-501-721<br />
kann durch folgendes Lex-Programm erfolgen.<br />
Die Datei tel.x:<br />
%option noyywrap<br />
%%<br />
Tel\.?:[ \t]+0 printf("Phone: ++49-");<br />
[0-9](\/|-)[0-9] printf("%c-%c", yytext[0],yytext[2]);<br />
\n printf("\n");<br />
Anwendung des fertigen Programms tel liefert:<br />
> tel<br />
Tel.: 0751/501-9721<br />
Phone: ++49-751-501-9721<br />
Tel.: 075qt1/501-9721<br />
Phone: ++49-75qt1-501-9721<br />
quit<br />
quit<br />
^D<br />
Aufruf von Lex <strong>mit</strong> Quelldatei tel.x:<br />
flex -otel.c tel.x<br />
cc -lfl tel.c -o tel<br />
tel<br />
der generelle Aufbau eines Lex-Programms (und auch eines Yacc-Programms) ist:<br />
Definitionen<br />
%%<br />
Regeln<br />
%%<br />
Funktionen<br />
3.7 Yacc: Yet Another Compiler Compiler<br />
Yacc ist ein Programmgenerator, der aus einer kontextfreien Grammatik ein Programm<br />
generiert, das die Korrektheit der eingegebenen Worte prüft, das heisst das Wortproblem<br />
entscheidet. Yacc wird hauptsächlich dazu verwendet, Parser für Programmiersprachen automatisch<br />
zu erzeugen. Er kann also nicht nur die Syntax von Programmiersprachen checken,<br />
sondern auch Code generieren. Dies führt jedoch hier zu weit.<br />
67