Kalkulator stosowy

Kalkulator stosowy to maszyna, na której można zadać ciąg instrukcji. Maszyna w każdym momencie posiada stos liczb, początkowo pusty. Operacje są następujące:

PUSH <liczba> --- wrzuca na wierzch stosu nową liczbę (można założyć, że jest nieujemna)
POP --- zrzuca najwyższą liczbę.
ADD --- zrzuca dwie najwyższe liczby i wrzuca ich sumę.
SUB --- zrzuca dwie najwyższe liczby i wrzuca ich różnicę (najwyższa minus druga).
MUL --- zrzuca dwie najwyĹźsze liczby i wrzuca ich iloczyn.
DIV --- zrzuca dwie najwyĹźsze liczby i wrzuca ich iloraz (najwyĹźsza przez druga).
NEG --- zrzuca najwyższą liczbę i wrzuca jej liczbę przeciwną.

W ten sposób, program to string z kolejnymi instrukcjami, przedzielonymi białymi znakami. Zaimplementuj funkcjonalność, w której dla danego stringa można zasymulować działanie kalkulatora na nim i wypisać na wyjście końcową zawartość stosu. Program powinien sprawdzać poprawność danych wejściowych i wyrzucać następujące wyjątki:
  - Nieprawidłowy format wejścia --- jakiś niezrozumiały token pojawił się na wejściu, np. nie było liczby zaraz po PUSH.
  - Pusty stos --- kalkulator próbuje zrzucić element z pustego stosu.
  - Overflow lub underflow --- wynik operacji nie jest pomiędzy minint a maxint.
  - Dzielenie przez zero --- jak w nazwie.
Napisz prostą metodę main, która sprawdzi Twoją implementację na kilku przykładach. Użyj wyrażenia try { ... } catch { ... } w swoim kodzie. 

Termin oddawania: 6 maja, początek laboratorium.