程序设计语言基础知识复习

(一) 程序设计语言基本概念

1、计算机硬件只识别机器指令序列,因此机器指令是最基本的计算机语言。机器语言设计程序效率很低,程序可读性很差,很难修改和维护,因此,用符号代替0、1序列来表示机器指令。用符号表示的指令称为汇编指令,汇编指令的集合称为汇编语言。汇编语言和机器语言是低级语言。此基础上,开发出功能更强、抽象级别更高的语言以支持程序设计,称为高级语言。eg:JAVA、C、C++、PHP、Python、Delphi、PASCAL等。

2、计算机只能理解机器语言,因此高级程序设计语言需要翻译,担任这一任务的程序称为“语言处理程序”。语言之间的翻译形式有多种,基本方式为汇编、解释和编译。高级语言或汇编语言编写的程序称为源程序。汇编语言编写的源程序需要一个汇编程序将其翻译成目标程序后才能执行,高级语言编写的源程序则需要对应的解释程序(解释器:直接解释执行源程序或者将源程序翻译成某种中间代码后加以执行)或编译程序(编译器:将源程序翻译成目标语言程序,然后在计算机上运行目标程序)对其进行翻译,然后在机器上运行。

解释程序与编译程序的根本区别:编译方式下,机器上运行的是与源程序等价的目标程序,源程序和编译程序都不再参与目标程序的执行过程,解释方式下,解释程序和源程序要参与到程序的运行过程中,运行程序的控制权在解释程序。简单说:在解释方式下,翻译源程序时不生成独立的目标程序,而编译器则将源程序翻译成独立保存的目标程序。

3、程序设计语言的定义涉及语法(程序设计语言的基本符号组成程序中的各个语法成分的一组规则)、语义(按语法规则构成的各个语法成分的含义,可分为静态语义和动态语义)和语用(表示构成语言的各个记号和使用者的关系)等方面。

4、根据设计程序的方法将程序语言分为命令式和结构化程序设计语言(通常说的结构化程序设计语言属于命令式语言类,其结构特性反映在以下几点:1、用自顶向下逐步精化的方法编程 2、模块组织的方法编程 3、程序只包含顺序、判定(分支)及循环构造)、面向对象的程序设计语言(对象、类)、函数式程序设计语言(特点:表达式中出现的任何函数都可以用其他函数来代替,只要这些函数调用产生相同的值)和逻辑型程序设计语言(以形式逻辑为基础)等范型。

5、程序设计语言的基本成分包括:数据、运算、控制和传输等。

数据成分指一种程序设计语言的数据类型,数据类型用于代表数据对象,还用于在基础机器中完成对值的布局,同时可用于检查表达式中对运算的应用是否正确。数据是程序操作的 对象,使用时要为它分配内存空间。数据名称由用户通过标识符 命名,类型 说明数据占用内存的大小和存放形式,存储类型说明 数据在内存中的位置和生存期。 数据可分为:常量和变量、 全局量和局部量。数据类型有:基本类型(int、char、float、double、bool)、特殊类型(void)、用户定义类型(enum)、构造类型(数组、结构、联合)、指针类型(type*)和抽象数据类型(类类型)。

运算成分指明允许使用的运算符号及运算规则。

控制成分指明语言允许表达的控制结构,程序员使用控制成分 来构造程序中的控制逻辑。

传输成分指明语言允许的数据传输方式,如赋值处理、数据的输入和输出等。

6、函数

C程序有一个或多个函数组成,每个函数都有有个名字,有且仅有一个名字为mian的函数作为程序运行的起点。函数是程序模块的主要成分,它是一段具有独立功能的程序。函数使用涉及:函数定义、函数声明和函数调用。

 函数定义包括:函数首部和函数体。C 程序中不允许函数的嵌套定义。

函数应该先声明后引用。如果程序中对一个 函数的调用在该函数的定义之前进行,则应该在调用前对 被调用函数进行声明。

调用函数需要使用被调用函数的功能时,以名字进行调用,称为函数调用。函数体调用自己称为递归调用。函数调用时实参与形参间交换信息的方法有值调用和引用调用。

(二) 语言处理程序基础

语言处理程序主要将高级语言或汇编 语言编写的程序翻译成某种机器语言程序,使程序 可在计算机上运行。语言处理程序主要分为 汇编程序、编译程序和解释程序3种基本类型。

1、汇编程序

