我们的编译器模型的最后一个步骤是代码生成器。它以编译器前端生成的中间表示(IR)和相关的符号表信息作为输人,输出语义等价的目标程序。
对代码生成器的要求是很严格的。目标程序必须保持源程序的语义含义,还必须具有很的质量。也就是说,它必须有效地利用目标机器上的可用资源。此外,代码生成器本身必须能高效运行。
具有挑战性的是,从数学上讲,为给定源程序生成一个最优的目标程序是不可判定问题码生成中碰到的很多子问题(比如寄存器分配)都具有难以处理的计算复杂性。在实践中,我们使用那些能够产生良好但不一定最优的代码的启发性技术。幸运的是,启发性技术已经非常成熟,一个精心设计的代码生成器所产生的代码要比那些由简单的生成器生成的代码快好几倍。