C语言-高级语言,低级语言与编译器的关系

  • 格式:pdf
  • 大小:355.88 KB
  • 文档页数:2
高级语言,低级语言与编译器的关系
1、程序员、编译器、CPU 之间的三角恋 1.1、程序员与 CPU 的之间的“翻译”——编译器
越是高级的语言,其语法就越是接近人类的思维。程序员之所以可以用高级 语言编程,是因为语言处理系统的存在。一个完整的语言处理系统包括:预处理 器、编译器、汇编器、链接器/加载器。作为语言处理系统中最为关键的环节— —编译器,我们程序员是很有必要去了解下她的。
很多复杂的表达式,如:(*(void(*)())0)(),这个表达式能被编译器理解, 那么作为程序员的我们没有理由不能理解,只要我们能想编译器一样的思考,不 管多么复杂的表达式,我们都能够准确的理解。获取更多视频资料欢迎加入 397164505 朱老师技术群。
1.2、高级语言与低级语言的差别 越高级的语言抽象层次越高,越靠近人类思维;越低级的语言,抽象层次越
低,越接近 CPU 的思维。程序员与编译器遵循“总劳动量守恒”。 编译器就简单 了,编程要是工作量就大些;编译器就需要复杂一点,编译器能做的事就更多些, 所以编程就会简些单。这个规律描述的就是:编程语言越高级,程序员使用起来 越简单,编译器设计的就会更复杂,CPU 执行程序的效率越低;编程语言越低级, 程序员使用起来越麻烦,则编译器设计越简单,CPU 执行效率越高。但是编译器 包含了提高所生成代码的性能的技术,弥补了一些高级语言因为高层次抽象带来 的低效率。
1.4 、语法是什么?语法就是编译器的习性 人们都喜欢“自然”,凡是“自然”的东西都容易被理解,如果我们能像编
译器一样思考,很多语法就会变得“自然”,变得容易理解。 首先,我们写的代码 CPU 肯定是不认识的,我们写的代码首先会被编译识别。
最开始我们的代码在编译器眼里,也不过是一堆堆字符串,她会逐一分析这堆字 符串中的关键字、变量、操作符等等。代码是无穷的,编译器必须都认识,而编 译器本身也是个程序。那编译器这个程序是如何识别无穷的程序的呢?因为程序 不管怎么变化都必须遵循语法。
步骤组成:
字符流
词法分析器 符号流
语法分析 语法树
语义分析 语法树
中间代码生成器
结束 目标机器语言 机器有关码优化器 目标机器语言
代码生成器 中间Байду номын сангаас示形式 机器无关码优化器
中间表示形式
编译器的各个步骤 本小节,不会逐个研究编译器的每个步骤(想具体了解的朋友,可以阅读编 译领域的龙书——《编译原理》),只会给读者一个研究的方向。当读者对一段代 码的执行结果无法理解时,可以借助编译器的各个步骤去想,也许你就能理解了。
当选择一门语言来解决问题时,除了需要考虑语言的特性以外,往往还需要 考虑“开发效率”和“运行效率”。某些功能注重运行效率,可能需要低级语言 如汇编去完成,有的部分注重开发效率,可能需要高级语言如 C#去完成。很多 大型的程序如 QQ,都是由多种语言混合编写的。
1.3 介绍编译器的结构 前面说过编译器是语言处理系统中的一个重要步骤,而编译器本身也由多个
就像你吩咐一个下属去传达一个重要命令,你就有必要去了解下你这个下属 的表达方式,从而可以更好的表达你的真正意图。程序员了解编译器,也就是为 了清楚的把自己的意图告诉电脑。说得更明白一点,理解一门语言的编译器有助 于透彻理解这门语言的语法。如过还想更深层次的探究编程,你可能就需要研究 CPU 本身。
所以学习一门语言的过程应该是,初步了解一门语言的语法特性,掌握了语 法特性之后,可以研究下这门语言的编译器的原理,从而对语法有更深刻的了解。 如果还能对 CPU 的设计有基本的认识就会对编译器的设计有所理解。当然对于我 们大多数程序员而言,不用去发明一门语言和设计一款编译器,只要能了解编译 器的特性就足够了。