汇编语言是为特定的计算机设计的面向机器的符号化的 程序设计语言。汇编语言源程序需要汇编程序进行翻译。汇编语言源程序由若干条语句组成, 其中有三类:指令语句(机器指令语句,汇编后能产生相应的机器代码,可分为传送指令、算数运算指令、逻辑运算指令、移位指令、转移指令和处理机控制指令等类型)、伪指令语句(指示汇编程序在汇编源程序完成某些工作)和宏指令语句(用户将多次重复使用的程序段定义为宏,每个宏有相应的宏名。宏指令语句就是宏的引用)。    伪指令语句汇编后不产生机器代码,指令语句汇编后要产生相应的机器代码。

汇编程序的功能是将汇编语言编写的源程序翻译成机器指令程序,处理源程序中出现的伪指令。 汇编程序一般需要两次 两次扫描源程序才能完成翻译过程。

2、编译程序

编译程序把某高级语言书写的源程序翻译 成与之等价的目标程序。编译程序的工作过程6个阶段:词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成。

词法分析:对源程序从前到后逐个 字符地扫描,从中识别出一个个单词符号(程序设计语言的基本语法单位)。词法分析输出的单词常以二元组的方式输出, 即单词种别和单词自身的值。

语法分析:在词法分析 的基础上,根据语言的语法规则将单词符号序列分解 成各类语法单位。语法 规则就是各类各种语法单位的构成规则。通过语法分析确定 整个输入串是否构成一个语法上的正确的程序。

 语法分析和词法分析本质上都是对源程序的结构进行分析。

语义分析:分析各语法结构的含义, 检查源程序是否 包含静态语义错误,并收集类型信息供后面的代码生成阶段使用。语法语义都正确的源程序才能翻译成正确的目标代码。

中间代码生成:根据语义分析的输出生成中间代码。中间代码特征:与具体的机器无关。

语义分析和中间代码生成所依据的是语言的语义规则。

 代码优化:中间代码往往在时间和空间上有较大的浪费,当需要生成高效的目标代码时,必须进行优化。优化过程可以在中间代码生成阶段 进行,也可以在目标代码生成 阶段进行。

目标代码生成:这是编译器的最后一个阶段,任务是把中间代码变换成特定机器上的绝对指令代码、可重定位的指令代码或 汇编指令代码, 这一阶段工作与具体的机器密切相关。

符号表管理:符号表作用是记录源程序中各个符号的必要信息,以辅助语义的正确性检查和代码生成,在编译过程中需要对符号表进行快速有效地查找、插入、修改和删除等操作。

出错处理:源程序错误大致可分为静态错误和动态错误。动态错误也称为动态语义错误,它们发生在程序运行。静态错误指在编译阶段发现的 程序错误,可分为语法错误和静态语义错误。

3、解释程序

解释程序是 另一种语言处理程序,在词法、语法和语义分析方面与编译程序的工作 原理基本相同,在是在运行用户程序时,它直接执行源程序或源程序的中间表示形式。因此,解释程序不产生源程序的目标程序,这是它和编译程序的主要区别。

解释程序实现高级语言的方式:源程序被直接解释执行(解释程序对源程序进行逐个字符的检查,然后执行程序语句规定的动作。运行效率很低)、解释程序也可将源程序翻译成某种中间代码形式,然后对中间代码进行解释来实现用户程序的的运行。

解释程序通常可以分为两个部分:第一部分是分析部分,包括通常的词法分析、词法分析和语义分析程序, 经语义分析后把源程序翻译成中间代码,中间代码常采用逆波兰表示形式。第二部分是解释部分,用来对第一部分产生的中间代码进行解释执行。

高级语言编译与解释方式的比较:(1)效率:编译比解释方式可能取得更高的效率。解释方式下运行程序时,解释程序可能需要反复扫描源程序;编译方式下,虽然编译程序创建的目标程序运行的时间一般更长,需要占用的存储空间更多,但源程序只需要被编译程序翻译一次就可以运行,因此总体来讲,编译方式比解释方式可能取得更高的效率(2)灵活性:由于解释程序需要反复检查源程序,使得解释方式比编译方式更灵活。且解释器直接在源程序上工作时,它可以对 错误进行更精准的定位。(3)可移植性:解释器一般也是用某种程序设计语言编写的,因此只要对解释器进行重新编译,就可以使解释器运行在不同的环境中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值