17.11.2013 Aufrufe

Skript mit Übungen - Hochschule Ravensburg-Weingarten

Skript mit Übungen - Hochschule Ravensburg-Weingarten

Skript mit Übungen - Hochschule Ravensburg-Weingarten

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!