编译器设计 - 编译器的阶段
编译过程是一系列不同的阶段。每个阶段都从其前一阶段获取输入,具有自己的源程序表示,并将其输出提供给编译器的下一阶段。让我们了解编译器的各个阶段。

词法分析
扫描器的第一阶段用作文本扫描器。此阶段将源代码扫描为字符流并将其转换为有意义的词素。词法分析器以标记的形式表示这些词素:
<token-name, attribute-value>
语法分析
下一个阶段称为语法分析或解析。它将词法分析产生的标记作为输入并生成解析树(或语法树)。在此阶段,将根据源代码语法检查标记排列,即解析器检查标记所作的表达式在语法上是否正确。
语义分析
语义分析检查构建的解析树是否遵循语言规则。例如,值分配是在兼容数据类型之间进行的,并将字符串添加到整数。此外,语义分析器会跟踪标识符、它们的类型和表达式;标识符是否在使用前声明等。语义分析器生成带注释的语法树作为输出。
中间代码生成
经过语义分析后,编译器会为目标机器生成源代码的中间代码。它代表某个抽象机器的程序。它介于高级语言和机器语言之间。应以某种方式生成中间代码,使其更容易被翻译成目标机器代码。
代码优化
下一阶段对中间代码进行代码优化。优化可以被认为是删除不必要的代码行,并安排语句序列以加快程序执行速度而不浪费资源(CPU,内存)。
代码生成
在此阶段,代码生成器采用中间代码的优化表示并将其映射到目标机器语言。代码生成器将中间代码转换为(通常)可重新定位的机器代码序列。机器代码指令序列执行的任务与中间代码相同。
符号表
它是在编译器的所有阶段维护的数据结构。所有标识符的名称及其类型都存储在这里。符号表使编译器能够更轻松地快速搜索标识符记录并检索它。符号表还用于范围管理。