Scanner

Aufgabe des Scanners

Aufgabe eines Scanners ist es, einen Quelltext in lexikalische Einheiten zu zerlegen oder anzuzeigen, dass eine solche Zerlegung nicht möglich ist.

x = 2
y = 3
p = 0
while y != 0:
    p = p + x
    y = y - 1
#end

Beim vorliegenden Quelltext ergeben sich folgende lexikalische Einheiten:

'x', '=', '2', 'y', '=', '3', 'p', '=', '0', 'while', 'y', '!=', '0', ':', ...

Die lexikalischen Einheiten können unterschiedlichen Mustertypen zugeordnet werden. So gibt es ein Muster, nach dem Variablenbezeichner gebildet werden. Ein weiteres Muster gibt vor, mit welchem Symbol eine Zuweisung dargestellt wird. Für jedes dieser Muster wird ein Name eingeführt, VAR für Variablenbezeichner, ZUW für das Zuweisungssymbol usw..

Ein Scanner muss also erkennen, ob sich der Quelltext so in Zeichenketten zerlegen lässt, dass alle Teilzeichenketten einem der vorgegebenen Muster zugeordnet werden können. Zudem muss er die Folge der Token bestehend aus dem Mustername und der zugehörigen Zeichenkette erzeugen:

(VAR,'x')
(ZUW,'=')
(ZAHL,'2')
(VAR,'y')
(ZUW,'=')
(ZAHL,'3')
(VAR,'p')
(ZUW,'=')
(ZAHL,'0')
(WHILE,'while')
(VAR,'y')
(UG,'!=')
(NULL,'0')
(DP,':')
...

Die Abbildung zeigt noch einmal das Verhalten des Scanners.

Scanner[1]

Damit das möglich ist, müssen alle Muster für lexikalische Einheiten präzise beschrieben werden. Wie man das mit regulären Ausdrücken macht wird in Kapitel Entwicklung eines Compilers - MiniPython genauer erläutert.

Aufgabe 1

Benutze das Simulationsprogramm, um MiniPython-Quelltexte zu scannen.

Demoprogramm[2]

Quellen

X

Fehler melden

X

Suche