《C语言开发从入门到精通》一1.3 理解编译系统——学习的第一步

简介:

本节书摘来自异步社区《C语言开发从入门到精通》一书中的第1章,第1.3节,作者王长青 , 韩海玲,更多章节内容可以访问云栖社区“异步社区”公众号查看。

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

知识点讲解:光盘:视频PPT讲解(知识点)第1章理解编译系统.mp4

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

要想通过编译把一个源程序翻译成目标程序,所做的工作过程分为如下5个阶段:

(1)词法分析。

(2)语法分析。

(3)语义检查中间代码生成。

(4)代码优化。

(5)目标代码生成。

在上述过程中,最为主要的阶段是进行词法分析和语法分析,这又称为源程序分析。如果在分析过程中发现有语法错误,会给出对应的提示信息。具体编译流程如图1-1所示。


9c8e12122107642a278905d4c3311ed078a929f2

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

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

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

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

自上而下分析法:从文法的开始符号出发,向下推导,推出句子。
自下而上分析法:使用移进归约法,基本思想是用一个寄存符号的先进后出栈,把输入符号一个一个地移进栈里,当栈顶形成某个产生式的一个候选式时,即把栈顶的这一部分归成该产生式的左邻符号。
3.语义检查中间代码生成
中间代码是源程序的一种内部表示,也称为中间语言。中间代码的作用是使编译程序的结构在逻辑上更为简单明确,特别是使目标代码的优化更容易实现。中间代码即为中间语言程序,中间语言的复杂性介于源程序语言和机器语言之间。中间语言有多种形式,其中最为常见的有4种:逆波兰记号、四元式、三元式和树。

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

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

另外,还有下面两个过程。

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

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

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

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

因为C语言独有的DOS环境特性,所以,在编译时会变得十分麻烦。但是幸好已经有多种编译器工具,通过这些工具可以简捷实现对C语言程序的编译、运行和调试。例如通过专用的编译器,可以对1.2节中的C语言代码进行编译和运行处理,假设使用Turbo C进行编译。

在Turbo C中编写上述代码后,可以按下【F9】键进行编译并链接,成功后弹出成功提示,如图1-2所示。

80%


c647d9c27c3c5e8f5e96d51f80b23fd6dd107a56

图1-2 成功提示
相关文章
|
2月前
|
自然语言处理 中间件 编译器
C语言的编译器和中间件开发
C语言的编译器和中间件开发
|
2月前
|
存储 编译器 C语言
初识C语言——详细入门(系统性学习day4)
初识C语言——详细入门(系统性学习day4)
|
2月前
|
编译器 程序员 开发工具
c语言从入门到实战——在系统学习C语言之前所需要了解的知识
C语言是一种通用的、过程式的计算机编程语言,支持结构化编程、词汇变量作用域和递归等功能,其设计提供了低级别的存取权限,并且要求程序员管理所有的内存细节。C语言的基本构成包括数据类型(如整型、浮点型、字符型等)、运算符(如算术运算符、关系运算符、逻辑运算符等)、控制结构(如顺序结构、选择结构、循环结构等)以及函数等。此外,C语言还提供了指针的概念,这是其他许多编程语言所不具备的。指针是一个变量,其值为另一个变量的地址,通过指针可以间接访问和操作内存中的数据。C语言也支持数组、结构体、联合体等复合数据类型,以及文件操作、动态内存分配等高级功能。
54 0
|
2月前
|
存储 C语言
通俗易懂的学习C语言中输入一组数并找出其最大值
通俗易懂的学习C语言中输入一组数并找出其最大值
|
3天前
|
人工智能 测试技术 C语言
C语言学习
C语言学习
11 1
|
6天前
|
传感器 存储 物联网
【C 言专栏】基于 C 语言的物联网开发
【5月更文挑战第6天】C 语言在物联网发展中扮演关键角色,适用于开发嵌入式系统、通信协议及云平台后端服务。其高效、灵活、可移植的特性适应资源有限的环境,确保设备兼容性。尽管开发挑战较大,如代码可读性,但借助辅助工具可改善。随着物联网技术进步,C 语言将持续发挥重要作用,塑造智能未来。
【C 言专栏】基于 C 语言的物联网开发
|
7天前
|
存储 算法 C语言
【C 言专栏】用 C 语言开发游戏的实践
【5月更文挑战第5天】本文探讨了使用C语言开发游戏的实践,包括选择适合的游戏类型(如贪吃蛇、俄罗斯方块),设计游戏框架、图形界面和逻辑,以及音效添加。文章还强调了性能优化、测试调试、跨平台挑战及未来发展趋势。对于热衷于C语言的开发者,这是一次挑战与乐趣并存的探索之旅。
【C 言专栏】用 C 语言开发游戏的实践
|
13天前
|
传感器 算法 C语言
C语言在嵌入式系统开发中的优化策略与代码实现
C语言在嵌入式系统开发中的优化策略与代码实现
26 1
|
25天前
|
JavaScript 前端开发 Java
开发语言漫谈-C语言
C语言是最伟大的开发语言
|
2月前
|
机器学习/深度学习 人工智能 Java
学习Python语言好还是C语言好
学习Python语言好还是C语言好
21 0