#/*********************************************************** # postfix.rb -- 後置記法 #***********************************************************/ def readch # 1文字を読む. 空白は読み飛ばす. begin if (($ch = $stdin.getc) == nil); $ch = ?\0; return ; end end while ($ch == ?\s || $ch == ?\t) end def factor # 因子 if ($ch == ?\() readch(); expression() if ($ch == ?\)); readch(); else; print "?" ; end elsif (($ch.chr =~ /[[:graph:]]/) != nil) print($ch.chr); readch() else print('?'); end end def term # 項 factor() while (true) if ($ch == ?*) readch(); factor(); print('*') elsif ($ch == ?/) readch(); factor(); print('/') else; break; end end end def expression # 式 term() while (true) if ($ch == ?+) readch(); term(); print('+') elsif ($ch == ?-) readch(); term(); print('-') else; break; end end end begin readch(); expression() while ($ch != ?\n && $ch != ?\0) print('?'); readch() end print("\n") end while ($ch != ?\0) exit 0