07.02.2013 Aufrufe

Vorlesungsskript - Institut für Programmierung und Reaktive Systeme

Vorlesungsskript - Institut für Programmierung und Reaktive Systeme

Vorlesungsskript - Institut für Programmierung und Reaktive Systeme

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!