This compiler was first implemented for generating a TSR (terminate and stay resident) program under MsDosTM for my family of microterminals  connected to a PC. The generated code could not be C (at that time), for there was no freely available C compiler for doing the "second phase" translation. I was supposed to generate masm-compatible assembly language.
The compiler was also required to communicate with a tiny multitasker, responsible for making the PC console available for other tasks, while doing all processing on the background. So the code had to be full reentrant (several terminals could be running it at the same time), with a separate stack and variable data segment areas, but with common literals area.
I had to disassembly a 2'' high pile of listings, to understand how to make this work inside MsDosTM, so no operation (even "puase" key) could make the system unavailable at the background, or the microterminals would not run.
The compiler was tiny, and accept only a subste of ANS-74 standard, but could easily be expanded to full compliance. There were no "MOVE CORRESPONDING" nor "ALTER" statements, as most of Cobol programmers (our customers) didn't require them. There were no report generating functions also, because of the size constraints. We were supposed to run only with the first 640KB of memory, (I couldn't put at that time interrupts servicing outside that space) while leaving sufficient space for running the "foreground" applications.
I hope everyone understand now why this crappy thing had so much restrictions. Now, as we're moving to Linux, we will do much more, as there are none of those restrictons anymore.