📜  编译器设计中的语言处理系统

📅  最后修改于: 2021-09-27 14:50:30             🧑  作者: Mango

介绍 :
计算机是软件和硬件的智能组合。硬件只是一个机械设备,它的功能是由相关软件编译的。硬件将指令视为电子电荷,相当于软件编程中的二进制语言。二进制语言只有 0 和 1。为了启发,硬件代码必须以二进制格式编写,这只是一系列 0 和 1。编写这样的代码对于计算机程序员来说将是一项既不方便又复杂的任务,因此我们用高级语言编写程序,便于我们理解和记忆。然后将这些程序输入到一系列设备和操作系统 (OS) 组件中,以获得机器可以使用的所需代码。这被称为语言处理系统

语言处理系统

语言处理系统的组成部分:
您已经在上图中看到了以下组件。让我们一一讨论。

  • 预处理器——
    预处理器包括所有头文件,并评估是否一个宏(宏是一段给定名称的代码。每当使用名称时,解释器或编译器将其替换为宏的内容。目的宏要么自动化用于序列的频率,要么启用更强大的抽象)包括在内。它以源代码为输入,并生成修改后的源代码作为输出。预处理器也称为宏评估器,如果不需要任何不支持#include处理的语言,则处理是可选的。
  • 编译器——
    编译器将修改后的代码作为输入并生成目标代码作为输出。

输入输出

  • 装配工——
    汇编器将目标代码作为输入,并产生真正的可定位机器代码作为输出。
  • 链接器 ——
    链接器或链接编辑器是一个程序,它接受一组对象(由汇编器和编译器创建)并将它们组合成一个可执行程序。
  • 装载机 ——
    加载器将链接的程序保存在主内存中。
  • 可执行代码——
    它是底层和机器特定的代码和机器可以很容易理解。一旦链接器和加载器的工作完成,目标代码最终将其转换为可执行代码。

链接器/加载器之间的差异
链接器和加载器的区别如下。

Linker Loader
The linker is part of the library files. The loader is part of an operating system.
The linker performs the linking operation. The loader loads the program for execution.
It also connects user-defined functions to user-defined libraries. Loading a program involves reading the contents of an executable file in memory.

装载机的功能:

  1. 分配——
    它用于为目标程序中的内存分配空间。翻译器无法分配空间,因为可能存在重叠或大量内存浪费。
  2. 链接——
    它结合了两个或多个不同的目标程序,并解决了目标卡组之间的符号上下文。它还提供了必要的信息以允许它们之间的参考。链接有以下两种类型。
    静态链接
    它将程序中使用的所有库例程复制到可执行映像中。这需要更多的磁盘空间和内存。
    动态链接
    它在程序运行时解析未定义的符号。这意味着可执行代码仍然具有未定义的符号和将为其提供定义的对象或库的列表。
  3. 重新分配——
    该对象修改程序,使其可以加载到与最初指定位置不同的地址,并容纳相关位置之间的所有地址。
  4. 加载 –
    在物理上,它将机器指令和数据保存在内存中以供执行。