FURCHURS WEBSITE
|
|||||||||||||||||||||||||||
Inhalt | Informatik | Reisen | über mich | Historie | auf dieser Seite: | ||||||||||||||||||||||||||
Fortsetzung HauptstudiumTja hier geht es weiter mit einigen Fächern aus dem Hauptstudium. |
Compilerbau Compilerbau; Java Logische Progr. Kombinatorische Opt. RSA Demo Haupstudium Teil 1 Grundstudium |
||||||||||||||||||||||||||
Praktikum Compilerbau, 6tes SemesterIn dem Fach Compilerbau, bei uns war es im 6ten Semester, haben wir in einem einfachen Beispiel-Compiler (geschrieben in Delphi) rumhantiert. Da wir keine Delphi-Kenntnisse besassen, und auch die Zeiten, in denen wir mal Pascal programmiert haben schon eine zeitlang zurücklagen, fiel es uns erst schwer uns in die doch recht zahlreichen Klassen einzuarbeiten.Um die Anfangsschwierigkeiten zu überwinden setzten wir uns erst einmal zusammen um ein Klassendiagramm für den bestehenden Compiler anzufertigen. Wir fanden es beim Programmieren der Praktikumsaufgaben als sehr hilfreich; es sparte uns eine Menge Zeit die richtigen Stellen im Code zu finden. Vielleicht bringt es Euch auch was ;o). Hier das UML-Diagramm als download. Es ist eine DIA Datei, DIA ist ein recht gutes einfaches Tool zum erstellen von UML Diagrammen. Ich hoffe, ihr habt mehr Erfolg beim ausdrucken; ich hab 4 Stunden gebraucht, um das Monstrum auszudrucken (2 DIN A3 Seiten) :o( |
Compilerbau Helge Janicke Karsten Wolke Bodo Wenker Ralf Schmid |
||||||||||||||||||||||||||
|
UML-Diagramm | ||||||||||||||||||||||||||
Ein Beispiel-Compiler in JavaIch hab mich kurz vor der Klausur noch drangemacht ein paar der Sachen in JAVA zu programmieren, die Lexikalische Analyse und die Syntax Analyse habe ich noch fertig bekommen. Vielleicht interressiert sich ja auch jemand dafür. Die Klassen und Methoden sind recht ausführlich dokumentiert und auch der Abstrakte Syntaxbaum wird graphisch dargestellt (ganz einfach natürlich). |
Beispielcompiler in Java Helge Janicke |
||||||||||||||||||||||||||
Ein Beispielprogrammprogram test declare { b : boolean; a : integer } run { if b == true then { b = false } else { a = 10 + 20 * 2 / 2 }; b = !! b; while a >= 0 do { a = a - 1; b = ! b }; for i = 0 to 100 do { b = i > 50 } } |
Beispiel Programm | ||||||||||||||||||||||||||
Starten des CompilersLadet euch einfach den ausführbaren JAR File auf die Festplatte. Wenn ihr JAVA installiert habt (JRE1.2 oder höher) startet den Compiler mit:java -jar testCompiler.jar testtest ist das zu übersetzende Programm (siehe Beispiel oben). Es wird eine graphische Oberfläche angezeigt, die auf der linken Seite alle Tokens anzeigt, rechts davon seht ihr einen Baum, das ist der Abstract Syntax Tree. Das AST tag ist dort eingetragen, die Bedeutung der Zahl findet ihr in der Datei ASTConstants.java (auch im JAR File gepackt). |
Starten des Compilers | ||||||||||||||||||||||||||
|
Download Compiler | ||||||||||||||||||||||||||
ErweiterungenVielleicht kommt auch irgendwann mal die Kontext-Analyse, die Codegenerierung und ein Interpreter dazu, aber das kostet doch alles ein paar Tage Zeit, mal sehen ob ich die mal habe ;o)Ansonsten wer sich interessiert: DO-IT-YOURSELF! Übrigens die Java-Quellen sind mit in den JAR-File gepackt, also einfach entzippen und anschauen ;o) |
Erweiterungen | ||||||||||||||||||||||||||
Logische ProgrammierungIn dem Fach Logische Programmierung geht es um die Programmiersprache PROLOG. Prolog Programme werden interpretiert, ein solches Programm besteht aus Fakten (Faktenbasis) und Regeln. Zum Beispiel:% Fakten: weiblich(anna). % Anna ist weiblich weiblich(trientje). % Trientje ist weiblich mutter(trientje, anna) % Die Mutter von Trientje ist Anna % Regel: tochter(Elternteil, Tochter) :- weiblich(Tochter), % muss weiblich sein UND ( mutter(Tochter, Elternteil); % und Elternteil ist Mutter vater(Tochter, Elternteil) ). % ODER Vater Sieht interressant aus, nicht? Der Interpreter versucht mit Backtracking eine Aussage zu beweisen, beziehungsweise Lösungen zu finden, die die Aussage erfüllen. Schön wird es dann mit Rekursion, die man alle Nase lang benötigt. Wir haben hier unsere Praktikumsaufgaben, sowie eine Projektarbeit, die sich mit dem Symbolischen Ableiten beschäftigt. Hier war die grösste Herausforderung das Zusammenfassen von Ausdrücken, das eigentliche Differenzieren ist recht einfach. |
Logische Programmierung Helge Janicke Karsten Wolke |
||||||||||||||||||||||||||
|
Download LogProg | ||||||||||||||||||||||||||
Kombinatorische OptimierungKombinatorische Optimierung --- ein äusserst interressantes Fach, in dass wir viel Zeit gesteckt haben; und bei dem wir eine Menge Spaß hatten. Es ging um Verschnittoptimierung, kürzeste Wegstrecken etc. Wir haben hier die Beispiele, die wir programmiert haben:Simplex ... ein Verfahren zur Optimierung von linearen Problemen. Das Verfahren beruht auf dem Gauss-Jordan Algorithmus mit einer speziellen Pivotsuche. Es werden die Kanten eines konvexen Polyeders durchlaufen, eine der Ecken stellt eine optimale Lösung dar, sofern eine solche existiert. In der Dokumentation steht dann noch mehr dazu (auch in den Vorlesungsmitschrieben) Blocksatz ... Hier ging es darum einen Text so zu rücken, dass das die Summe der Quadrate der Leerstellen zu einem gegebenen Rand über den gesamten Text minimiert wird. Die Aufgabe war zur Lösung des Problems Dynamische Programmierung zu verwenden. Es lässt sich wohl ähnlich wie die Kettenmultiplikation von Matrizen lösen. Unser Ansatz ist zwar dynamisch, unterscheidet sich aber von der Umsetzung von dem der Kettenmultiplikation. TSP Traveling Salesman Problem. Hier war die Aufgabe dieses allgemein bekannte Problem mit verschiedenen Algorithmen zu lösen. Wir haben uns für Branch And Bound, Great Deluge, Ant Colony Optimisation entschieden. Das besondere an dem Programm dürfte die schöne Oberfläche sein, mit der man Graphen zeichnen / oder über eine Entfernungsmatrix definieren kann. |
Kombinatorische Optimierung Helge Janicke Niels-Peter de Witt Karsten Wolke |
||||||||||||||||||||||||||
|
Download Kobinatorische Opt. | ||||||||||||||||||||||||||
RSA DemoRSA Demo ist ein kleines Programm, dass graphisch den Verschlüsselungsalgorithmus von RSA verdeutlicht. Man kann einen Satz verschlüsseln (Bob), versuchen ihn zu knacken (Eve) und natürlich auch wieder entschlüsseln (Alice). Das ganze ist ein Java-Programm, dass begleitend einen HTML Text enthält, der sich mit der rechtlichen Seite und der Theorie von RSA beschäftigt. Diese Hilfe wurde mit Latex2HTML erstellt. JRE1.4 ist aufgrund der besseren HTML Anzeige wünschenswert.
|
Helge Janicke Niels-Peter de Witt Karsten Wolke |
||||||||||||||||||||||||||
letzte Änderung dieser Seite:
Sat Jun 29 20:04:02
|