' The interpreter of arithmetic expressions
' (C) S. Filichev, 2001
INPUT "Arithmetic expression"; T$
T$ = T$ + "="
DIM C(20): DIM Z$(20): DIM O(20)
FOR X = 1 TO LEN(T$)
B$ = MID$(T$, X, 1)
BO = 0
IF B$ = "^" THEN BO = 1
IF B$ = "*" OR B$ = "/" THEN BO = 2
IF B$ = "+" OR B$ = "-" THEN BO = 3
IF B$ = "=" OR B$ = ")" THEN BO = 4
IF B$ = "(" THEN BO = -4
IF BO = 0 AND B$ <> " " THEN S$ = S$ + B$
IF BO <> 0 THEN
I = I + 1: Z$(I) = B$: O(I) = BO
IF S$ <> "" THEN C(I) = VAL(S$): S$ = ""
WHILE (I > 1 AND ABS(O(I - 1)) <= O(I))
IF Z$(I - 1) = "^" THEN C(I - 1) = C(I - 1) ^ C(I)
IF Z$(I - 1) = "*" THEN C(I - 1) = C(I - 1) * C(I)
IF Z$(I - 1) = "/" THEN C(I - 1) = C(I - 1) / C(I)
IF Z$(I - 1) = "+" THEN C(I - 1) = C(I - 1) + C(I)
IF Z$(I - 1) = "-" THEN C(I - 1) = C(I - 1) - C(I)
IF Z$(I - 1) = "(" THEN C(I - 1) = C(I): I = I - 1 ELSE Z$(I - 1) = Z$(I): O(I - 1) = O(I)
I = I - 1
WEND
END IF
NEXT
PRINT C(1)