RosettaCodeData/Task/Parsing-RPN-calculator-algo.../M2000-Interpreter/parsing-rpn-calculator-algo...

37 lines
725 B
Plaintext

Module Rpn_Calc {
Rem Form 80,60
function rpn_calc(a$) {
def m=0
dim token$()
token$()=piece$(a$," ")
l=len(token$())
dim type(l)=0, reg(l)
where=-1
for i=0 to l-1
c=val(token$(i),"",m)
if m>-1 then
where++
reg(where)=c
else
reg(where-1)=eval(str$(reg(where-1))+token$(i)+str$(reg(where)))
where--
end if
inf=each(reg(),1, where+1)
while inf
export$<=token$(i)+" ["+str$(inf^,"")+"] "+ str$(array(inf))+{
}
token$(i)=" "
end while
next i
=reg(0)
}
Global export$
document export$
example1=rpn_calc("3 4 2 * 1 5 - 2 3 ^ ^ / +")
example2=rpn_calc("1 2 + 3 4 + ^ 5 6 + ^")
Print example1, example2
Rem Print #-2, Export$
ClipBoard Export$
}
Rpn_Calc