home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / icon / dos / src / tests / prefix.icn < prev    next >
Text File  |  1992-02-09  |  809b  |  42 lines

  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
  42.