All posts by Albert Zündorf

Compiler Construction, WS0910

Please implement the following extensions to your interpreter:

  • identifiers longer than one character
  • floating point numbers

To do this, you have to implement a simple scanner, as demonstrated in the lecture. Create a Token class which contains information about a word. Tokens are created by the scanner using a finite automaton and then interpreted by the parser. As usual, create tests first!

I was asked what the criteria for evaluation of the homeworks are. The tests are very important, as is a consistent and readable code style. If the functionality is complete and working, and the tests make sense and cover most of the implementation, you will get full score. Comments are welcome, but not required, and I prefer meaningful method and variable names. In extreme cases, I may deduct points for code I’m not able to comprehend, so keep it simple 🙂

Software Engineering I, WS0910

Wie bereits in der Vorlesung erwähnt und in der Vorlesungsbeschreibung angemerkt erwarten wir das jede Gruppe 2 Produkte abliefert:

1. Einen GUI Client für L&S

2. Einen KI Client für L&S

Der GUI Client soll einem menschlichen Spieler ermöglichen die Rolle eines Gottes bei L&S wahrzunehmen. Dazu gehören insbesondere die Anzeige der Spielwelt (Grafiken werden geliefert, können aber geändert werden), Visualisierung von beliebigen Statusinformationen auf der Karte und die Möglichkeit Wunder zu wirken. Der Server verbietet GUI Clients übrigens das direkte Steuern von Arbeitern.

Der KI Client soll das kollektive Bewusstsein der Anhänger einer Religion / Programmiersprache sein. Er steuert jeden einzelnen Arbeiter, koordiniert den Ausbau von Siedlungen und entsendet Prediger in andere Dörfer um sie zu übernehmen. Da niemand weiß welche Widrigkeiten auf die Gläubigen zukommen können sollte die KI möglichst flexibel sein und durch die Kommunikation mit dem GUI Client den Wechsel unterschiedlicher Spielstrategien ermöglichen.

Für beide Clients gilt die beschriebene Spielmechanik.

Auserdem gibt es verschiedene technische Anforderungen:

  • Jede Gruppe nutzt die IDE Eclipse und Programmiert in Java (nur falls das jemand mit der Gleichsetzung von Religionen und Programmiersprachen in L&S verwechselt hat)
  • Für die Kommunikation mit dem Server empfehlen wir Apache MINA
  • Mehrere GUI Clients sollen sich gleichzeitig einloggen können. Der Server ist dahingehend bereits getestet.
  • Die GUI Technologie steht euch frei. Das ist Segen und Fluch zugleich – ein paar Vorschläge: Swing, JavaFX, Java2D, jME, GWT …  hat  jemand Lust für Android zu entwickeln?
  • Der KI Client muss headless laufen, da er auf einem Server 24/7 deployed wird (ihr erhaltet ssh Zugriff auf eine Linux VM oder hostet die KI selber)
  • es kann nur ein KI Client gleichzeitig laufen
  • die GUI Clients sollen die KI Clients beeinflussen können

Natürlich erwarten wir nur sorgfältig getestete und dokumentierte Releases mit einer Präsentation zu jedem Sprint.

Die Gruppenkommunikation erfolgt über die Mailinglisten des GForge, damit alle die Diskussion mitbekommen.

Software Engineering I, WS0910

Die Tutorien sind essentiell wichtiger Bestandteil der Vorlesung, schließlich geht es um Teamarbeit und die können wir nur beurteilen wenn wir sehen ob und wie ihr zusammenarbeitet:

  • Zwei Maliges unangekündigtes Fehlen während der Gruppentreffen wird als nicht bestanden gewertet.
  • Wenn ihr bis 20h am Vortag kommuniziert das ihr fehlen werdet und alle Teammitglieder und die Tutoren davon in Kenntnis gesetzt sind gilt das nicht mehr als unangekündigt, aber die anderen Gruppenmitglieder können und werden sich eine Strafe ausdenken.

Zur Kommunikation sei noch einmal auf die -discussion Mailinglisten des GForge hingewiesen.

Software Engineering I, WS0910

Jedes LaTeX Dokument gliedert sich mindestens in 2 Teile: die sog. Präambel und das eigentliche Dokument. In der Präambel stehen die Konfigurationseinstellungen für das LaTeX Dokument die durch das laden von Packages die Generierung beeinflussen:

documentclass[10pt, a4paper]{article} % 10pt schriftgröße, DIN A4, Artikel
usepackage[german,ngerman]{babel}     % deutsche rechtschreibprüfung
usepackage[utf8]{inputenc}            % utf8 codierte .tex dateien
usepackage[T1]{fontenc}               % korrekte umlaute im ausgabedokument
PrerenderUnicode{äüößÄÜÖß–}           % damit man auch umlaute im pdf titel und autor benutzen kann
usepackage{times}                     % Umstellung auf Schrift Times, Wichtig für gute PDF Qualität.
usepackage{graphicx,float,enumerate}  % grafikformate
usepackage{graphics}                  % grafikformate
usepackage{natbib}                    % "deutsch" formatierte bibliographieeinträge ermöglichen
usepackage[
pdftex,
a4paper,
bookmarks,
bookmarksopen=true,
bookmarksnumbered=true,
pdfauthor={TODO},                      % Autoren eintragen
pdftitle={TODO},                       % Titel des Dokuments eintragen, wenn leer = dateiname
colorlinks=true,
linkcolor=black,
anchorcolor=black,
citecolor=black,
filecolor=black,
menucolor=black,
urlcolor=black
]{hyperref}                            % hyperlinks immer schwarz und im PDF anklickbar machen

begin{document}
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit ametfootnote{url{http://www.loremipsum.de/}}.

bibliography{mybib}                   % bibliographie aus "mybib.bib" lesen
bibliographystyle{dinat}              % "deutsch" formatierte bibliographieeinträge

end{document}

Die Zeilen sind kommentiert und sollten damit selbsterklärend sein. Mehr Informationen findet ihr in den Wikibooks.

Soweit der Vorschlag für die “Konfiguration”. Den Inhalt organisiert man dann über section, subsection … Es gibt noch mehr Möglichkeiten, z.B. die Generierung eines Glossars / Indexes, aber das wäre eine Aufgabe für den LaTeX Experten in der Gruppe.

Compiler Construction, WS0910

Requirements for the second homework:

  • parse variables
  • interpret assignments and keep a symbol table
  • treat assignments as expressions, i.e. handle statements such as “x = y = 5”

As usual, follow a test-driven programming style, and write unit test for each feature of your interpreter.

Hint: use the grammar given in the lecture to check your interpreter logic.

block ::= stat*
stat ::= expr | assign
assign ::= name '=' expr
expr ::= term ('+'|'-' term)*
term ::= factor ('*'|'/' factor)*
factor ::= number | '(' expr ')' | name
number ::= '0'...'9'
name ::= 'a'...'z' | 'A'...'Z'

When handling assignments like expressions, you have to extend this grammar in some way.