计算机程序设计及编译
我们首先来看一下什么是编译,以及编译器都要做什么。
在此之前,我们先了解一下编译器所面对三类语言——高级语言、汇编语言、机器语言。
其三者的关系如下图
其中,机器语言的特点是可以被计算机直接理解,但对于人来说难写难记。因此,人们为了方便书写,引入了助记符,进而诞生了汇编语言。
汇编语言, 即第二代计算机语言,用一些容易理解和记忆的字母,单词来代替一个特定的指令,比如:用“ADD”代表数字逻辑上的加减,“ MOV”代表数据传递等等,通过这种方法,人们很容易去阅读已经完成的程序或者理解程序正在执行的功能,对现有程序的bug修复以及运营维护都变得更加简单方便。
相对于汇编语言,高级语言则是更加接近人类的表达方式的类自然语言,利用这种语言,人们可以更加便捷的编写逻辑关系更加复杂的程序。
从上图中不难得出编译的定义:
将高级语言翻译成汇编语言或机器语言的过程
编译器在语言处理系统中的位置
为了理解编译器工作的过程,我们引入如下的翻译流程图:
其中,在分析源语言的过程中,我们通常遵循如下的流程:
这里的源语言通常为高级语言(如C语言),而目标语言句子通常为汇编语言或机器语言等较为低级的语言 。
从图中不难看出,语义是独立于源语言和目标语言的一种中间表示,是独立于具体语言的。
编译器的结构
综合上述内容,我们可以知道,编译器接受源语言输入,生成中间表示,最后输出目标语言。
我们把编译器将源语言转换为中间表示的过程称为编译器的前端,把编译器将中间表示转换为目标语言的过程称为编译器的后端。
其中前端与源语言相关,中间表示独立于具体语言、后端与目标语言相关。
小结
不难发现,编译的过程其实就是将高级语言翻译为低级语言的过程,而编译器所遵循的翻译方法被称为语法制导翻译。
语法制导翻译:指一种源语言代码的翻译完全由语法分析器驱动的编译器的实现方法