39 lines
1.0 KiB
Plaintext
39 lines
1.0 KiB
Plaintext
@% = &60B
|
|
RPN$ = "3 4 2 * 1 5 - 2 3 ^ ^ / +"
|
|
|
|
DIM Stack(1000)
|
|
SP% = 0
|
|
|
|
FOR i% = 1 TO LEN(RPN$)
|
|
Token$ = MID$(RPN$,i%,1)
|
|
IF Token$ <> " " THEN
|
|
PRINT Token$ " :";
|
|
CASE Token$ OF
|
|
WHEN "+": PROCpush(FNpop + FNpop)
|
|
WHEN "-": PROCpush(-FNpop + FNpop)
|
|
WHEN "*": PROCpush(FNpop * FNpop)
|
|
WHEN "/": n = FNpop : PROCpush(FNpop / n)
|
|
WHEN "^": n = FNpop : PROCpush(FNpop ^ n)
|
|
WHEN "0","1","2","3","4","5","6","7","8","9":
|
|
PROCpush(VALMID$(RPN$,i%))
|
|
WHILE ASCMID$(RPN$,i%)>=48 AND ASCMID$(RPN$,1)<=57
|
|
i% += 1
|
|
ENDWHILE
|
|
ENDCASE
|
|
FOR j% = SP%-1 TO 0 STEP -1 : PRINT Stack(j%); : NEXT
|
|
PRINT
|
|
ENDIF
|
|
NEXT i%
|
|
END
|
|
|
|
DEF PROCpush(n)
|
|
IF SP% > DIM(Stack(),1) ERROR 100, "Stack full"
|
|
Stack(SP%) = n
|
|
SP% += 1
|
|
ENDPROC
|
|
|
|
DEF FNpop
|
|
IF SP% = 0 ERROR 100, "Stack empty"
|
|
SP% -= 1
|
|
= Stack(SP%)
|