中置記法を後置記法に変換するプログラム

https://www.spoj.pl/problems/ONP/を解くために書いたRubyのコードを、後々使えそうだからポストする。

$priority = [[['+',0],['-',1],['*',2],['/',3],['^',4]]]

def recur(s, idx)
  op_stack = Array.new
  p = idx
  while p < s.length
    c = s[p].chr
    case c
    when 'a'..'z'
      print c
    when '('
      p = recur(s, p+1)
    when ')'
      until op_stack.empty?
        print op_stack.pop
      end
      return p
    else
      while !op_stack.empty? && $priority[op_stack.last] > $priority[c]
        print op_stack.pop
      end
      op_stack.push c
    end
    p += 1
  end
  until op_stack.empty?
    print op_stack.pop
  end
end

T = gets.to_i
T.times do
  s = gets.chomp
  recur(s, 0)
  puts
end