- 程序设计语言概述
-
- [低级语言 ------ 机器指令、汇编语言](#低级语言 —— 机器指令、汇编语言)
- [高级语言 ------](#高级语言 ——)
- 翻译:汇编、解释和编译
- [语言处理程序基础 ------ 翻译给计算机,汇编、编译、解释三类](#语言处理程序基础 —— 翻译给计算机,汇编、编译、解释三类)
-
- [编译程序基本原理 ------ 词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成](#编译程序基本原理 —— 词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成)
- 文法和语言的形式描述
-
- [确定的有限自动机(Deterministic Finite Automata, DFA)](#确定的有限自动机(Deterministic Finite Automata, DFA))
- [不确定的有限自动机(Nondeterministic Finite Automata, NFA)](#不确定的有限自动机(Nondeterministic Finite Automata, NFA))
程序设计语言概述
低级语言 ------ 机器指令、汇编语言
计算机硬件只能识别由 0、1 组成的机器指令序列,即机器指令程序,因此 机器指令 是最基本的计算机语言。由于机器指令是特定的计算机系统所固有的、面向机器的语言,所以用机器语言进行程序设计时效率很低,程序的可读性很差,也难以修改和维护。
因此,人们就用容易记忆的符号代替 0、1 序列来表示机器指令,例如,用 ADD 表示加法、用 SUB 表示减法等。用符号表示的指令称为汇编指令 ,汇编指令的集合被称为 汇编语言。
高级语言 ------
在此基础上,人们开发了功能更强、抽象级别更高的语言以支持程序设计,于是就产生了面向各类应用的程序设计语言,称为 高级语言。
翻译:汇编、解释和编译
- 用某种高级语言或汇编语言编写的程序称为源程序,源程序不能直接在计算机上执行。
- 如果源程序是用汇编语言 编写的,则需要一个汇编程序 将其翻译成目标程序后才能执行。
- 如果源程序是用某种高级语言 编写的,则需要对应的 解释程序或编译程序对其进行翻译,然后在机器上运行。
解释程序也称为解释器,它 或者直接解释执行源程序 ,或者将源程序翻译成某种中间代码后再加以执行;
而编译程序(编译器)则是 将源程序翻译成目标语言程序 ,然后 在计算机上运行目标程序。
语言处理程序基础 ------ 翻译给计算机,汇编、编译、解释三类
语言处理程序主要作用是将高级语言或汇编语言编写的程序翻译成某种机器语言程序,使程序可在计算机上运行。语言处理程序主要分为汇编程序、编译程序和解释程序 3 种基本类型。
编译程序基本原理 ------ 词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成
编译程序的功能是把某高级语言书写的源程序翻译成与之等价的目标程序(汇编语言或机器语言)。
-
词法分析 :是对源程序从前到后(从左到右) 逐个字符地扫描 ,从中 识别出一个个"单词" 符号。
- "单词"符号是程序设计语言的基本语法单位,关键字(或称保留字)、标识符、常数、运算符和分隔符(如标点符号、左右括号)等。
- 词法分析程序输出的"单词"常以 二元组的 方式输出,即 单词种别和单词自身的值。
-
语法分析 :根据语言的语法规则将单词符号序列分解成各类语法单位 ,如"表达式""语句"和"程序"等。语法规则就是各类语法单位的构成规则。通过语法分析 确定整个输入串是否构成一个语法上正确的程序。
- 如果源程序中没有语法错误,语法分析后就能正确地 构造出其语法树 ;否则指出语法错误,并给出相应的诊断信息。对
id1:=id2+id3*60
进行语法分析后形成的语法树如图,
- 如果源程序中没有语法错误,语法分析后就能正确地 构造出其语法树 ;否则指出语法错误,并给出相应的诊断信息。对
-
语义分析 :分析各语法结构的含义 ,检查源程序是否包含静态语义错误,并收集类型信息 供后面的代码生成阶段 使用。只有语法和语义都正确的源程序才能翻译成正确的目标代码。
- 一个主要工作是进行类型分析和检查。如,整除取余运算符只能对整型数据进行运算,若其运算对象中有浮点数就认为是类型不匹配的错误。
- 对于声明语句 ,需要记录所遇到的符号的信息 ,所以应进行符号表的填查工作。
- 第一行存放标识符 X X X 的信息,其类型为
real
,为它分配的逻辑地址是 0 ;第二行存放 Y Y Y 的信息,其类型是real
,为它分配的逻辑地址是 4。在这种语言中,为一个real
型数据分配的存储空间是 4 个存储单元。 - 对于可执行语句 ,则检查结构合理的表达式是否有意义。对
id1:=id2+id3*60
进行语义分析后的语法树 如图所示,其中增加了一个语义处理结点inttoreal
,该运算用于将一个整型数转换为浮点数 。
-
中间代码生成 :根据语义分析的输出 生成中间代码 。"中间代码"是一种简单且含义明确的记号系统,可以有若干种形式,它们的共同特征是与具体的机器无关 。最常用的一种中间代码是与汇编语言的指令非常相似的 三地址码 ,其实现方式 常采用四元式
(运算符,运算对象1,运算对象2,运算结果)
。- 其中,
t1
、t2
、t3
是编译程序生成的临时变量 ,用于存放临时的运算结果。
- 其中,
-
代码优化 :由于编译器将源程序翻译成中间代码的工作是机械的、按固定模式进行的 ,因此,生成的中间代码往往在时间上和空间上有较大的浪费 。当需要生成高效的目标代码时,必须进行优化。优化过程可以在中间代码生成阶段进行,也可以在目标代码生成阶段进行。
-
目标代码生成 :把中间代码变换成 特定机器上的绝对指令代码、可重定位的指令代码或汇编指令代码,这个阶段的工作与具体的机器密切相关。
文法和语言的形式描述
有限自动机 是一种识别装置的抽象概念,它能 准确地识别正规集。有限自动机分为两类:确定的有限自动机和不确定的有限自动机。
确定的有限自动机(Deterministic Finite Automata, DFA)

不确定的有限自动机(Nondeterministic Finite Automata, NFA)
