skip to main content

kiesler.at

Spaziergang durch einen Einheitenberechner
updated by rck, 2004-10-10

Der Ernstfall ist eingetreten. EPROG. Drei Beispiele, eines schlimmer als das andere. Zu allem Überfluss sind die mitgelieferten "Unterstützungsprogramme" mehr ein Klotz am Bein als sonst was.

Wie geht's weiter, wenn kein Stein und kein Seil verfügbar ist, das einen den Weg in die Donau begleiten könnte?

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13

verify()

Mit verify prüfen wir nun, ob die einzelnen Elemente der ArrayList alle gültig sind. Ist kein klassischer Parser, weil die Reihenfolge nicht geprüft wird. Das passiert später, bei berechne(int).

91         public static void verify() throws Exception {
92                 for(int i=0; i
93                         if(     !Berechner.isValidWert((String)ausdruck.get(i)) &&
94                                 !Berechner.isValidOperator((String)ausdruck.get(i)) )
95 
96                                 throw(new Exception("Token "+i+" ('"+
97                                         (String)(ausdruck.get(i))+"') ist weder "+
98                                         "Operator noch Wert."));
99         }

Beschreibung von verify()

92: wir klappern jeden Eintrag der ArrayList ab...

93-94: ...und prüfen, ob er ein gültiger Wert oder ein gültiger Operator ist.

96-98: Nein? --> Exception! Eine Exception ist nichts anderes als ein besonderer Zustand, der mit try / catch abgeprüft werden kann. Wir landen durch dieses throw in Zeile 299 des Hauptprogramms, wo dann ein "EprogIO.println(ERROR)" ausgeführt wird. Also genau das, was wir brauchen!

isGeklammert()

Für unsere Klammernberechnung benötigen wir eine Funktion, die uns sagt, ob überhaupt geklammert ist. Diese schaut so aus:

102         public static boolean isGeklammert() throws Exception {
103                 // Annahme: Korrekt geklammert. Sollte ja mit tokenize
104                 //   gecheckt worden sein!
105 
106                 return(ausdruck.contains(new String("(")));
107         }

106: Haben wir ein "(" in unserem Ausdruck? --> true zurückliefern. Sonst: false.

Korrekter: Wir liefern zurück, ob wir ein "(" in unserer ArrayList haben.

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13



RSSComments - Make a comment
The comments are owned by the poster. We are not responsible for its content.
RSSAll Articles
2008, 2007, 2006, 2005, 2004