一、程序设计语言概述
(一)程序设计语言的基本概念
-
低级语言和高级语言。
a. 低级语言:面向机器的语言,设计效率低,程序可读性差,难以修改和维护。包括机器语言和汇编语言。
b. 高级语言:面向各类应用的程序设计语言,功能更强,抽象级别更高。常见的有Java、C、C++、PHP、Python等。
-
编译程序和解释程序。
a. 语言之间翻译基本方式包括汇编、解释、编译。
b. 高级语言编写的源程序需要对应的解释程序或编译程序对其进行翻译,然后在机器上运行。
c. 编译程序(编译器):将源程序翻译成目标语言程序,然后在计算机上运行目标程序。机器上运行的是与源程序等价的目标程序,源程序和编译程序都不再参与目标程序的执行过程。
d. 解释程序(解释器):或者直接解释执行源程序,或者将源程序翻译成某种中间代码后再加以执行。解释程序和源程序或其某种等价表示要参与到程序的运行过程中,运行程序控制权在解释程序。
-
程序设计语言的定义:语法、语义、语用(构成语言的各个记号和使用者的关系)、语境(编译环境和运行环境)。
-
程序设计语言的分类。
a. 命令式和结构化程序设计语言:C、PASCAL等。
b. 面向对象的程序设计语言:C++、Java、Smalltalk等。
c. 函数式程序设计语言:Haskell、Scala、Scheme、APL等。
d. 逻辑型程序设计语言:PROLOG等。
(二)程序设计语言的基本成分
-
数据成分:常量和变量、全局量和局部量、数据类型。
-
运算成分:运算符号、运算规则。
-
控制成分:顺序结构、选择结构、循环结构。
-
传输成分:数据传输方式,如赋值处理、数据的输入和输出等。
-
函数:函数定义、函数声明、函数调用。
a. 函数值调用:将实参的值传递给形参,实参可以是变量、常量和表达式。
b. 函数引用调用:将实参的地址传递给形参,实参必须有地址,不能是常量(值)、表达式。
二、语言处理程序基础
(一)汇编程序基本原理
- 汇编语言:包括指令语句、伪指令语句和宏指令语句。
(二)编译程序基本原理
-
编译程序工作过程:(源程序)→词法分析→语法分析→语义分析→中间代码生成→代码优化→目标代码生成→(目标代码)。
a. 词法分析:队员程序从前到后(从左到右)逐个字符的扫描,从中识别出一个个“单词”符号(如关键字、标识符、常数、运算符等)。输入是源程序,输出是记号流。
b. 语法分析:在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,可以发现程序中所有的语法错误。输入是记号流,输出是语法树(分析树)。
c. 语义分析:分析各语法结构的含义,检查源程序是否包含静态语义错误(不能发现动态语义错误),并收集类型信息供后面的代码生成阶段使用,主要工作是进行类型分析和检查。输入是语法树(分析树)。
d. 中间代码生成:根据语义分析的输出生成中间代码,可以跨平台,与具体机器无关。常见中间代码包括后缀式、三地址码、三元式、四元式和树(图)等形式。
e. 代码优化:依据程序的等价变换规则。
f. 目标代码生成:把中间代码变换成特定机器上的绝对指令代码。这一阶段工作与目标机器体系结构相关,寄存器分配工作在这个阶段进行。
g. 符号表:记录源程序中各个符号的必要信息,以辅助语义的正确性检查和代码生成。
h. 出错处理。
(三)解释程序基本原理
- 解释程序:在词法、语法和语义分析方面与编译程序工作原理基本相同,但在运行用户程序时直接执行源程序或源程序的中间表示形式。通常可以分为分析和解释两部分。