34 lines
679 B
Plaintext
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)
|