FURCHURS WEBSITE
m@il schicken
Inhalt |  Informatik  |  Reisen |  über mich |  Historie auf dieser Seite:

Fortsetzung Hauptstudium

Tja 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 Semester

In 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
Dokument Beschreibung download
Compilerbau UML Diagramm (DIA-Format)
UML-Diagramm

Ein Beispiel-Compiler in Java

Ich 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 Beispielprogramm

program 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 Compilers

Ladet 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 test
	
test 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
Datei Beschreibung download
testComiler.jar Ausführbarer JAR File des Compilers

Download Compiler

Erweiterungen

Vielleicht 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 Programmierung

In 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
Datei Beschreibung download
praktikum.zip Die Aufgaben aus dem Praktikum
SymbDiff.zip Symbolisches Differenzieren
SymbDiff.pdf Symbolisches Differenzieren Dokumentation

Download LogProg

Kombinatorische Optimierung

Kombinatorische 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.
Die Algorithmen können schrittweise ausgeführt werden, wobei die (Zwischen) Ergebnisse auf verschiedene Arten graphisch dargestellt werden. Das Programm enthält eine Online Hilfe und benötigt JRE1.4 (Erhältlich bei java.sun.com).

Kombinatorische Optimierung

Helge Janicke
Niels-Peter de Witt
Karsten Wolke
Datei Beschreibung download
Simplex.zip Eine Implementation des Simplex-Algorithmus in Java
Blocksatz.zip Dynamische Progammierung, Randoptimierung
Blocksatzfortran.zip Dynamische Progammierung, Randoptimierung (ForTran)
Blocksatz.pdf Blocksatz Dokumentation
TSP.zip Travelling Salesman mit Branch & Bound, Deluge, Ants
JAR File benötigt JRE1.4
TSP.pdf TSP Dokumentation
Vorlesungsscript.pdf Einige Mitschriebe als PDF

Download Kobinatorische Opt.

RSA Demo

RSA 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.


Datei Beschreibung download
RSADemo.zip Die RSA-Verschlüsselung, JAR-File

Helge Janicke
Niels-Peter de Witt
Karsten Wolke
letzte Änderung dieser Seite:  Sat Jun 29 20:04:02
nach oben