编译原理(一)
来源:互联网 发布:mind mapping破解软件 编辑:程序博客网 时间:2024/04/30 09:43
说明:本文参考 李文生 老师讲义!如有不当之处请及时联系
程序设计语言
人与计算机之间沟通的工具。
低级语言
- 机器语言
- 符号语言 汇编语言
问题:符号语言是什么?
高级语言
- 过程性语言——面向用户的语言 如:C、Pascal
- 专用语言——面向问题的语言 如: SQL
优点:
- 独立于机器。所编程序移植性比较好
- 不必考虑存储单元的分配问题,数据的外部形势转换成机器的内部形势等细节
- 具有丰富的数据结构和控制结构
- 更接近于自然语言
- 编程效率高
翻译程序
源程序(高级语言/汇编语言编写)———(经过)翻译程序——>(得到)目标程序(目标语言表示,此处目标不一定是机器语言)
汇编语言程序——汇编程序——机器语言程序
高级语言程序——编译程序——低级语言程序
高级语言程序:编译阶段处理源程序,执行阶段处理数据。
解释程序同时处理源程序和数据。边解释边执行,不生成目标程序。
解释程序的优缺点
优点:与用户通信方便,比较节省内存空间 缺点:效率很低 解决办法:先翻译成某种中间形式的程序,如JAVA
编译程序的组成
分析阶段(静态分析)
根据源语言的定义,分析源程序的结构和语义(程序源码转换为某种内部表示)
- 词法分析——词法分析器——识别具有独立意义的字符串作为token(记号),并组织成记号流
- 语法分析——语法分析器——将记号流根据相应语言的语法规则分组,形成语法短语——分析树来表示
- 语义分析——语义分析器——根据源语言的语义规则对语句的意义进行检查(如类型检查)
综合阶段
根据分析结果构造出所要求的目标程序
- 中间代码生成——中间代码易于翻译成目标代码
- 代码优化——对代码进行改进,使之占用的空间少、运行速度快(首先是在中间代码上进行)
- 目标代码生成——生成的目标代码一般是可以重定位的机器代码或汇编语言代码
符号表的管理
- 错误诊断和处理
编译原理的典型结构
符号表管理
记录源程序中使用的标识符;收集每个标识符的各种属性信息是编译程序的重要工作。
符号表:若干记录组成的数据结构
- 每个标识符在表中有一条记录
- 记录的域是标识符的属性
对符号表结构的要求:
- 允许快速地查找到标识符的记录
- 可在其中存取数据
标识符的各种属性是在编译的各个不同阶段填入符号表的。
预处理器
主要功能:
- 宏处理
- 文件包含
- 语言扩充
连接装配程序
两个主要任务:
装入:
- 读入 可重定位的机器代码
- 修改重定位地址
- 把修改后的指令和数据放在内存的适当地方或形成可执行文件
连接
- 把几个可重定位的机器代码连接成一个可执行的程序
0 0
- 编译原理(一)
- 编译原理(一)
- 编译原理(一)
- 编译原理:(一)
- 编译原理 (一)
- 编译原理学习(一)
- 编译原理(一):引论
- 【编译原理】语法分析(一)
- 编译原理学习(一)--编译以及编译过程
- 编译原理(一)背景介绍
- 编译原理之文法(一)
- 【软考】(一)编译原理-文法
- 【编译原理】TINY编译器学习(一)
- 编译原理之常数处理机(一)
- 编译原理(一)词法分析器
- 【编译原理】概述总结(一)
- 编译原理学习笔记(一)体系结构
- 编译原理学习(一)词法分析器
- Hive View
- Light OJ-1082 - Array Queries,线段树区间查询最大值,哈哈,水过~~
- java实现等比例缩略图
- 交叉编译环境-搭建开发环境
- Oracle查看表空间大小及使用率
- 编译原理(一)
- 编码规范系列(一):Eclipse Code Templates设置
- 算法之冒泡排序
- 面向对象的理解
- 如何使用Jackson
- server 同一服务器上的两个php.ini文件!!
- android 真机调试
- `Gtk-WARNING **: Locale not supported by C library. ` when starting apps from the commandline
- 学习计划