📜  编译器设计-编译阶段

📅  最后修改于: 2021-01-18 05:23:29             🧑  作者: Mango


编译过程是各个阶段的序列。每个阶段都从上一阶段获取输入,具有自己的源程序表示形式,并将其输出馈送到编译器的下一个阶段。让我们了解编译器的各个阶段。

编译阶段

词法分析

扫描程序的第一阶段用作文本扫描程序。此阶段将源代码扫描为字符流,并将其转换为有意义的词素。词法分析器以标记形式将这些词素表示为:


语法分析

下一阶段称为语法分析或解析。它以词法分析产生的标记作为输入,并生成一个分析树(或语法树)。在此阶段,将根据源代码语法检查令牌的排列,即解析器将检查令牌所作的表达式在语法上是否正确。

语义分析

语义分析检查构造的分析树是否遵循语言规则。例如,值的分配介于兼容的数据类型之间,并将字符串添加到整数中。此外,语义分析器还会跟踪标识符,标识符的类型和表达式。标识符是否在使用前声明等。语义分析器生成带注释的语法树作为输出。

中间代码生成

经过语义分析后,编译器会为目标计算机生成源代码的中间代码。它代表一些抽象机的程序。它介于高级语言和机器语言之间。中间代码的生成方式应使其易于转换为目标机器代码。

代码优化

下一阶段将对中间代码进行代码优化。可以将优化假定为可以删除不必要的代码行,并排列语句序列以便在不浪费资源(CPU,内存)的情况下加快程序执行的过程。

代码生成

在此阶段,代码生成器采用中间代码的优化表示并将其映射到目标机器语言。代码生成器将中间代码转换为一系列(通常)可重新定位的机器代码。机器代码的指令序列执行任务,就像中间代码一样。

符号表

它是在编译器所有阶段都维护的数据结构。所有标识符的名称及其类型都存储在这里。符号表使编译器更容易快速搜索标识符记录并对其进行检索。符号表也用于范围管理。