Vorlesungsskript - Institut für Programmierung und Reaktive Systeme
Vorlesungsskript - Institut für Programmierung und Reaktive Systeme
Vorlesungsskript - Institut für Programmierung und Reaktive Systeme
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
2 Lexikalische Analyse<br />
Null- oder einmaliges Auftreten: Sei r regulärer Ausdruck. Dann stehe r? <strong>für</strong> r |ε,<br />
d.h. L(r?) = L(r) ∪ {ε}.<br />
Beispiel 6<br />
Der reguläre Ausdruck a + beschreibt die Menge aller nicht-leeren Wörter, die nur<br />
aus a’s bestehen.<br />
a?b ∗ beschreibt die Menge aller Wörter, die entweder nur b’s oder genau ein a <strong>und</strong><br />
dann nur b’s enthalten.<br />
Beispiel 7<br />
Betrachten wir die Regeln einer kontextfreien Grammatik <strong>für</strong> einen Ausschnitt einer<br />
Programmiersprache:<br />
stmt → if expr then stmt<br />
| if expr then stmt else stmt<br />
| ε<br />
expr → term relop term<br />
| term<br />
term → id | num<br />
In der durch diese Regeln beschriebenen Programmiersprache treten folgende Symbole<br />
auf: if, then, else, relop, id, num. Der Scanner muß diese Symbole im Eingabestrom<br />
erkennen <strong>und</strong> herausfiltern. Die Symbole werden in Form einer regulären<br />
Definition spezifiziert:<br />
if → i f<br />
then → t h e n<br />
else → e l s e<br />
relop → = | < | | >=<br />
id → letter (letter | digit) ∗<br />
num → digit + (. digit + )? (E (+ | -)? digit + )?<br />
Dabei seien letter <strong>und</strong> digit wie in Beispiel 5 definiert. num ist entweder einfache<br />
Integer-Zahl oder eine Fließkommazahl, wobei Nachkommastellen <strong>und</strong> ein positiver<br />
bzw. negativer Exponent angegeben werden können.<br />
Schlüsselwörter sollen hier nicht als Bezeichner verwendet werden dürfen. Daher wissen<br />
wir, daß bei Erkennen der Zeichenkette t h e n das Symbol then <strong>und</strong> nicht id<br />
an den Parser weitergereicht werden muß.<br />
Lexeme sind durch Leerräume getrennt, dabei sind Leerräume nicht-leere Folgen von<br />
Leerzeichen <strong>und</strong> Zeilenwechseln:<br />
delim → blank | newline<br />
sep → delim +<br />
blank <strong>und</strong> newline müssen dann in Abhängigkeit von der Implementierung interpretiert<br />
werden.<br />
28