@TOC
机器语言,汇编语言,高级语言
简述:
- 高级语言和汇编语言都必须转化成机器语言才可以被计算机执行。
- 机器语言: ①机器语言是由机器指令构成的,每一条机器指令都是由0和1构成的序列,由于机器语言是由0和1构成的序列,这样人们编写起来比较麻烦和容易出错,为此发明了汇编语言。
- 汇编语言:
①汇编语言由机器指令符号化后的语言,汇编语言编写的程序移植性比较差,因为它所编写的程序是跟具体的计算机体系结构密切相关的,为此发明了高级语言。
- 高级语言:
①高级语言移植性好,语法和结构更类似汉字或者普通英文,且由于远离对硬件的直接操作,使得一般人更容易学习。
翻译、汇编、编译、解释
简述:
- 翻译程序: ①所谓翻译程序是指这样一种程序,它把一种语言(称作源语言)所写的程序(源程序)翻译成与之等价的另外一种语言(目标语言)。
- 汇编程序: ①具有把汇编语言编写的程序转换成等价的机器语言程序的功能的程序。
- 编译程序: ①具有把高级语言编写的程序转换成等价的低级语言程序的功能的程序。 ②所以说编译程序是翻译程序的特殊情况。 ③采用编译方式在计算机上执行用高级语言编写的程序,需分阶段进行,一般分为两大阶段,即编译阶段和运行阶段。 ④如果编译阶段生成的目标程序不是机器语言程序,而是汇编语言程序,则程序的执行需分3 个阶段,即编译阶段、汇编阶段和运行阶段。
- 解释程序: ①解释程序也是一种翻译程序。 ②它将源程序作为输入并执行之,即边解释边执行。 ③它与编译程序的主要区别是在解释程序的执行过程中不产生目标程序,而是按照源语言的定义解释执行源程序本身。
编译和解释:
-
高级语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行,按转换方式可将它们分为两类。
-
解释类: ①执行方式类似于我们日常生活中的“同声翻译”,应用程序源代码一边由相应语言的解释器“翻译”成目标代码(机器语言),一边执行,因此效率比较低,而且不能生成可独立执行的可执行文件,应用程序不能脱离其解释器,但这种方式比较灵活,可以动态地调整、修改应用程序,典型的解释型的高级语言有BASIC。
-
编译类: ①编译是指在应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器语言),因此其目标程序可以脱离其语言环境独立执行,使用比较方便、效率较高。但应用程序一旦需要修改,必须先修改源代码,再重新编译生成新的目标文件(*.OBJ)才能执行,只有目标文件而没有源代码,修改很不方便。现在大多数的编程语言都是编译型的,例如Visual C++、Delphi等。
编译程序
简介:
编译器功能结构图:
-
词法分析:字符流->单词流
-
语法分析器:单词流->语法树
-
语义分析器: ①收集标识符的属性信息:类型(Type)、种属(Kind)、存储位置、长度、值、作用域、参数和返回值信息 ②语义检查:变量或过程未经声明就使用、变量或过程名重复声明、运算分量类型不匹配、操作符与操作数之间的类型不匹配
-
中间代码生成器:抽象语法树->中间表示(与平台无关的抽象程序): ①易于产生②易于翻译成目标程序③三地址码④四元式 注意:在 编译领域,IR 是intermediate representation (中间表示) 的缩写。
-
代码优化器:试图改进中间代码,以产生执行速度较快的机器代码:
-
代码生成器:生成可重定位的机器代码或汇编代码:
-
符号管理表: ①基本功能是记录源程序中使用的标识符, ②并收集与每个标识符相关的各种属性信息, ③并将它们记载到符号表中。
-
错误处理器: ①处理方式:报告错误,应继续编译 ②大部分错误在语法分析、语义分析阶段检测出来 ③词法分析:字符无法构成合法单词 ④语法分析:单词流违反语法结构规则 ⑤语义分析:语法结构正确,但无实际意义
编译程序的前端和后端:
编译程序和程序设计环境:
- 1.编辑器: 编写代码的程序
- 2.预处理器 预处理现在已经被边缘化了,一般与编译器一起。
- 3.编译器 编译成目标程序。
- 3.连接程序 链接库函数形成可执行程序。
- 4.装入程序 从外存中装入内存运行。
- 5.调试程序 调试bug。