首页 > 代码库 > 编译原理学习笔记 -- 绪论1

编译原理学习笔记 -- 绪论1

1. 语言处理器

语言处理系统

           _________      经过预     _______
源程序 --> |预处理器| --> 处理的 --> |编译器| --> 目标汇编程序
           --------       源程序     -------

    _______      可重定位的   ______________
--> |汇编器| --> 机器代码 --> |链接器/加载器| --> 目标机器代码
    -------                   --------------
                                 ↑
                             库文件/可重定位对象文件
  • 预处理器:把源程序聚合在一起,并宏展开
  • 链接器:解决外部内存地址问题
  • 加载器:把所有的可执行目标文件放到内存中执行

练习

1.1 编译器与解释器的区别

编译器是直接将源语言写的程序翻译成一个等价的用目标语言编写的程序,而解释器并不是通过翻译的方式生成目标程序,从用户的角度讲,解释器直接利用用户提供的输入执行源程序中指定的操作。

源程序 ---> 编译器 ---> 目标程序
            _________
源程序 ---> |        |
            | 解释器 | ---> 输出
输  入 ---> |________|

1.2 编译器与解释器相对各自的优点

  • 编译器的优点:生成的目标程序执行速度快
  • 解释器的优点:由于其是逐条执行源程序,因此具有更好的错误诊断效果

1.3 在一个语言系统中,编译器产生汇编语言而不是机器语言的优点是什么

  1. 汇编语言比较容易输出和调试
  2. 减轻开发工作量,易于实现。不是每一个开发人员都对机器语言非常了解

1.4 把一种高级语言翻译成为另一种高级语言的编译器称为源到源(source-to-source)的编译器。编译器使用C语言作为目标语言有什么好处

  1. 易于移植,在不同的平台上开发人员只需要重新实现C语言到机器语言
  2. 减轻开发工作量,只需C语言到机器语言只需实现一次
  3. C语言比较容易输出和调试

1.5 描述一下汇编器所要完成的一些任务

与编译器类似

  1. 宏展开
  2. 把指令转换为机器代码