证明语句 A = B * C + 20 的完整编译过程,其中 A、B、C 为实数类型。


解决方案

                    符号表

序号变量名变量类型
200A浮点数
204B浮点数
208C浮点数

现在,我们将了解如何在每个级别执行编译器阶段以及它的工作原理。

  • 词法分析

这是第一步,它充当编译器和源代码之间的桥梁。它一次读取源代码一个字符,并将源代码设计成一系列称为标记的原子单元。

在这个阶段,我们将了解如何对表达式进行标记化。

A → 标识符:(id, 1)

= → 运算符:赋值

B → 标识符:(id, 2)

* → 运算符:乘法

C → 标识符:(id, 3)

+ → 运算符:二元加法

20 → 常量:整数

最终表达式如下:

id1=id2*id3+20
  • 语法分析

它也称为解析器。它接收来自上一阶段(词法分析)生成的标记作为输入,并生成称为语法树或解析树的分层结构。

在这个阶段,它可以在对表达式进行标记化后检查语法。

表达式的语法分析如下:

  • 语义分析

此阶段以语法树为输入,并确定程序的语义准确性。然而,即使标记是准确的且语法正确的,它们也可能在语义上不精确。因此,语义分析器确定语句结构的语义 **(含义)**。在这个阶段,它可以验证语法树的类型和语义操作。

  • 中间代码生成

此阶段以语法和语义上正确的形式作为输入,并生成源代码的相同中间表示法。在这个阶段,我们将提供修改后的解析树,并在转换为中间程序后作为输出,创建一个三地址码。

T1=id2 * id3
T2=int to real (20)
T3=T1+T2
id1=T3
  • 代码优化

这是一个可选阶段。它将源程序的中间表示转换为高效的代码。在这个阶段,它将以三地址码作为输入,并作为输出,识别优化后的代码。

T1=id2 * id3
id1=T1+ 20.0
  • 代码生成

这是编译过程的最后一步。它将优化的中间代码转换为机器/汇编代码。它为程序中的变量分配内存位置。

在最后阶段,可以看到如何将最终表达式修改为汇编程序。

更新于:2021年10月22日

9K+ 浏览量

开启你的职业生涯

完成课程获得认证

开始学习
广告