编译原理 第一章 绪论
~~ 上一篇文章点击跳转 ~~ : 数据库系统概念第一章
~~ 下一篇文章点击跳转 ~~ : 编译原理第四章语法分析
计算机程序设计语言及编译
编译: 将高级语言(源语言)翻译成汇编语言或机器语言(目标语言)的过程
编译器在语言处理系统中的位置: 源程序—>预处理器—>经过预处理的源程序—>编译器—>汇编语言程序—>汇编器—>可重定位的机器代码—>链接器Linker/加载器Loader—>目标机器代码
预处理器的作用:
- 把存储在不同文件中的源程序聚合在一起
- 把成为宏的缩写语句转换为原始语句
加载器的作用:
- 修改可重定位地址
- 将修改后的指令和数据放到内存中适当的位置
可重定位: 在内存中存放的起始位置L不是固定的
绝对地址 = 起始位置 + 相对地址
链接器的作用:
- 将多个可重定位的机器代码文件(包括库文件)连接到一起
- 解决外部内存地址问题
编译器的结构
分析部分/前端: 与源语言相关
综合部分/后端: 与目标语言相关
词法分析: 从左到右逐行扫描源程序的字符,识别出各个单词,确定单词的类型。将识别出的单词转换成统一的机内表示——词法单元(token)形式 (token: <种别码,属性值>)
语法分析: 语法分析器(parser)从词法分析器输出的token序列中识别出各类短语,并构造语法分析树(parse tree)
语义分析:
- 收集标识符的属性信息
- 种属(Kind): 简单变量、符合变量(数组、记录、…)、过程、…
- 类型(Type): 整型、实型、字符型、布尔型、指针型、…
- 存储位置、长度
- 值
- 作用域
- 参数和返回值信息: 参数个数、参数类型、参数传递方式、返回值类型、…
- 语义检查
- 变量或过程未经声明就使用
- 变量或过程名重复声明
- 运算分量类型不匹配
- 操作符与操作数之间的类型不匹配:
- 数组下标不是整数
- 对非数组变量使用数组访问操作符
- 对非过程名使用过程调用操作符
- 过程调用的参数类型或数目不匹配
- 函数返回类型有误
常用的中间表示形式: 三地址码、语法树/语法结构树
目标代码生成器: 为程序中使用的变量合理分配寄存器
优化器: 为改进代码所进行的等价程序变换,使其运行得更快、占用空间越少,或二者兼顾
~~ 上一篇文章点击跳转 ~~ : 数据库系统概念第一章
~~ 下一篇文章点击跳转 ~~ : 编译原理第四章语法分析
查看更多文章