class RPNError < RuntimeError
end

def rpneval(s)
    a = Array.new
    while s.length != 0
        case s
            when /^([\d.]+[eE]?[\d.]*)(.*)/
                a.push $1
            when /^([-+*\/])(.*)/
                raise RPNError, "Not enough arguments" if a.length < 2
                args = [eval(a.pop), eval(a.pop)]
                a.push eval("#{args[1]} #{$1} #{args[0]}")
            else
                raise RPNError, "Syntax error after `#{s}'"
        end
        s = $2.strip
    end
    raise RPNError, "Stack not empty" if a.length != 1
    return a.pop
end

puts rpneval(ARGV[0])
