C编程从入门到实践
上QQ阅读APP看书,第一时间看更新

1.4 理解编译系统——学习的第一步

知识点讲解:视频\第1章\理解编译系统.mp4

C语言是一门DOS环境下的开发语言,在执行前需要先将其编译,才能正确执行。要真正理解编译系统的原理,重要的是要理解什么是“编译”。编译是一个过程,通过这个过程可以把高级语言变成计算机可以识别的二进制语言。计算机只认识以1和0格式组织的二进制数据,编译程序可以把人们熟悉的语言换成二进制形式。

要通过编译把一个源程序翻译成目标程序,所需的流程如图1-1所示。

图1-1 编译系统的结构流程

在上述过程中,两个主要的阶段是词法分析和语法分析,这又称为源程序分析。如果在分析过程中发现了语法错误,则它会给出对应的提示信息。

接下来开始讲解上述5个阶段的具体过程。

❑ 词法分析

词法分析的任务是对由字符组成的单词进行处理,从左至右逐字符地对源程序进行扫描,产生单词符号,把作为字符串的源程序改造成为用单词符号串表示的中间程序。执行词法分析的程序称为词法分析程序或扫描器。

❑ 语法分析

编译程序的语法分析器以单词符号作为输入,分析单词符号串是否可形成符合语法规则的语法单位,如表达式、赋值、循环等,最后看是否能构成一个符合要求的程序。按该语言使用的语法规则分析检查每条语句是否有正确的逻辑结构,程序是最终的语法单位。编译程序的语法规则可用上下文无关文法来刻画。语法分析的方法有如下两种。

❑ 自上而下分析法:从文法中的开始符号出发,向下推导,推出句子。

❑ 自下而上分析法:使用移进归约法。它的基本思想是用一个寄存符号的先进后出栈,把输入符号一个一个地移进栈里,当栈顶形成某个产生式的一个候选式时,把栈顶的这一部分归成该产生式的左邻符号。

❑ 检查中间代码

中间代码是源程序的内部表示,也称为中间语言。中间代码的作用是使编译程序的结构在逻辑上更为简单明确,特别是更容易实现目标代码的优化。中间代码即中间语言程序,中间语言的复杂性介于源程序语言和机器语言之间。中间语言有多种形式,其中最为常见的有4种:逆波兰记号、四元式、三元式和树。

❑ 优化代码

优化代码是指对程序进行多种等价变换,从而使根据变换后的程序能生成更有效的目标代码。所谓等价指的是不改变程序的运行结果。有效是指目标代码运行时间较短,而且占用的存储空间较小。这种变换称为优化。

❑ 生成目标代码

生成目标代码是最后一个编译阶段。目标代码生成器可以把经过语法分析或优化后的中间代码变换成目标代码。

另外,还涉及下面两个程序。

❑ 表格管理程序

在编译过程中源程序的各种信息会保留在不同的表格中,在编译的各阶段都涉及构造、查找或更新有关的表格。

❑ 出错处理程序

如果在编译过程中发现源程序有错误,则编译程序将会报告错误的性质和错误发生的地点,并且将错误所造成的影响限制在尽可能小的范围内,从而使源程序的其余部分能继续编译。有些编译程序还能自动纠正错误,这些工作由错误处理程序完成。

了解了“编译”过程后,整个编译系统的概念便一目了然了。编译系统就是按照编译原理集合而成的一种机制,这种机制能够对程序语言实现上述处理。

系统编译与发布是在系统编码之后执行的一项基本操作。编译生成可执行代码。发布是将编译之后的可运行版本发布到服务器,供用户使用。在编译过程中,编译器将代码翻译成中间语言。运行时会将中间语言翻译成CPU的指令,以便计算机的处理器运行应用程序。编译后的应用程序可以提高代码的运行速度,增加代码的安全性和稳定性。