|
Zunächst ergänzen wir die Klasse Stack aus der Folge 14 - Abstrakte Datentypen I um einige weitere Funktionen, so dass aus dem einfachen Stack eine Stackmaschine wird, die rechnen kann. Anschließend überlegen wir uns, wie man die Stackmaschine mit Hilfe eines Programmcodes, der in einer Textdatei steht, steuern kann. Nebenbei lernen Sie auch, wie man überhaupt lesend auf eine Textdatei zugreifen kann. Diese Folge wurde im Mai 2008 zum Teil völlig neu geschrieben. Eine PDF-Buchversion ist in nächster Zeit nicht geplant.
Folge 21.1: Eine Stackmaschine
Folge 21.2: Ein Codebuffer
Folge 21.3: Stackinterpreter
Erweiterungsteil: Ein graphisches Interface für den Interpreter
Liste aller Übungen zu Folge 21
Der Stackinterpreter, den wir uns in Folge 21 zusammengebastelt haben, kann nur einfache arithmetische Ausdrücke berechnen. Was bisher fehlte, sind Variablen, wie wir sie aus anderen Programmiersprachen kennen. Am Ende dieser Folge kann unser Stackinterpreter mit richtigen Variablen rechnen.
Bisher konnte unser Stackinterpreter nur rein lineare Programm abarbeiten. Wir wollen in dieser Folge den Interpreter dazu bewegen, while-Schleifen abzuarbeiten. Damit sind dann schon größere Berechnungen möglich, z.B. die Summe der Zahlen von 1 bis 10.
Folge 24: ---
freigelassen für spätere Ergänzungen
Ein Compiler ist ein Programm, das einen Text einer Quellsprache (z.B. Java) in einen Text einer Zielsprache (z.B. Maschinencode) übersetzt. Bei dieser Übersetzung arbeitet ein Compiler in mehreren Durchgängen, die in dieser Folge vorgestellt werden. Der erste Abschnitt des Übersetzungsvorgangs ist die lexikalische Analyse, dann folgt die syntaktische Analyse und schließlich die Codeerzeugung.
Wie kann man einen Bezeichner, eine int-Zahl, eine double-Zahl etc. eigentlich erkennen und auf lexikalische Korrektheit überprüfen? Hier wird das Konzept der Determinierten Endlichen Automaten vorgestellt, die zur lexikalischen Analyse eingesetzt werden. Für die Klausur- und Abiturleute gibt es einen umfangreichen Theorieteil über Nichtdeterminierte Endliche Automaten.
Im Mittelpunkt dieser Folge steht die Frage, wie man Determinierte Endliche Automaten dazu einsetzen kann, einen Java-Befehl, der aus mehreren Variablen, Zahlen und Operatoren besteht, lexikalisch zu analysieren.
Folge 28: ---
freigelassen für spätere Ergänzungen
Hier beginnen wir mit dem zweiten Teil des Compilierungs-Vorganges, der syntaktischen Analyse. Damit Sie verstehen, wie dieser Teil des Compilers überhaupt arbeitet, ist es zuvor erforderlich, sich mit den Grundlagen der kontextfreien Grammatiken vertraut zu machen. Siehe dazu auch die Abitur-Seite.
In dieser Folge wird gezeigt, was ein Parser ist und wie ein Parser nicht nur die Syntax eines Audrucks analysiert, sondern auch gleich den Code für eine Stackmaschine erzeugt.
Wir wollen nun zum Abschluss des Kurses kommen und überlegen, wie man jetzt einen funktionierenden Parser konstruieren kann, wenn eine eindeutige und kontextfreie Grammatik G vorgegeben ist.
|