11.07.2015 Aufrufe

ODL-Sprachkonstrukte und interaktive Benutzerschnittstelle - TUM

ODL-Sprachkonstrukte und interaktive Benutzerschnittstelle - TUM

ODL-Sprachkonstrukte und interaktive Benutzerschnittstelle - TUM

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

60 KAPITEL 5: IMPLEMENTIERUNGration zu implementieren, muss nun lediglich eine Unterklasse von BinaryArithmetic-Expression erstellt werden, die in der Methode calculateArithmeticExpressiondie notwendige arithmetische Operation ausführt. Genau dies tun die Klassen Addition-Expression, SubtractionExpression <strong>und</strong> MultiplicationExpression. Dasentsprechende Klassendiagramm ist auf der Abbildung A.3 zu sehen.Im SableCCGenerator sind folgende Methoden für die Verarbeitung von arithmetischenAusdrücken verantwortlich: outAConstantArithmeticTerm, outAExpressionArithmeticTerm,outAArithmeticTermFactor, outAMultFactor, out-AFactorArithmeticExpression, outAPlusArithmeticExpression <strong>und</strong> out-AMinusArithmeticExpression.Neben den oben genannten arithmetischen Operationen wurde der Ausdruck size( set-Expression) implementiert, der die Größe einer Menge berechnet. Dieser Ausdruck istzwar kein echter arithmetischer Ausdruck, sondern eine Funktion, er wurde aber in der <strong>ODL</strong>-Grammatik über die Produktion arithmetic_term eingeführt, weil er, wie auch arithmetischeAusdrücke, ein ganzzahliges Ergebnis zurückliefert. Der Ausdruck wird durch die KlasseSetSizeExpression implementiert, die einen Ausdruck als Parameter erhält, <strong>und</strong> die Größeder Menge berechnet, die der Parameterausdrück als Ergebnis liefert. Da dieser Ausdruck nurauf Mengen angewandt werden darf, wird bei seiner Kompilation im SableCCGenerator inder Methode outASetSizeArithmeticTerm überprüft, ob der Parameterausdruck immerein mengenwertiges Ergebnis zurückgibt.• VergleicheIn der früheren Version von <strong>ODL</strong> war für die Auswertung von Gleichheitstermen bereits dieKlasse EqualExpression 2 vorhanden, die für zwei Ausdrücke beliebigen (aber gleichen)Datentyps feststellte, ob sie ihre Ergebnisse gleich sind. Mit den arithmetischen Ausdrückenwurden auch die Vergleichsterme eingeführt, die für zwei Ausdrücke (ebenfalls gleichen Typs)ermitteln, ob der erste größer oder kleiner als der zweite ist.Im Unterschied zum Gleichheitsterm können bei Vergleichstermen nur Werte der Typen Int<strong>und</strong> String verglichen werden, weil die entsprechenden Java-Datentypen Integer <strong>und</strong>String das Interface java.lang.Comparable implementieren (s. auch [JavaAPI]).Die nachfolgende Tabelle führt die Auswertungsklassen auf, die für Gleichheits- <strong>und</strong> Vergleichstermezuständig sind:KlasseSmallerExpressionBiggerExpressionEqualExpressionArithmetische OperationTest, ob der erste Ausdruck ein kleineres Ergebnis liefertals der zweite.Test, ob der erste Ausdruck ein größeres Ergebnis liefertals der zweite.Test, ob beide Ausdrücke gleiche Ergebnisse liefern.Wie schon für arithmetische Ausdrücke wurde für Vergleiche die gemeinsame abstrakte OberklasseComparisonExpression erstellt, die die Verwaltung der beiden Operanden einesVergleichs übernimmt.Obwohl nur Auswertungsklassen für den Größer-Vergleich <strong>und</strong> den Kleiner-Vergleich erstelltwurden, sind in <strong>ODL</strong>-Abfragen auch die Operatoren größer-gleich <strong>und</strong> kleiner-gleich möglich.Dies stellt kein Problem dar, weil ein Vergleich (a ≥ b) äquivalent zu ¬(a < b) <strong>und</strong> (a ≤ b)äquivalent zu ¬(a > b) ist, sodass die Auswertungsklassen SmallerExpression <strong>und</strong> BiggerExpression,kombiniert mit der Auswertungsklasse für die Negation, auch für die Aus-2 Trotz der etwas irreführenden Bennenung ist EqualExpression eine Unterklasse von Term.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!