语言的本质
一组规则的组合
- 字母表的定义
- 词法规则
- 语法规则
- 语义规则
- 语用规则
与编译有关的三种语言和三种程序
源语言 | 工具语言 | 目标语言 |
---|---|---|
源程序 | 编译程序 | 目标程序 |
程序设计语言的分类
强制式语言 | 函数式语言 | 逻辑式语言 | 对象式语言 |
---|---|---|---|
冯·诺依曼模型 | 数学函数(函数运算) | 数理逻辑、谓词演算 | 抽象数据类型 |
冯·诺依曼体系结构
- 构成基础
存储器、控制器、处理器、ip - 特点
- 数据、指令以二进制形式存储
- 存储程序的工作方式
- 程序顺序执行,可强制修改执行顺序
- 存储器内容可以被修改
变量的4个属性
作用域
- 静态绑定:依据变量定义的位置
- 动态绑定:依据过程的调用关系
- 全局变量
- 局部变量
- 非局部变量
生存期
- 全局变量静态分配
- 局部变量运行前静态分配,运行时动态分配
- 非局部变量可静态分配可动态分配
- 匿名变量是通过指针访问,是动态分配
值
- 二进制编码
- 按类型解释
- 变量与值的绑定是动态的
- 常量的值不能修改
- 数据对象表示存储区和它保存的值
类型
静态绑定语言是面向编译的语言
动态绑定语言是面向解释的语言
虚拟机
M1是实际的机器
机器语言是汇编语言的M2=M1+汇编程序
机器语言是高级语言的M3=M2+编译程序
程序单元
定义:程序执行过程中被独立调用单元,包括子程序、分程序、过程等
表示:
编译时:单元的源程序
运行时:一个代码段和一个活动记录组成,称为单元实例
活动记录:执行单元需要的信息和局部变量等数据存储区
实例:
- 非局部变量:一个程序单元可以引用未被本单元说明而被其它单元说明的变量
- 全局变量:一个程序中各个程序单元都可以引用的变量
C程序运行时的存储空间
程序代码区:存储程序代码(编译后形成的二进制机器指令序列)
数据静态存储区:存储程序的常量数据、全局数据、static数据
数据动态存储区:
栈:存储返回地址、CPU现场、临时变量、形参、局部变量
堆:存储动态内存申请数据