编译原理
一、 编译器
1.1 编译器的概念
程序设计语言是向人以及计算机描述计算过程的记号,计算机上运行的所有软件都是用某种程序设计语言编写的。但是在一个程序可以运行之前,它首先需要被翻译成一种能够被计算机执行的形式。完成这项翻译工作的软件系统就叫做编译器。(compiler)
编译器重要任务之一就是报告它在翻译过程种发现的源程序种的错误!
1.2 介绍设计和实现编译器的方法
通俗的说:一个编译器就是一个程序,可以把一种语言编写的程序翻译成目标程序
编译器类似于一个映射函数,将源程序映射为目标程序。这个映射的过程我们可以分为两个部分:分析部分和综合部分。
分析部分: 将源程序分解为多个组成要素,并在这些要素上加上语法结构。
综合部分:根据中间表示和符号表中的信息来构造用户期待的目标程序。
二、语言翻译器不同形式
2.1 解释器
编译器 compiler 和 解释器 interpreter
除了编码器之外解释器是另一种常见的语言处理器,如下图所示:
优缺点:
1.由一个编译器产生的机器语言目标代码通常比一个解释器快很多。
2.解释器的错误诊断效果通常比编译器更好,因为他逐个语句执行源程序。
区别:
编译器和解释器的区别:
解释器:直接执行用编程语言编写的指令程序。
编译器:把源代码转换成(翻译)低级语言的程序。
1、解释器是直接执行用编程语言编写的指令程序,而编译器是把与源码转换即翻译低级语言的程序 ,解释器直接利用用户提供的输入执行源程序中指定的操作。
2、编译器生成一个独立的程序,而解释的程序总是需要解释器来运行
参考网页: 编码器和源码器
2.2 其他程序
预处理器:将分割成多个模块的源程序(存放在各个独立的模块中),预处理器preprocessor负责把源程序聚合在一起,除此之外,也负责把那些称为宏的缩写形式转换成源语言的语句。
编码器:将预处理过后的源程序转换成目标汇编语言,汇编语言便于输出和调试(为什么不直接转换成机器语言而是转换成汇编语言)。
汇编器:将汇编语言程序处理,并生成可重定位的机器代码。
链接器:一个文件种的代码可能指向另一个文件中的位置,而链接器可以解决外部内存地址的问题。
加载器:把所有的可执行目标文件放到内存中执行。
参考书籍
编译原理(紫龙书)