#!ruby -pl $;=// p="+-*/".split q=p[0,2] def g(x,c) c&&x[0]!='('?['(',x,')']:x end $_=split.inject([]){|s,x| s<<if x=~/\w/ [x] else a=s.pop b=s.pop [g(b,x=~/\/|\*/&&!(b&q).empty?),x,g(a,x=~/\//&&!(a&p[0..3]).empty?||x=~/\*|-/&&!(a&q).empty?)] end }
Note that non-ascii characters in the above source code will be escaped (such as \x9f).