阶段vs传入编译器
一般来说,编译器是一种计算机程序,它读取用一种语言编写的程序(称为源语言),并将其翻译成另一种语言(即目标语言)。传统的源语言是C++等高级语言,目标语言是汇编语言等低级语言。因此,一般来说,编译器可以看作是从一种语言翻译到另一种语言的翻译人员。Pass和Phase是编译器经常使用的两个术语。编译器的传递次数是编译器经过源代码(或它的某种形式的表示)的次数。为了便于构造,编译器被分解成几个部分。Phase通常用于调用编译器中这样一个独立的部分。
什么是编译器中的传递?
对编译器进行分类的标准方法是按“通过”的数量。通常,编译是一个相对资源密集型的过程,最初计算机没有足够的内存来保存这样一个完成任务的程序。由于早期计算机硬件资源的局限性,编译器被分解成更小的子程序,这些子程序通过检查源代码(对源代码或其他形式的源代码进行“传递”)来完成其部分工作,并分别执行分析、转换和翻译任务。因此,根据这种分类,编译器被识别为一次或多次通过编译器。
顾名思义,one-pass编译器在一个过程中编译。编写一个单通道编译器更容易,而且它们的执行速度也比多通道编译器快。因此,即使在资源受限的时候,语言的设计也使得它们可以一次性编译(例如Pascal)。另一方面,一个典型的多遍编译器是由几个主要阶段组成的。第一个阶段是扫描器(也称为词法分析器)。Scanner读取程序并将其转换为一系列标记。第二个阶段是解析器。它将中的标记字符串转换为解析树(或抽象语法树),解析树捕获程序的语法结构。下一阶段是句法结构的语义解释。代码优化阶段和最终代码生成阶段遵循以下步骤。
编译器的阶段是什么?
在谈到编译器构造时,经常会出现术语阶段。最初,编译器是由一个人为编译一种简单的语言而编写的单个单片软件的每一个简单部分。但是当要翻译的语言的源代码变得复杂和庞大时,编译器就被分解成多个(相对独立的)阶段。具有不同阶段的优点是编译器的开发可以在开发人员团队中进行。此外,它通过允许阶段被改进的阶段或添加到编译器中的附加阶段(例如进一步的优化)来改进模块化和重用。卡内基甜瓜大学的PQCC(Production Quality Compiler Compiler Project)介绍了将编译分为阶段的过程。他们引入了前端、中间端和后端这三个术语。大多数编译器至少有两个阶段。但是通常,后端和前端封装了这些阶段。
阶段编译器和传入编译器的区别是什么?