#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %begin
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 2 %integer I
int I;
// 3 %real R
float R;
// 4 %string(255) S, T, U
_imp_string255 S;
_imp_string255 T;
_imp_string255 U;
// 5 I = 123
I = 123;
// 6 I = 123 ^^ 2
I = _imp_IEXP(123, 2);
// 7 R = 3.141592653589793
R = 3.141592653589793;
// 8 R = 2 / 3.141592653589793
R = (double)(2 / 3.141592653589793);
// 9 S = "hello world"
_imp_strncpy(/*?*/ &S, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal("hello world");
(void *)&tmp;
}),
/*max:*/ 255);
// 10 S -> T.(" ").U
if (!_imp_resolve(*({
_imp_string255 tmp = S;
(_imp_string255 *)&tmp;
}),
(_imp_string255 *)/*?*/ &T, *({
_imp_string tmp = _imp_str_literal(" ");
(_imp_string255 *)&tmp;
}),
(_imp_string255 *)/*?*/ &U))
_imp_signal(7, 1, 0, "string resolution fails");
// 11 ! S." OK" -> T.(" ").U
// 12 S = "left"." "."right"
_imp_strncpy(/*?*/ &S, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal("left");
(void *)&tmp;
}),
/*max:*/ 255);
// 13 S <- "left"." "."right".T
_imp_strncpy(/*?*/ &S, ({
__typeof__(_imp_string255) tmp; /*C*/
tmp = *({
_imp_string255 tmp =
_imp_join((_imp_string *)/*?*/ _imp_str_literal_ptr("left"), (_imp_string *)/*?*/ &T);
(_imp_string255 *)&tmp;
});
(void *)&tmp;
}),
/*max:*/ 255);
// 14 S = T."right"
_imp_strncpy(/*?*/ &S, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = *({
_imp_string255 tmp =
_imp_join((_imp_string *)/*?*/ &T, (_imp_string *)/*?*/ _imp_str_literal_ptr("right"));
(_imp_string255 *)&tmp;
});
(void *)&tmp;
}),
/*max:*/ 255);
// 15 S = T.U
_imp_strncpy(/*?*/ &S, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = *({
_imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &T, (_imp_string *)/*?*/ &U);
(_imp_string255 *)&tmp;
});
(void *)&tmp;
}),
/*max:*/ 255);
// 16 %endofprogram
_imp_stop(0);
return 0;
end_0:;
}