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

📅  最后修改于: 2021-08-25 18:15:55             🧑  作者: 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. 载入中–
    从物理上讲,它会将机器指令和数据保留在内存中以便执行。