什么是编译器通行证?

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

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

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

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

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

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

Multi-Pass Compiler - 编译器扫描输入源一次并制作第一个修改形式,然后扫描第一个产生的形式并产生第二个修改的形式,依此类推,直到产生对象形式。这种编译器被称为多通道编译器。

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

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

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