#include <perms.h>

//          Edinburgh IMP77 Compiler - Version 8.4
//
//     1  !%permintegerfnspec  int pt(%real r)
//     2  %begin

int main(int argc, char **argv) { /*%begin*/
  _imp_initialise(argc, argv);

  //     3    %integer x

  int X;

  //     4
  //     5    x = 2 * 3 + 4       ;! no extra brackets when Imp precedence matches C precedence

  X = 2 * 3 + 4;

  //     6    x = 2 + 3 * 4       ;! no extra brackets when Imp precedence matches C precedence

  X = 2 + 3 * 4;

  //     7    x = 2 + 3 * 4 + 5   ;! no extra brackets when Imp precedence matches C precedence

  X = 2 + 3 * 4 + 5;

  //     8
  //     9    x = 2 * ( 3 + 4)    ;! explicit brackets are honoured

  X = 2 * (3 + 4);

  //    10    x = (2 * 3) + 4

  X = 2 * 3 + 4;

  //    11
  //    12    x = 1 & 2 + 3 & 4   ;! an Imp to C gotcha!

  X = (1 & 2) + (3 & 4);

  //    13
  //    14    x = 123 & 12 + 234 ! 23 * 345 !! 34 - 45 - INTPT(1.5 ^ 2 / 5.0) << 2 >> 3 ^^ 2 ^^ 2

  X = (((123 & 12) + 234 | 23 * 345) ^ 34) - 45 -
      _imp_IEXP(_imp_IEXP((unsigned int)_imp_INTPT((double)(_imp_REXP(1.5, 2) / 5.0)) << 2 >> 3, 2), 2);

  //    15
  //    16  %endofprogram

  _imp_stop(0);
  return 0;
end_0:;
}