目录
2.1 程序设计语言的基本概念
2.2 程序设计语言的基本成分
2.3 编译程序基本原理
前言:
笔记来自《文老师软考数据库》教材精讲,精讲视频在b站,某宝都可以找到,个人感觉通俗易懂。
2.1 程序设计语言的基本概念
- 程序设计语言是为了书写计算机程序而人为设计的符号语言,用于对计算过程进行描述、组织和推导。
- 低级语言:机器语言 (计算机硬件只能识别o和1的指令序列),汇编语言
- 高级语言:功能更强,抽象级别更高,与人们使用的自然语言比较接近。
- 各程序设计语言特点:
(1)Fortran语言:科学计算,执行效率高
(2)Pascal语言:为教学开发,表达能力强
(3)C语言:指针操作能力强,可以开发系统级软件,高效
(4)C++语言:面向对象,高效。
(5)Java语言:面向对象,中间代码,跨平台
(6)C#语言:面向对象,中间代码,.Net框架
(7)Python是一种面向对象、解释型计算机程序设计语言
(8)Prolog是逻辑型程序设计语言。 - 汇编:将汇编语言翻译成目标程序执行。
- 解释和编译:将高级语言翻译成目标程序执行。不同之处在于:
(1)编译程序生成独立的可执行文件,直接运行,运行时无法控制源程序,效率高。
(2)而解释程序不生成可执行文件,可以逐条解释执行,用于调试模式,可以控制源程序,因为还需要控制程序,因此执行速度慢,效率低。 - 程序设计语言定义三要素::语法、语义、语用。
(1)语法是指由程序设计语言的基本符号组成程序中的各个语法成分 (包括程序)的-组规则,其中由基本字符构成的符号 (单词)书写规则称为词法规则,由符号构成语法成分的规则称为语法规则。
(2)语义是程序设计语言中按语法规则构成的各个语法成分的含义,可分为静态语义和动态语义。静态语义指编译时可以确定的语法成分的含义,而运行时刻才能确定的含义是动态语义。一个程序的执行效果说明了该程序的语义,它取决于构成程序的各个组成部分的语义。
(3)语用表示了构成语言的各个记号和使用者的关系,涉及符号的来源、使用和影响。 - 语言的实现则有个语境问题。语境是指理解和实现程序设计语言的环境,包括编译环境和运行环境。
- 程序设计语言的分类:
(1)命令式和结构化程序设计语言,包括Fortran、PASCAL和C语言
(2)面向对象程序设计语言,包括c++、JAVA和Smalltalk语言
(3)函数式程序设计语言,包括LISP、Haskell、Scala、Scheme、APL等
(4)逻辑型程序设计语言,包括PROLOG。 - 程序设计语言的基本成分:
(1)数据成分:指一种程序设计语言的数据和数据类型。数据分为常量(程序运行全局量 (存储空间在静态数据时不可改变)、变量(程序运行时可以改变)区分配)、局部量 (存储空间在堆栈区分配)数据类型有整型、字符型、双精度、单精度浮点型、布尔型等。
(2)运算成分:指明允许使用的运算符号及运算规则。包括算术运算、逻辑运算关系运算、位运算等。
(3)控制成分:指明语言允许表述的控制结构。包括顺序结构、选择结构、构。
(4)传输成分:指明语言允许的数据传输方式。如赋值处理、数据的输入输出等。
2.2 程序设计语言的基本成分
- 函数:C程序由一个或多个函数组成,每个函数都有一个名字,其中有且仅有个名字为main的函数作为程序运行时的起点。函数的使用涉及3个概念:函娄定义、函数声明和函数调用。
函数的定义包括两部分:函数首部和函数体。函数的定义描述了函数做什么和怎么做。 - 函数首部说明了函数返回值的数据类型、函数的名字和函数运行时所需的参数及类型。函数所实现的功能在函数体部分进行描述。
- 函数应该先声明后引用。如果程序中对一个函数的调用在该函数的定义之前进行,则应该在调用前对被调用函数进行声明。函数原型用于声明函数。函数声明的一般形式为:返回值类型函数名(参数类型表)。
- 函数调用的一般形式为:函数名(实参表)
- 函数调用时实参与形参间交换信息的方法有值调用和用调用两种
(1)值调用 (Call by Value) :若实现函数调用时将实参的值传递给相应的形参,则称为是传值调用。在这种方式下形参不能向实参传递信息。在C语言中,要实现被调用函数对实参的修改,必须用指针作为参数。即调用时需要先对实参进行取地址运算,然后将实参的地址传递给指针形参。其本质上仍属于值调用。这种方式实现了间接内存访问。
(2)引用调用 (Call by Reference):引用是C++中引入的概念,当形式参数为引用类型时,形参名实际上是实参的别名,函数中对形参的访问和修改实际上就是针对相应实参所做的访问和改变。
2.3 编译程序基本原理
- 编译程序对高级语言源程序进行编译的过程中,要不断收集、记录和使用源程序中一些相关符号的类型和特征等信息,并将其存入符号表中,编译过程如下:
(1)词法分析:是编译过程的第一个阶段。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。
(2)语法分析:是编译过程的一个逻辑阶段。语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语,如“程序”,“语句”,“表达式”等等语法分析程序判断源程序在结构上是否正确。
(3)语义分析:是编译过程的一个逻辑阶段语义分析的任务是对结构上正确的源程序进行上下文有关性质的审查,进行类型审查。如类型匹配、除法除数不为0等。又分为静态语义错误 (在编译阶段能够查找出来)和动态语义错误 (只能在运行时发现)。
- 中间代码和目标代码:中间代码是根据语义分析产生的,需要经过优化链接最终生成可执行的自标代码。引入中间代码的目的是进行与机器无关的代码优化处理。常用的中间代码有后缀式(逆波兰式)三元式(三地址码)、四元式和树等形式。需要考虑三个问题(一是如何生成较短的目标代码;二是如何充分利用计算机中的寄存器,减少目标代码访问存储单元的次数;三是如何充分利用计算机指令系统的特点,以提高目标代码的质量)
- 前缀表达式:+ab
- 中缀表达式:a+b
- 后缀表达式:ab+
- 主要掌握上述三种表达式即可,其实就是树的三种遍历,一般正常的表达式是中席遍历,即中缀表达式,根据其构造出树,再按题目要求求出前缀或后缀式。
- 简单求法:后缀表达式是从左到右开始,先把表达式加上括号,再依次把运算符加到本层次的括号后面。