RosettaCodeData/Task/Parsing-RPN-calculator-algo.../Sidef/parsing-rpn-calculator-algo...

34 lines
679 B
Plaintext

var proggie = '3 4 2 * 1 5 - 2 3 ^ ^ / +'
class RPN(arr=[]) {
method binop(op) {
var x = arr.pop
var y = arr.pop
arr << y.(op)(x)
}
method run(p) {
p.each_word { |w|
say "#{w} (#{arr})"
given (w) {
when (/\d/) {
arr << Num(w)
}
when (<+ - * />) {
self.binop(w)
}
when ('^') {
self.binop('**')
}
default {
die "#{w} is bogus"
}
}
}
say arr[0]
}
}
RPN.new.run(proggie)