OPR Blatt05 – Parser solved

Ich habe so eben die Parser-Aufgabe abgeschloßen,
sie kommt wie gefordert mit 5 Ausnahmen-”würfen” aus.

Alle Tests werden anstandslos absolviert, die Auswertung steht jedoch noch aus,
da ich den source gerade erst hochgeladen habe.
Ob noch Optimierungen durchgeführt werden können, wird sich Montag im Praktika zeigen, sei denn Ihr seht schon etwas, zögert nicht mir bescheid zu geben ;)

Einen besonderen Anreiz bei dieser Aufgabe, gab mir die Methode gibWert( ) in der Klasse OperatorAusdruck, hier habe ich auf eine Lösung nach dem Schema/Motto, Clean Code Development (CCD)  hingearbeitet.
Dank Polymorphie ist so kein If- oder Switch-Statement notwendig.
Somit steht in der Methode nur noch ein:

return RECHENOPERATION.get(this.operator).berechneWert(
this.linkerAusdruck.gibWert(ausdruck),
this.rechterAusdruck.gibWert(ausdruck));

Anstellen von mehreren Abfragen, um welchen Operator es sich den handelt.
Somit ist diese Lösung nicht nur “schöner” und objektorientiert sonder auch effizienter.

Der source code ist wie immer unter meiner github repo einzusehen.

Zu
offset = nextToken( ) ? offset + 1 : offset;
sei noch erwähnt, dass hier, wie den Kommentaren zu entnehmen, der offset bei erfolgreichem setzen eines neuen Tokens um eins erhöht wird.
Durch nextToken( ) wird der neue Token direkt bestimmt.

Auf den ersten Blick vill. nicht direkt ersichtlich (Dafür ausreichend Kommentiert) jedoch finde ich diese eine Zeile Code schöner als so:

if (nextToken( )) {
       offset++;
}

Ohne Kommentierung, wäre es genauso wenig ersichtlich und würde den Code bei weitem länger machen, da es bei jedem neu zu bestimmenden Token ausgeführt werden muß. Warum nicht in der nextToken( )-Methode auch den Offset erhöhen?
Da die Methode den nächsten Token ermittelt und dabei die Leerzeichen überspringt,
hier müsste dann jedes mal überprüft werden, ob es sich um ein Leerzeichen handelt und ob ein neuer Token gesetzt wurde. Dies geschieht jedoch direkt duch die Rekusion.
Somit nutze ich die Rekusion direkt für die “Erfolgsbestimmung” des Tokensetzens aus.

Am liebsten hätte ich es in dieser Form geschrieben:

if (nextToken( )) offset++;

Jedoch ist uns dies ja nicht gestattet…

Orobas Infopage online

Kurzmitteilung

So eben wurde die Infopage zu Orobas online gestellt.

Diese kann sich im laufe der Entwicklung an Änderungen des Projektes anpassen.

Selbstverständlich wird die Statuszeile immer auf dem aktuellen Stand gehalten.
Ausserdem gibt es ein Entwicklungsboard zum Projekt,
welches noch Änderungen unterliegt, in dem Ihr Anregungen,
Idee, Vorschläge usw. los werden, Bugs melden, mitentwickeln
oder einfach schnell News und Details zum aktuellen
Stand erfahren könnt.

Die Website und Projekt FAQ wird in kürze folgen.

About this Blog

Willkommen auf meiner Seite/ meinem Blog.

Dieser Blog wird sich hauptsächlich mit meinen Projekten beschäftigen.
Auch wird es hier Veröffentlichungen zu den Themen:

Programing, Robotics, Embedded Systems und
Computer Science im allgemeinen geben.
Ab und an auch lustige Funde aus dem Netz und Real-Live.

Im Moment befindet sich die Seite noch im Aufbau
und wird durch open source Software realisiert.
Welche jedoch später eigen entwickelte Systeme ablösen.

Dessen Entwicklung steht jedoch nicht oben auf der Prioritäten-liste,
sondern, neben dem Studium, meine Projekte.

Ich entwickle meine Software open source unter der GPL.
Meine Repositories sind auf http://github.com zu finden: http://github.com/xm6/

Es sei noch erwähnt:
Es können eventuell öfters Änderungen am Programmcode erfolgen,
da ich Student bin und somit kein „Profi“-Programmierer.
Neu erlangte Erkenntnisse werden,
wenn möglich und nützlich in den Projekten aufgenommen.
Auch bin ich für jeden Hinweis von Fehlern und/oder Optimierungen dankbar.

Selbstverständlich steht es jedem frei sich an den Projekten zu beteiligen.

Siehe auch die FAQ (coming soon)