Die Abgabe ist bis Di, den 12.02.2012 23:59 Uhr fällig!
Für diese Aufgabe soll der mit Hilfe von von BCEL http://commons.apache.org/bcel/ (Hinweise unter http://commons.apache.org/bcel/manual.html) ein Compiler entwickelt werden. Dieser soll folgendes unterstützen:
- als Eingabe dienen mehrstellige Zahlen >= 0 inklusive beliebigen Nachkommastellen, bspw. 62.231
- Alternativ muss auch die Exponentialschreibweise unterstützt werden, bspw. 3.81E-6 (dabei gilt: positive und negative Exponenten müssen unterstützt werden)
- Addition (+) wird korrekt ausgewertet, bspw. 1.33+1.4 ergibt 2.73
- Subtraktion (-) wird korrekt ausgewertet, bspw. 2.61-1.3 ergibt 1.31
- Multiplikation (*) wird korrekt ausgewertet, bspw. 5.2*1.5 ergibt 1,8
- Division (/) wird korrekt ausgewertet, bspw. 8.4/2.8 ergibt 3
- Geklammerte Ausdrücke werden korrekt ausgewertet, bspw. (3+4)*5 ergibt 35
- ’Punkt vor Strich’ wird korrekt ausgewertet, bspw. 3+4*5 ergibt 23
- Es muss möglich sein (mehrbuchstabige) Variablen zu definieren, bspw. ahsd=…
- Zuweisungen zu Variablen sollen mit Zahlen, anderen Variablen oder eine Mischung dieser möglich sein, bspw. x=y+(3-z)
- Mehrere Ausdrücke, bspw. y=2 z=5 x=y+(3-z)
- ‘If’-‘else’-Abfragen müssen unterstützt werden
- Schachtelung soll möglich sein, d.h. so etwas wie if (…) { if (…) {}else{} }else{}
- für die If-Bedingung sollen mindestens ==, < und > in Verbindung mit Variablen, Dezimahl- oder Exponentialzahlen möglich sein
- die If-Bedingung soll beliebig komplex mit Hilfe von &, | und Klammerungen aufgebaut sein können, bspw. if ( (x < y) & 3 < z | 3.81E-6 == y ) …
- ‘While’-Schleifen müssen unterstützt werden
- für die While-Bedingung sollen mindestens ==, < und > in Verbindung mit Variablen, Dezimahl- oder Exponentialzahlen möglich sein, bspw. while x < 22 …
- Funktionen mit und ohne Parameter müssen definiert und aufgerufen werden können
- in den Funktionsrümpfen müssen alle hier aufgeführten Strukturen nutzbar sein, d.h. if, while, usw.
- rekursive Funktionsaufrufe müssen unterstützt werden, bspw. function fibu (number){ if number < 2 {number} else {fibu ( number – 1 ) + fibu ( number – 2 )} }
Für alle Funktionalitäten müssen Unit Tests mitgeliefert werden. Jede Funktionalität, für die kein Unit Test vorliegt, gilt als nicht implementiert und kann nicht bewertet werden. Diese Abgabe muss als separates Eclipse-Projekt implementiert und abgegeben werden. Sofern nicht explizit zugelassen, dürfen zusätzliche Bibliotheken Dritter nicht verwendet werden. Im Zweifel bitte bei mir rückversichern.