separate intermediate code generation into several modules