- 编译器设计教程
- 编译器设计 - 首页
- 编译器设计 - 概述
- 编译器设计 - 架构
- 编译器设计 - 编译器的阶段
- 编译器设计 - 词法分析
- 编译器 - 正则表达式
- 编译器设计 - 有限自动机
- 编译器设计 - 语法分析
- 编译器设计 - 解析类型
- 编译器设计 - 自顶向下解析器
- 编译器设计 - 自底向上解析器
- 编译器设计 - 错误恢复
- 编译器设计 - 语义分析
- 编译器 - 运行时环境
- 编译器设计 - 符号表
- 编译器 - 中间代码
- 编译器设计 - 代码生成
- 编译器设计 - 代码优化
- 编译器设计有用资源
- 编译器设计 - 快速指南
- 编译器设计 - 有用资源
编译器设计 - 编译器的阶段
编译过程是一系列不同阶段的序列。每个阶段都从其之前的阶段获取输入,具有自己的源程序表示,并将输出馈送到编译器的下一阶段。让我们了解编译器的各个阶段。
词法分析
扫描程序的第一阶段充当文本扫描程序。此阶段将源代码扫描为字符流,并将其转换为有意义的词素。词法分析器以标记的形式表示这些词素,例如
<token-name, attribute-value>
语法分析
下一阶段称为语法分析或解析。它以词法分析生成的标记作为输入,并生成一个解析树(或语法树)。在此阶段,会根据源代码语法检查标记的排列,即解析器检查标记构成的表达式在语法上是否正确。
语义分析
语义分析检查所构建的解析树是否遵循语言规则。例如,值的赋值是在兼容的数据类型之间,以及将字符串添加到整数。此外,语义分析器跟踪标识符、它们的类型和表达式;标识符是否在使用前声明等等。语义分析器产生一个带注释的语法树作为输出。
中间代码生成
语义分析之后,编译器为目标机器生成源代码的中间代码。它表示某个抽象机器的程序。它位于高级语言和机器语言之间。应以易于转换为目标机器代码的方式生成此中间代码。
代码优化
下一阶段对中间代码进行代码优化。优化可以理解为删除不必要的代码行,并安排语句的顺序以加快程序执行速度,而不会浪费资源(CPU、内存)。
代码生成
在此阶段,代码生成器获取中间代码的优化表示,并将其映射到目标机器语言。代码生成器将中间代码转换为(通常)可重定位机器代码的序列。机器代码指令序列执行与中间代码相同的任务。
符号表
它是在编译器的所有阶段都维护的一种数据结构。所有标识符的名称及其类型都存储在此处。符号表使编译器能够轻松快速地搜索标识符记录并检索它。符号表也用于作用域管理。
广告