Mimořádná domácí úloha z předmětu PB162

Tato domácí úloha je určena pro studen, kteří behěm semestru nezískali plný počet bodů za domácí úlohy. Úloha bude hodnocena bodovým ziskem v  intervalu (0,4> tak, aby celkový bodobý součet za domácí úkoly nepřesáhl 32 bodů. Termín odevzdání je 20.1. 2008.

 

Zadání

Napište třídu PostfixEvaluatorImpl, která bude implementovat rozhraní PostfixEvaluator. Jejím úkolem bude provést vyhodnocení výrazu v postfixové notaci, tj. výrazů ve tvaru:

operand operand operátor

kde operandem může být opět výraz.

Vyhodnocování postfixových výrazů probíhá následovně:

1. Dokud je nějaký element (operand/operátor) na vstupu

  1. Vezmeme element ze vstupu
  2. Pokud se jedná o operand, uložíme jej na zásobník.
  3. Pokud se jedná o operátor vybereme ze zásobníku tolik operandů, kolik jich je zapotřebí k probedení příslušné operacem, operaci provedeme a výsledek uložíme na zásobník
  4. Pokud není na zasobníku potřebný počet operandů, nejedná se o korektní výraz a je vyvolána výjimka.

2. Pokud je na zásobníku více jak jedna hodnota, jednalo se o nekorektní postfixový výraz a je vyvolána výjimka.

3. Vypíšeme hodnotu, která je na uložena na zásobníku.

 

Kromě metod popsaných v rozhraní PostfixEvaluatorImp můžete vytvořit libovolný počet neveřejných pomocných metod. Konstruktor má hlavičku:

PostfixEvaluatorImpl(Reader in) throws PostfixException

Příslušná výjimka je vyvolána v případe, že při načítání výrazu došlo k vstup-výstupní chybě. Nezapomeňte výjimce nastavit chybovou zprávu, a pokud je reakcí na jinou výjimku, potom i příčinu.