什么是编译器遍?
在生成汇编/机器代码之前,整个源程序可以被处理多次。
遍 - 对源程序进行一次完整的扫描或处理。各个阶段可以安排在一个遍中。词法、语法和语义分析通常被组合在一个遍中。每个遍读取源程序并将输出写入中间文件,然后后续遍可以读取该文件,即一个遍的输出将成为下一个遍的输入。
单遍编译器 - 在单遍编译器中,当处理一行源代码时,它会被扫描并提取标记。然后分析该行的语法,并构建树结构和一些表格,包括关于每个标记的数据。
最后,在检查语义部分的正确性后,生成代码。对于程序的每一行重复此等效过程,直到整个程序编译完成。通常,整个编译器都是围绕解析器构建的,解析器将调用执行不同功能的过程。
单遍编译器速度很快,因为所有编译器代码都一次性加载到内存中。它可以处理源文本,而无需操作系统关闭一个进程并启动另一个进程的开销。单遍编译器往往对程序常量、类型、变量和过程施加一些限制,这些限制必须在使用之前定义。
单遍编译器的组件之间相互关联,比多遍编译器的组件更紧密。这要求所有参与项目的程序员都了解整个项目。
多遍编译器 - 编译器扫描输入源一次并生成第一个修改后的形式,然后扫描第一个生成的表单并生成第二个修改后的表单,依此类推,直到生成目标表单。这样的编译器称为多遍编译器。
在多遍编译器的情况下,编译器的每个功能都可以由编译器的一个遍执行。例如,第一遍可以读取输入源,扫描并提取标记,并将结果保存到输出文件中。
第二遍可以读取第一遍生成的,通过构建语法树进行语法分析,并将所有与树的每个节点相关的信息关联起来。然后,第二遍的输出是一个包含语法树的文件。
第三遍可以读取第二遍创建的输出文件,并通过重构树结构来执行优化。
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP