编译原理(1)
来源:互联网 发布:java zxing 二维码 编辑:程序博客网 时间:2024/05/16 13:50
引论
程序设计语言及编译
程序设计语言
- 机器语言
- 汇编语言
- 高级语言
编译程序
编译程序是现代计算机系统的基本组成部分.
从功能上看,一个编译程序就是一个语言翻译程序,它把一种语言(称作源语言)书写的程序翻译成另一种语言(称作目标语言)的等价的程序.
编译程序:A语言—–>B语言的程序(两者逻辑上等价)
编译程序:高级语言 ——->低级语言
解释程序:边解释边执行
源程序执行途径
解释程序(Interpreter)
- 不产生目标程序文件
- 不区别翻译阶段和执行阶段
- 翻译源程序的每条语句后直接执行
- 程序执行期间一直有解释程序守候
- 常用于实现虚拟机
编译过程概述
- 词法分析
- 语法分析
- 语义分析
- 中间代码生成
- 代码优化
- 目标代码生成
编译过程与语言翻译的对比
词法分析:扫描源程序—–>区分单词—–>换为属性字
语法分析:单词序列—–>语法短语(程序、表达式、条件语句……)检查语法错误,若无错误,给出正确的语法结构。这种语法短语也称语法单位,可表示成语法树。
语义分析与中间代码生成:根据语法结构,分析含义,产生中间代码。
中间代码多采用三地址指令或四元式形式。
| 算符 | 左操作数| 右操作数 |结果 |
| ————- |:————-:| —–:|—–:|
代码优化:时间和空间
目标代码生成:中间代码—–>低级语言代码
编译程序结构
- 表格管理
- 出错处理
源程序错误:
- 语法错误:不符合语法(或语义)规则的错误,可在词法分析或语法分析时检测。
- 语义错误:不符合语义规则的错误,在语义分析(或运行时)可检测。
遍(趟)pass
- 编译的若干阶段通常以一遍来实现,每遍读一次输入文件、产生一个输出文件。
- 多个编译阶段可以组合为编译的一遍,并且每一遍中的各编译阶段的工作可以相互交错。
编译程序的生成
- 移植
- 自编译
T型图
- S:编译程序所实现的源语言
- T:目标语言
- I:编译程序的实现语言
编译程序与T型图
(M机器上运行的)本地编译器
(M机器上运行的)交叉编译器
用已有语言L1实现新语言L2
方法:
- 用L1语言编写A机器的L2语言编译程序
- 将该L2语言的编译程序用L1语言的编译程序进行编译
移植:
用A机器上已有的语言L编写一个在B机器上运行的语言L的编译程序。方法:
- 用L编写在A机器上运行的产生B机器代码的L编译程序源程序X
- 用L编译程序对X进行编译后,得到一个能在A机器上运行的产生B机器代码的编译程序Y(交叉编译程序)
- 再用Y对X进行编译,得到能在B机器上运行的L语言的编译程序
1 0
- 编译原理(1)
- 编译原理(1)
- 重温编译原理(1)
- 重温编译原理(1)
- 编译原理笔记(1)
- 编译原理学习(1)
- 编译原理复习(1)
- 编译原理(1)-----文法
- 编译原理复习题(1)
- 编译原理(1):绪论
- 编译原理笔记(1)
- 【编译原理】:编译原理期末复习1
- 编译原理-LL(1)算法
- Android编译和运行原理(1)
- js的编译原理(1)
- 《编译原理》学习总结(1)
- 编译和运行原理(1)
- 编译原理复习(1s)
- 源码阅读--OkHttp3
- 火焰图相关的一些东西
- CodeForces 798A Mike and palindrome
- #HDU3435#A new Graph Game(环+KM)
- Ubuntu输入su提示认证失败的解决方法
- 编译原理(1)
- 数据库的水平分割和垂直分割
- leetcode:Jump Game II
- PHP设计模式系列(二十一):享元模式
- kafka-01-基础知识
- 基于 Django1.10 文档的深入学习(27)—— django.conf.urls utility functions 之 url(),include(),static()
- 【C语言训练】亲密数
- ATM面向对象分析与设计之——顺序图
- ACM中字符串题常用算法