|
|
1.1 ! root 1: # ! 2: # I N F I X - T O - P R E F I X C O N V E R S I O N ! 3: # ! 4: ! 5: # This program accepts infix expressions from standard input and ! 6: # writes the corresponding prefix expressions to standard output. ! 7: ! 8: procedure main() ! 9: while write(prefix(read())) ! 10: end ! 11: ! 12: procedure prefix(s) ! 13: s := strip(s) ! 14: return lassoc(s,'+-' | '*/') | rassoc(s,'^') | s ! 15: end ! 16: ! 17: procedure strip(s) ! 18: while s ? (="(" & s <- tab(bal(')')) & pos(-1)) ! 19: return s ! 20: end ! 21: ! 22: procedure lassoc(s,c) ! 23: local j ! 24: s ? every j := bal(c) ! 25: return form(s,\j) ! 26: end ! 27: ! 28: procedure rassoc(s,c) ! 29: local j ! 30: return form(s,s ? bal(c)) ! 31: end ! 32: ! 33: procedure form(s,k) ! 34: local a1, a2, op ! 35: s ? { ! 36: a1 := tab(k) ! 37: op := move(1) ! 38: a2 := tab(0) ! 39: } ! 40: return op || "(" || prefix(a1) || "," || prefix(a2) || ")" ! 41: end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.