global stack$ expr$ = "3 4 2 * 1 5 - 2 3 ^ ^ / +" print "Expression:" print expr$ print print "Input","Operation","Stack after" stack$="" token$ = "#" i = 1 token$ = word$(expr$, i) token2$ = " "+token$+" " do print "Token ";i;": ";token$, select case 'operation case instr("+-*/^",token$)<>0 print "operate", op2$=pop$() op1$=pop$() if op1$="" then print "Error: stack empty for ";i;"-th token: ";token$ end end if op1=val(op1$) op2=val(op2$) select case token$ case "+" res = op1+op2 case "-" res = op1-op2 case "*" res = op1*op2 case "/" res = op1/op2 case "^" res = op1^op2 end select call push str$(res) 'default:number case else print "push", call push token$ end select print "Stack: ";reverse$(stack$) i = i+1 token$ = word$(expr$, i) token2$ = " "+token$+" " loop until token$ ="" res$=pop$() print print "Result:" ;res$ extra$=pop$() if extra$<>"" then print "Error: extra things on a stack: ";extra$ end if end '--------------------------------------- function reverse$(s$) reverse$ = "" token$="#" while token$<>"" i=i+1 token$=word$(s$,i,"|") reverse$ = token$;" ";reverse$ wend end function '--------------------------------------- sub push s$ stack$=s$+"|"+stack$ 'stack end sub function pop$() 'it does return empty on empty stack pop$=word$(stack$,1,"|") stack$=mid$(stack$,instr(stack$,"|")+1) end function