我对了解编译器的真正工作原理很感兴趣。我翻阅了几本书,他们都同意编译器阶段大致是这样的事实(如果我错了,请纠正我):词法分析,语法分析,语义分析,中间代码,代码优化,代码生成。词汇和语法阶段看起来非常清晰和直接的方法(但这当然并不意味着容易)。但是,我仍然无法找到语义阶段的真正组成部分。一方面,我知道应该有一些子阶段,比如范围检查、声明检查和类型检查,但一直困扰我的问题是:还有其他事情需要做吗?你能告诉我在这个阶段必须采取哪些强制性步骤吗?我知道这在很大程度上取决于编程语言和编译器实现,但你能给我一些关于 C/C++、Java 的例子吗?您能否指点我一本书/页面/文章,我可以在哪里深入阅读这些内容。谢谢。
编辑: 我看过的书是“编译器:原理、技术和工具”,Aho 和“现代编译器设计”,Grune,Reeuwijk。我无法使用它们回答这个问题。如果您发现这个问题过于宽泛,请考虑您为 C、C++ 或 Java 选择的编译器实现给出答案。