#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %CONTROL X'10000000' ; ! Decode
// _imp_control(0); /* %control is a compiler directive and does not generate code. */
// 2 %BEGIN
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 3 %INTEGERFN ACKERMANN(%INTEGER M, N)
int ACKERMANN(int M, int N) {
// 4
// 5 %RESULT = N+1 %IF M = 0
if (M != 0) goto L_0001;
return N + 1;
L_0001:;
// 6
// 7 %RESULT = ACKERMANN(M-1, 1) %IF N = 0
if (N != 0) goto L_0002;
return ACKERMANN(M - 1, 1);
L_0002:;
// 8
// 9 %RESULT = ACKERMANN(M-1, ACKERMANN(M, N-1))
return ACKERMANN(M - 1, ACKERMANN(M, N - 1));
// 10
// 11 %END
} /* end of ACKERMANN */
// 12
// 13 %INTEGER I
int I;
// 14
// 15 I = ACKERMANN(3,4)
I = ACKERMANN(3, 4);
// 16
// 17 PRINT STRING("Ackermann(3,4) = "); WRITE(I, 0); NEWLINE
_imp_PRINTSTRING(_imp_str_literal("Ackermann(3,4) = "));
_imp_WRITE(I, 0);
_imp_NEWLINE();
// 18
// 19 %ENDOFPROGRAM
_imp_stop(0);
return 0;
end_0:;
}