赞
踩
目录
I love you ——> 编译程序能够把一个程序从源语言翻译成目标语言
把英文翻译成中文 ——> 编译程序工作的五个阶段
(1) 识别出句子中的一个个单词 ——> 词法分析
(2) 分析句子的语法结构 ——> 语法分析
(3) 根据句子的含义进行初步翻译 ——> 中间代码产生
(4) 对译文进行修饰 ——> 优化
(5) 写出最后的译文 ——>目标代码的产生
(1) 在分析之前源程序仅仅是一个个字符序列
(2) 任务:输入源程序,对构成源程序的字符串进行扫描分解,识别出单词符号
(3) 依循原则:构词规则
[1]学习某种语言,首先要了解该语言的单词构成规则 eg: 一般的语言会要求用标识符来表示变量名,而标识符又明确是以字母开头的字母数字串 等等
(4)描述工具:有限自动机
[1] 用形式化的方法来描述这些规则,为词法分析提供了基础
[2] for(基本字) i(标识符) :=(赋值号) 1(整常数) to(基本字) 100(整常数) do(基本字)
(1) 任务: 在词法分析的基础上,根据语法规则把单词符号串分解成各类语法单位(语法范畴)
(2) 依循原则: 语法规则
(3) 描述工具: 上下文无关文法
[1] 为形式化的描述语法规则进行语法分析提供了基础
[2] Z := X + 0.618*Y
[3] 0.618*Y (记为@1)——>算数表达式
X+@1 (记为@2) ——>算数表达式
Z:=@2 ——> 赋值语句
(1)任务: 对各类语法单位按照语言的语义进行初步翻译
(2)依循原则: 语义规则
(3)描述工具: 属性文法
(4)中间代码: 三元式 四元式 树
[1]Z := X + 0.618*Y
序号 OPR OPN1 OPN2 RESULT 注释 (1) * 0.618 Y T1 T1 := 0.618*Y (2) + X T1 T2 T2 := X+T1 (3) := T2 Z Z := T2
(1)任务: 对前阶段产生的中间代码进行加工变换,以期在最后阶段产生更高效的目标代码
(2)高效: 程序在时间和空间上有更高的效率
(3)依循原则: 程序的等价变换规则
(4)
FOR K := 1 TO 100 DO BEGIN X := I+1; M := I+10*K; N := J+10*K; END
序号 OPR OPN1 OPN2 RESULT 注释 (1) := 1 K K := 1 (2) j< 100 K (10) if (100<K) goto (10) (3) + I 1 X X := I+1 (4) * 10 K T1 T1 = 10*K (5) + I T1 M M := I+T1 (6) * 10 K T2 T2 = 10*K (7) + J T2 N N := J+T2 (8) + K 1 K K := K+1 (9) J (2) goto (2) (10) (5) (2)~(9)构成了循环 执行100次 每次循环都要执行4个加法以及2个乘法 一共是执行400个加法和200个乘法 优化后的代码如下
序号 OPR OPN1 OPN2 RESULT 注释 (1) + I 1 X X := I+1 (2) := I M M:=I (3) := J N N:=J (4) := 1 K K:=1 (5) j< 100 K (10) if (100<K) goto (10) (6) + M 10 M M:=M+10 (7) + N 10 N N:=N+10 (8) + K 1 K K:=K+1 (9) J (5) goto (5) (10) (6)(前4条语句)循环开始前,先计算各个变量的初始值, 循环内 M N有规律变换,在循环内用加法实现 达到之前乘法的效果 从之前的400个加法和200个乘法 编程现在301个加法
(1)任务: 把中间代码变换成特定机器上的目标代码
(2)依赖于硬件系统结构和机器指令的含义
(3)目标代码的三种形式 (操作系统里面涉及)
[1] 汇编指令代码: 需要进行汇编
[2] 绝对指令代码: 可直接执行
[3] 可重新定位指令代码: 需要连接
(4) b=a+2
操作码 寄存器操作数 操作数标志 第二操作数 MOV a,R1 0001 01 00 00000000 ADD #2,R1 0011 01 10 00000010 MOV R1,b 0100 01 00 00000100 变换后 L=00001111 0001 01 00 00001111 0011 01 10 00000010 0100 01 00 00010011
(源程序)--->词法分析器--->
(单词符号)--->语法分析器--->
(语法单位)--->语义分析与中间代码生成器--->
(中间代码 四元式)--->优化段--->
(中间代码 四元式)--->目标代码生成器--->
--->目标代码
符号表管理: 完成编译过程中各种对象信息的存储、组织、修改,为各阶段的分析和转换提供依据 上面的5个阶段都会跟符号表的管理打交道
出错处理: 编译程序一般把编译各阶段发生的错误都集中交给出错处理模块进行处理,出错处理要求全面准确,能够指出错误发生的代码的位置,建议
出错处理程序
发现源程序中的错误,把有关错误信息报告给用户
语法错误
源程序中不符合语法(词法)规则的错误
非法字符 括号不匹配 缺少;、等
语义错误
源程序中不符合语义规则的错误
说明错误 作用域错误 类型不一致
遍(pass)
(1) 对源程序或源程序中间表示从头到尾扫描一次
(2)阶段与遍是不同的概念
一遍可以由若干段组成
一个阶段也可以分若干遍完成
1.以机器语言和汇编语言为工具
优点: 可以针对具体的机器,充分发挥计算机的系统功能,生成的程序效率高
缺点: 程序难读 难写 易出错 难维护 生成效率低
2.高级语言
3.移植
4.自编译
5.编译程序自动产生
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。