软考-数据库系统工程师-程序设计语言知识要点
小房学堂,程序设计语言知识要点
汇编、编译、解释系统的基础知识
计算机只能理解由0-1组成的指令,就像一个只会本国语言的人,他听不懂其他国家的语言
而程序员编程使用的是低级语言(汇编语言)或者高级语言如C、C++、Java、Python
那如何让计算机理解程序员编写的语言呢?
那需要一个翻译者。因为编程语言分成了2大类,低级语言(汇编)和高级语言,用高级语言和汇编语言编辑的程序称之为源程序,因此翻译者要做2件事情
1、把汇编语言翻译成机器语言的动作称之为汇编,需要一个叫汇编程序的翻译程序
2、要让高级语言在机器中执行需要一个解释程序或者编译程序的翻译器,对其进行翻译才能在机器中执行
汇编过程:汇编程序对源程序进行语法分析->符号解析->生成机器码
解释程序:已Java 解释器为例,解释器对源程序执行动作,加载字节码 .class文件并对字节码进行验证,根据宿主机指令格式进行解释执行,并在程序运行时进行支持例如异常处理、内存管理、线程同步
编译器动作: 现代编译器主要动作有预处理、编译、汇编、链接,其中预处理主要是宏展开、头文件包含、条件编译如处理#if #else等语句,编译动作主要是对预处理后的文件进行词法、语法、语义分析,输出汇编文件.s , 汇编动作,注意现代编译器基本都包含了汇编程序的功能,它执行的动作和汇编程序一样,将指令码翻译成程序要运行的目标宿主机可识别的指令,记录链接时需要的地址信息比如外部函数的调用,然后生成目标文件.o文件,最后编译器执行链接动作,将一个或者多个.o文件以及所要用到的库文件.a,链接在一起合并代码、数据段最终形成可执行文件
使用解释器和编译器的编程语言各有优劣,一般来说使用解释器的语言具有跨平台特征比如Java,Python,可以实现一次编写到处运行,而使用编译器的语言具有性能更优的特点,所以对应应用来说如果更看中跨平台的易用性那选择解释器型语言,如果应用场合对性能要求更高则建议选择编译器型语言。
程序设计语言的基本成分
程序设计语言的基本成分包括:数据、运算、控制、传输
一、程序语言中的数据成分
程序语言中的数据成分是指一种程序语言中的数据类型,程序语言中的数据类型,可以简单想象成程序语言对数据的一种建模、一种对计算机底层10数据的解析方式,因为计算机本身并不知道如何解析10数字,例如浮点数1.0在一些机器里存储的二进制是3F800000,而这个二进制数如果按无符号整形数据解释则是1,065,353,216
所以数据类型其实指明了数据在计算机中的存储形式。当然数据作为程序语言中被操作的对象,其属性不仅仅有类型,还有名称、作用域、生存期等属性,所以可以按照不同角度对数据进行分类
1、按照运行时数据的值是否能够被改变分为常量和变量
这里引入一个非常重要的概念,左值和右值
左值指存储单元(地址、容器),右值指值(或内容),如下面的left_value 是左值,在编译或者解释器解释时会被替换为一个地址,5是值,是一个具体的内容
left_value = 5
变量具有左值和右值,变量在程序运行中可以被改变,常量只有右值,在程序运行中不能被改变。
2、按数据的作用域范围可以分为全局变量和局部变量
系统为全局变量分配的空间一般在程序运行期间是不会改变的,比如堆区,只读数据区
系统为局部变量分配的空间在程序运行期间是可以改变的,比如栈区
3、按数据的组织形式可以分为不同数据类型
如前面解释的二进制数按不同的类型解释得到不同的值,数据类型可以分为基本类型(比如常见的整型、浮点型、字符串型)、构造类型(比如用户自定义的类)、用户自定义类型(比如用户用typedef等关键字定义的自创类型)、和其他类型
二、程序语言中的运算成分
程序语言中的运算成分指明允许使用的运算符号和运算规则。例如大多数高级语言都有算术运算、关系运算、逻辑运算
三、程序语言中的控制成分
博姆(Corrado Böhm)与雅科皮尼(Giuseppe Jacopini)1966年,他们在论文《Flow diagrams, Turing machines and languages with only two formation rules》中证明:任何可计算函数(即图灵可计算的问题)都可以通过顺序(sequence)、选择(selection/if-then-else)和循环(iteration/while)这三种基本控制结构实现。