编译原理----概述

目录

一 : 编译过程

1.第一阶段 词法分析 

2.第二阶段 语法分析 

3.第三阶段 中间代码产生 

4.第四阶段 优化 

5.第五阶段 目标代码产生 

二: 编译程序总框

三: 专业名词 

四:编译程序生成

1.以机器语言和汇编语言为工具

2.高级语言

 3.移植

 4.自编译

 5.编译程序自动产生

一 : 编译过程

I love you  ——> 编译程序能够把一个程序从源语言翻译成目标语言

把英文翻译成中文  ——>  编译程序工作的五个阶段

(1) 识别出句子中的一个个单词   ——> 词法分析

(2) 分析句子的语法结构 ——> 语法分析

(3) 根据句子的含义进行初步翻译 ——> 中间代码产生

(4) 对译文进行修饰 ——> 优化

(5) 写出最后的译文 ——>目标代码的产生

1.第一阶段 词法分析 

(1) 在分析之前源程序仅仅是一个个字符序列 

(2) 任务:输入源程序,对构成源程序的字符串进行扫描分解,识别出单词符号

(3) 依循原则:构词规则

        [1]学习某种语言,首先要了解该语言的单词构成规则 eg: 一般的语言会要求用标识符来表示变量名,而标识符又明确是以字母开头的字母数字串 等等

(4)描述工具:有限自动机

        [1] 用形式化的方法来描述这些规则,为词法分析提供了基础

        [2] for(基本字) i(标识符) :=(赋值号) 1(整常数) to(基本字) 100(整常数) do(基本字)

2.第二阶段 语法分析 

(1) 任务: 在词法分析的基础上,根据语法规则把单词符号串分解成各类语法单位(语法范畴)

(2) 依循原则: 语法规则

(3) 描述工具: 上下文无关文法 

        [1] 为形式化的描述语法规则进行语法分析提供了基础

        [2]  Z := X + 0.618*Y

        [3] 0.618*Y  (记为@1)——>算数表达式

                X+@1 (记为@2) ——>算数表达式

                Z:=@2 ——> 赋值语句

3.第三阶段 中间代码产生 

(1)任务: 对各类语法单位按照语言的语义进行初步翻译 

(2)依循原则: 语义规则

(3)描述工具: 属性文法

(4)中间代码: 三元式 四元式 树

        [1]Z := X + 0.618*Y

序号OPROPN1OPN2RESULT注释
(1)*0.618YT1T1 := 0.618*Y
(2)+XT1T2T2 := X+T1
(3):=T2ZZ := T2

4.第四阶段 优化 

(1)任务: 对前阶段产生的中间代码进行加工变换,以期在最后阶段产生更高效的目标代码  

(2)高效: 程序在时间和空间上有更高的效率

(3)依循原则: 程序的等价变换规则

(4) 

FOR K := 1 TO 100 DO
BEGIN
    X := I+1;
    M := I+10*K;
    N := J+10*K;
END
序号OPROPN1OPN2RESULT注释
(1):=1KK := 1
(2)j<100K(10)if (100<K) goto (10)
(3)+I1XX := I+1
(4)*10KT1T1 = 10*K
(5)+IT1MM := I+T1
(6)*10KT2T2 = 10*K
(7)+JT2NN := J+T2
(8)+K1KK := K+1
(9)J(2)goto (2)
(10)

(5) (2)~(9)构成了循环 执行100次 每次循环都要执行4个加法以及2个乘法 一共是执行400个加法和200个乘法 优化后的代码如下

序号OPROPN1OPN2RESULT注释
(1)+I1XX := I+1
(2):=IMM:=I
(3):=JNN:=J
(4):=1KK:=1
(5)j<100K(10)if (100<K) goto (10)
(6)+M10MM:=M+10
(7)+N10NN:=N+10
(8)+K1KK:=K+1
(9)J(5)goto (5)
(10)

(6)(前4条语句)循环开始前,先计算各个变量的初始值,  循环内 M N有规律变换,在循环内用加法实现 达到之前乘法的效果  从之前的400个加法和200个乘法 编程现在301个加法

5.第五阶段 目标代码产生 

(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.编译程序自动产生

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值