逆ポーランド記法計算機を作ってみた

  • 入力
    • 逆ポーランド記法で書いた四則演算
  • 出力
    • 計算結果

以下にコードを示す

#!/usr/bin/ruby
# 1行の逆ポーランド記法を突っ込むと
# 計算して結果を出力するプログラム
# 計算は、四則演算
print "input: "
queue = []
stack = []
queue = gets.split(" ").map do |i|
if i.to_i.to_s == i
i.to_i
else
i
end
end
while queue.length > 0
token = queue.shift
if token.class.name == "Fixnum"
# トークンがオペランドのとき
stack.push token
else
# トークンがオペレータのとき
if stack.length < 2
print "syntax error\n"
exit -1
end
op=stack.pop
if token == "+"
stack.push stack.pop + op
elsif token == "-"
stack.push stack.pop - op
elsif token == "*"
stack.push stack.pop * op
elsif token == "/"
stack.push stack.pop / op
end
end
end
# 入力トークン列の長さが0かつスタックの長さが1なら終了
if  stack.length == 1
print stack[0]
else
print "error"
end
print "\n"

トークンがオペレータのときの操作が泥臭い。もっとすっきり書けないかな?

あと、オペランドかオペレータかの判定も気持ち悪い。

言い出すとキリがないが、入力文字列の解析部分も気持ち悪い。

コメントする