1.1程序设计语言的基本概念
1、低级语言与高级语言:
低级语言:汇编语言
高级语言:常见的有Java、C、C++、PHP、Python、Delphi等
2、翻译形式:汇编、解释、编译
3、程序设计语言的定义:语法、语义、语用
4、程序设计语言的分类:
过程式(命令式和结构式):FORTRAN、Pascal、C
面向对象:Simula、Smalltalk、C++、Objiective C、Java、Python
函数式:lisp、python、scala
逻辑式:Prolog
脚本语言:shell、bat、js、python
1.2 程序设计语言的基本成分
程序语言的基本成分包括数据、运算、控制和函数等
1、数据:
常量和变量
全局量和局部量
数据类型
2、运算:算术运算、关系运算、逻辑运算
3、控制:顺序结构、选择结构、循环结构
4、函数:定义、声明、调用(值调用、引用)
1.3 汇编程序基本原理
1、汇编语言
汇编语言是为特定的计算机或计算机系统设计的面向机器的符号化的程序设计语言。用汇编语言编写的程序称为汇编语言源程序。因为计算机不能直接识别和运算符号语言程序,所以要用专门的翻译程序——汇编程序进行翻译。用汇编语言编写程序要遵循所用语言的规范和约定。
汇编语言源程序由若干条语句组成,一个程序中可以有三类语言:指令语句、伪指令语句和宏指令语句。
2、汇编程序
汇编程序是指将汇编语言所编写的源程序翻译成机器指令的程序。汇编程序一般需要两次扫描源程序才能完成翻译过程。
第一次扫描:检查语法错误,确定符号名字,建立使用的全部符号名字表,每一符号名字后跟一个对应值(地址或数值)。
第二次扫描:在第一次扫描的基础上,将符号地址转换成真地址(代真),利用操作码表将助记符转换成相应的目标码。
1.4编译程序基本原理
1.编译程序
编译程序的工作过程分为六个阶段如下图所示 2、文法
是一个非空有限集合,它的每一个元素被称为终结符号;也是一个非空有限集合,它的每一个元素称为非终结符号;S被称为文法G的开始符号;P是一个非空有限集合,它的元素称为产生式。
1型文法:又称为上下文有关文法;
2型文法:又称为上下文无关文法;
3型文法:又称为正规文法,使用最多;
0型文法:短文法。
3、有限自动机
计算机控制系统的控制程序具有有限自动机(FA)的特征,可以用有限状态机理论来描述。
1、确定有限自动机(DFA)。自动机的每一个状态都有对字母表中所有符号的转移,一个确定的有限自动机是个五元组(S,∑,f,,Z)其中:
S是一个有限集,其中每个元素称为一个状态,
∑是一个有穷字母表,其每个元素称为一个输入字符。
f是S*∑——>S上的单值部分映像。f(A,a)=Q表示当前状态为A,输入为a时,将转换到下一状态Q,Q被称为A的一个后继转态。
∈S,是唯一的一个开始状态。
Z是非空的终止状态集合,ZS
一个DFA可以用两种直观的方式表示:状态转换图和状态转换矩阵。状态转换图简称为转换图,是一个有向图,DFA中的每个状态对应转换图中的一个结点,DFA中的每一个转换函数对应图中的一条有向弧,若转化函数为f(A,a)=Q,则该有向弧从结点A出发,进入结点Q,字符a是弧上的标记。
非确定有限自动机(NFA),自动机的状态对字母表中的每个符号可以有转移,也可以没有转移,对一个符号甚至可以有多个转移,一个不确定的有限自动机也是一个五元组,它与确定有限自动机的区别如下:
f是S*∑——>2S上的映像。对于S中的一个给定状态及输入符号,返回一个状态的集合,即当前状态的后继状态不一定是唯一确定的。
有向弧上的标记可以说
4、正规表达式
对于字母表∑,其上的正规式及其表示的正规集可以递归定义如下。
(1)是一个正规式,它表示集合L()={}。
(2)若a是∑上的字符,则a是一个正规式,它所表示的正规集为{a}。
(3)若正规式,r和s分别表示正规集L(r)和L(s),则:
r|s是正规式,表示集合L(r)UL(s)。
r•s是正规式,表示集合L(r)L(s)。
r*是正规式,表示 集 合(L(r))*。
(r)是正规式,也表示L(r)。
仅由有限次地使用上述三个步骤定义的表达式才是∑上的正规式,其中运算符“|”“。”“*”分别称 为“或”“连接”和“闭包”。在正规式的书写中,连接运算符“。”可省略。运算符的优先级从高到低的顺序排列为“*”“。”“|”。
设∑={a,b},表2-1列出了∑上的一些正规式和相应的正规集。
若两个正规式表示的正规集相同,则认为二者等价,两个等价的正规式U和V记为 U=V。例如,b(ab)*=(ba)*b,(al)*=(a*b*)*。设U、V和 T均为正规式,正规式的代数性质见下表
1.5解释程序的基本原理
解释程序是另一种语言处理程序,在词法、语法和语义分析方面与编译程序的工作原理基本相同,但是在运行用户程序时,它直接执行源程序或源程序的中间代码,因此,解释程序不产生源程序的目标程序,这是它和编译程序的主要区别