(* Convert expressions from infix to postfix form.  Each
  expression is written on a separate line.  Expressions
  have the following syntax:

     expression = term {("+"|"=") term}.
     term =       factor {"*" factor}.
     factor =     letter | "(" expression ")". *)

MODULE postfix;

FROM InOut IMPORT Read, Write, WriteLn, Done, OpenInput;

VAR ch: CHAR;

PROCEDURE expression;
VAR op: CHAR;

 PROCEDURE factor;
 BEGIN
   IF ch = '(' THEN
     Read(ch);
     expression;
     Read(ch);
   ELSE
     Write(ch); Read(ch)
   END
 END factor;

 PROCEDURE term;
 BEGIN
   factor;
   WHILE ch = '*' DO
     Read(ch);
     factor;
     Write('*');
   END
 END term;

BEGIN
 term;
 WHILE (ch = '+') OR (ch = '-') DO
   op := ch;
   Read(ch);
   term;
   Write(op);
 END
END expression;

BEGIN
 OpenInput('TEXT');
 LOOP
   Write(' ');
   Read(ch);
   IF NOT Done THEN EXIT END;
   expression;
   WriteLn;
 END
END postfix.