- 编译器设计教程
- 编译器设计 - 首页
- 编译器设计 - 概述
- 编译器设计 - 架构
- 编译器设计 - 编译器的阶段
- 编译器设计 - 词法分析
- 编译器 - 正则表达式
- 编译器设计 - 有限自动机
- 编译器设计 - 语法分析
- 编译器设计 - 解析类型
- 编译器设计 - 自顶向下解析器
- 编译器设计 - 自底向上解析器
- 编译器设计 - 错误恢复
- 编译器设计 - 语义分析
- 编译器 - 运行时环境
- 编译器设计 - 符号表
- 编译器 - 中间代码
- 编译器设计 - 代码生成
- 编译器设计 - 代码优化
- 编译器设计有用资源
- 编译器设计 - 快速指南
- 编译器设计 - 有用资源
编译器设计 - 概述
计算机是软件和硬件的均衡组合。硬件只是一块机械设备,其功能由兼容的软件控制。硬件理解以电子电荷形式的指令,这是软件编程中二进制语言的对应物。二进制语言只有两个字母,0和1。要发出指令,硬件代码必须以二进制格式编写,这只是一系列的1和0。对于计算机程序员来说,编写这样的代码将是一项困难且繁琐的任务,这就是为什么我们有编译器来编写这些代码的原因。
语言处理系统
我们已经了解到任何计算机系统都是由硬件和软件组成的。硬件理解一种人类无法理解的语言。因此,我们用高级语言编写程序,这更容易让我们理解和记忆。然后将这些程序输入一系列工具和操作系统组件以获得机器可以使用的所需代码。这被称为语言处理系统。
高级语言在各个阶段转换为二进制语言。编译器是一个将高级语言转换为汇编语言的程序。类似地,汇编器是一个将汇编语言转换为机器语言的程序。
让我们首先了解一下使用C编译器如何在主机上执行程序。
用户用C语言(高级语言)编写程序。
C编译器编译程序并将其转换为汇编程序(低级语言)。
然后,汇编器将汇编程序转换为机器码(目标代码)。
链接器工具用于将程序的所有部分链接在一起以执行(可执行机器码)。
加载器将所有这些加载到内存中,然后执行程序。
在深入研究编译器的概念之前,我们应该了解一些与编译器密切合作的其他工具。
预处理器
预处理器通常被认为是编译器的一部分,它是一个为编译器生成输入的工具。它处理宏处理、增强、文件包含、语言扩展等。
解释器
解释器就像编译器一样,将高级语言转换为低级机器语言。区别在于它们读取源代码或输入的方式。编译器一次读取整个源代码,创建标记,检查语义,生成中间代码,执行整个程序,并且可能涉及多个过程。相反,解释器从输入中读取一条语句,将其转换为中间代码,执行它,然后按顺序获取下一条语句。如果发生错误,解释器将停止执行并报告错误。而编译器即使遇到多个错误也会读取整个程序。
汇编器
汇编器将汇编语言程序转换为机器码。汇编器的输出称为目标文件,其中包含机器指令的组合以及将这些指令放置在内存中所需的数据。
链接器
链接器是一个计算机程序,它将各种目标文件链接和合并在一起以生成可执行文件。所有这些文件可能都由单独的汇编器编译。链接器的主要任务是搜索和定位程序中引用的模块/例程,并确定这些代码将加载到的内存位置,使程序指令具有绝对引用。
加载器
加载器是操作系统的一部分,负责将可执行文件加载到内存中并执行它们。它计算程序的大小(指令和数据)并为其创建内存空间。它初始化各种寄存器以启动执行。
交叉编译器
在平台(A)上运行并能够为平台(B)生成可执行代码的编译器称为交叉编译器。
源到源编译器
将一种编程语言的源代码转换为另一种编程语言的源代码的编译器称为源到源编译器。