File:  [CSRG BSD Unix] / 43BSD / contrib / icon / book / 19 / fix.icn
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 16:12:55 2018 UTC (8 years, 1 month ago) by root
Branches: MAIN, BSD
CVS tags: HEAD, BSD43
BSD 4.3

procedure main()
   while write(fix(read()))
end

procedure fix(exp)
   while exp ?:= 2(="(",tab(bal(')')),pos(-1))
   return lassoc(exp,'+-' | '*/') | rassoc(exp,'^') | exp
end

procedure lassoc(exp,op)
   local j
   return exp ? {
      every j := bal(op)
      form(tab(\j),move(1),tab(0))
      }
end

procedure rassoc(exp,op)
   return exp ? form(tab(bal(op)),move(1),tab(0))
end

procedure form(arg1,op,arg2)
   return op || "(" || fix(arg1) || "," || fix(arg2) || ")"
end

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.