程序设计语言
程序语言概述
- 基本概念
- 机器指令程序是最基本的计算机语言(0、1组成)
- 语言之前的翻译的基本方式:汇编、解释和编译
- 源程序:用某种高级语言或汇编语言编写的程序
- 程序语言
- 定义:语言、语义(静态语义和动态语义)、语用(表示了构成语言的各个记号和使用者的关系)等方面
- 语言的实现有语境问题(指理解和实现程序设计语言的环境,包括编译环境和运行环境)
- 分类:
- 命令式和结构化程序设计语言。结构性主要体现在:一是自顶向下逐步精化的方法变成、而是按模块组织的方法编程、三是程序只包含顺序、判定及循环构造,而每种构造只允许单入口和单出口
- 面向对象的程序设计语言。
- 函数式程序设计语言。特点:其程序和数据的形式是等价的,这样数据结构可以作为程序执行,程序也可以作为数据修改
- 逻辑型程序设计语言。是一系列事实、数据对象或事实间的具体关系和规则的集合;关键操作时模式匹配
- 程序语言的基本成分
- 数据成分:指一种程序语言的数据类型。数据是程序操作的对象,具有存储类别(说明数据在内存中的位置和生存期)、类型(说明数据占用内存的大小和存放形式)、名称、作用域(说明可以使用数据的代码范围)和生存周期(说明数据占用内存的时间特点)等属性,在使用时为它分配内存空间
- 常量和变量
- 作用域可分为:全局量和局部量
- 数据类型:基本类型、用户自定义类型(enum)、构造类型(数组、结构)及其他类型
- 运算成分:指明允许使用的运算符号及运算规则
- 控制成分:指明语言允许表达的控制结构。
- 顺序结构
- 选择结构
- 循环结构
- C(C++)语言提供的控制语句
- 运输成分:指明语言允许的数据传输方式,如赋值处理、数据的输入和输出等
- 函数:程序模块的主要成分
- 定义:函数首部(说明函数返回值的数据类型、函数的名字和函数运行时所需的参数及类型)和函数体
- 声明:先声明后引用
- 调用:只需要知道被调用函数的名字、返回值和需要向被调用函数传递的参数(个数、类型、顺存)等信息。通过函数调用实现了函数定义时描述的功能
- 值调用:将实参的值传递给相应的形参
- 引用调用:函数中对形参的访问和修改实际上就是针对相应实参所做的访问和改变
语言处理程序基础
- 语言处理程序主要作用:将高级语言或汇编语言编写的程序编译成某种机器语言程序
- 基本类型:汇编程序、编译程序、解释程序
- 汇编程序:
- 汇编语言:为特定的计算机设计的面向机器的符号化的程序设计语言。汇编语言源程序有三类语句:
- 指令语句:将其汇编后能产生相应的机器代码,能被CPU直接识别并执行相应的操作。在程序运行时完成
- 伪指令语句:指示汇编程序在汇编源程序时完成某些工作。汇编后不产生机器代码。在源程序被汇编时完成
- 宏指令语句:允许用户将多次重复使用的程序段。
- 汇编程序
- 功能:将用汇编语言编写的源程序翻译成机器指令程序。一版需要两次扫描源程序才能完成编译过程(第一次扫描的主要工作的定义符号的值并创建一个符号表ST,第二次扫描的任务是产生目标程序)
- 工作过程
- 词法分析:任务是把构成源程序的字符串转换成单词符号徐柳,用3型文法或正规表达式描述。
- 语法分析:任务是根据语言的预发规则分析单词串是否构成短语和句子,即表达式、语句和程序等基本语言结构。大多数采用上下文无关文法进行描述。分析方法:自底向上和自顶向下
词法分析和语法分析在本质上都是对源程序的结构进行分析 - 语义分析:主要工作是进行类型分析和检查
- 中间代码生成:最常用的一种中间代码是三地址码,其实现方式采用四元式(运算符,运算对象1,运算对象2,运算结果)
语义分析和中间代码生成所依据的是语言的语义规则 - 代码优化:优化所依据的原则是程序的等价变换规则
- 目标代码生成 :任务是把中间代码变换成也定机器上的绝对指令代码,可重定位的指令代码或汇编指令代码。由代码生成器实现
- 符号表管理:符号表记录源程序中各个符号的必要信息,在词法分析阶段建立,使用延续到目标代码的运行阶段
- 出错处理:静态错误值编译阶段发现的程序错误,可分为语法错误和静态语义错误
+文法和语言 - 文法:描述语言语法结构的规则,是一个四元组
- 文法分类:0型(短语文法,功能相当于图灵机,递归可枚举的)、1型(上下文有关文法)、2型(上下文无关文法)和3型(等价于正规式,正规文法或线性文法)
- 编译程序
- 解释程序
- 解释程序不产生源程序的目标程序
- 基本结构:第一部分是分析部分(包括通常的词法分析、语法分析和语义分析程序),第二部分是解释部分
- 高级语言编译与解释方式的比较