什么是编译器遍?


在生成汇编/机器代码之前,整个源程序可以被处理多次。

- 对源程序进行一次完整的扫描或处理。各个阶段可以安排在一个遍中。词法、语法和语义分析通常被组合在一个遍中。每个遍读取源程序并将输出写入中间文件,然后后续遍可以读取该文件,即一个遍的输出将成为下一个遍的输入。

单遍编译器 - 在单遍编译器中,当处理一行源代码时,它会被扫描并提取标记。然后分析该行的语法,并构建树结构和一些表格,包括关于每个标记的数据。

最后,在检查语义部分的正确性后,生成代码。对于程序的每一行重复此等效过程,直到整个程序编译完成。通常,整个编译器都是围绕解析器构建的,解析器将调用执行不同功能的过程。

单遍编译器速度很快,因为所有编译器代码都一次性加载到内存中。它可以处理源文本,而无需操作系统关闭一个进程并启动另一个进程的开销。单遍编译器往往对程序常量、类型、变量和过程施加一些限制,这些限制必须在使用之前定义。

单遍编译器的组件之间相互关联,比多遍编译器的组件更紧密。这要求所有参与项目的程序员都了解整个项目。

多遍编译器 - 编译器扫描输入源一次并生成第一个修改后的形式,然后扫描第一个生成的表单并生成第二个修改后的表单,依此类推,直到生成目标表单。这样的编译器称为多遍编译器。

在多遍编译器的情况下,编译器的每个功能都可以由编译器的一个遍执行。例如,第一遍可以读取输入源,扫描并提取标记,并将结果保存到输出文件中。

第二遍可以读取第一遍生成的,通过构建语法树进行语法分析,并将所有与树的每个节点相关的信息关联起来。然后,第二遍的输出是一个包含语法树的文件。

第三遍可以读取第二遍创建的输出文件,并通过重构树结构来执行优化。

更新于: 2021年10月22日

3K+ 浏览量

启动您的 职业生涯

通过完成课程获得认证

开始
广告

© . All rights reserved.