Implementation eines s 20. April 2005
Vorlesungen Vorlesungen, die nützliche für das Praktikum liefern: Automaten, Formale Sprachen und Berechenbarkeit bau Abstrakte Maschinen Programm-Optimierung
Fertigkeiten Folgende Fähigkeiten sind notwendig für ein problemloses Bestehen dieses Praktikums: Gute Kenntnisse in Java Kenntnis der Sprache C Abstraktionsvermögen Vorteilhaft für die Bearbeitung der n sind zudem Kenntnisse in: Theorie der Übersetzergenerierung Werkzeuge des Übersetzerbaus (lex, yacc, jflex, cup)
Regelmäßige Treffen mittwochs um 15:00 im Raum MI 02.07.014. Unsere Ziele sind 1 Verdeutlichung der Problemstellung 2 Einarbeitung in die Werkzeuge für bau 3 Implementation eines Frontends für Kontrollflussgraphen 4 Realisierung von Optimierungen
n Für die Bearbeitung der n empfehlen wir die Bildung von Teams zu je zwei Leuten, die Abgabe der n darf gemeinsam erfolgen. Bei den Mittwochstreffen werden wir die gestellten n und Teilschritte besprechen, und anhand von abgegebenen Beispielen genauer auf Probleme und Erfolge eingehen. Die Abgabe erfolgt wöchentlich bis zum Dienstag um 12:00, dann werden die n korrigiert. Für Fragen stehen und Raphael Geissler unter der Woche und im Praktikum zur Verfügung.
Wiederholung der Thematik Nachdem nicht sichergestellt ist, dass alle Praktikumsteilnehmer die Gelegenheit hatten, die Vorlesung bau zu besuchen, soll dieses Kapitel für die notwendigen Grundkenntnisse sorgen.
eines s Quellcode Tokenstrom Syntaxbaum Semantischer Analysator annotierter Baum Flussgenerator Metacode Optimierer Metacode Der Umwandlungsvorgang gliedert sich in verschiedene Phasen: 1 lexikalische Analyse 2 syntaktische Analyse 3 semantische Analyse 4 Zwischencode Generierung 5 Optimierung 6 Code Generierung Zielcodegenerator Zielcode
Lexikalische Analyse begin x := 12 + uhrzeit ( 4:00 ) ; end... Literal 12 Operator := Identifier x Keyword BEGIN
Syntaktische Analyse... Literal 12 Operator := Identifier x Program Assignment Addition x 12 Functioncall Keyword BEGIN uhrzeit 4:00
Semantische Analyse x int Program Assignment 0x01 Addition 12 Functioncall int uhrzeit 4:00 int(char *) char *
Codegenerierung x int Program Assignment 0x01 Addition 12 Functioncall int uhrzeit 4:00 loadc 0x01 loadc 12 loadc 0x02 loadc 0x10 call add store ret int(char *) char *
Als Quellsprache für den Übersetzer in diesem Praktikum dient, wie es vom Standardisierungskomitee definiert wurde. Als kompaktes Nachschlagewerk dürfte für die Bedürfnisse dieses Praktikums das Buch The C Programming Language von Brian W. Kernighan und Dennis M. Ritchie vom Verlag Prentice-Hall in Kombination mit Rationale for ANSI Systems - C völlig ausreichen.
Kontrollfluss Das Ziel dieses Praktikums ist es, aus korrektem C-Code Kontrollflussgraphen zu generieren. Kontrollflussgraphen eignen sich gut als Ausgangspunkt für Datenflussanalysen und optimierende Programmtransformationen.
Einstiegsaufgabe Ziel ist es, mit Java ein einfaches Taschenrechnerprogramm zu schreiben. Der Rechner soll die Grundrechenarten + /% beherrschen. Die Eingabe zu diesem Rechner können Sie wahlweise über Eingabedateien, die Eingabeaufforderung oder Eingabeströme realisieren. 1 Schreiben Sie ein Programm, dass gültige arithmetische Ausdrücke erkennt. 2 Modifizieren Sie dieses Programm so, dass arithmetische Ausdrücke ausgerechnet werden können. 3 Versuchen Sie, Ihren Taschenrechner mit einer Behandlung von Klammerausdrücken auszustatten. Hinweis: Verwenden sie dazu keinen generator.