编译过程和编译程序笔记

1.2 编译过程和编译程序结构

1.2.1 编译过程

后端
前端
语法分析
代码优化
目标代码生成
词法分析
语义分析
中间代码生成
源程序
目标程序

图 1.3 编译的各个阶段

  1. 词法分析: 从左到右一个一个字符地读入源程序,对构成源程序的字符进行扫描和分解,从而识别出一个个单词。
  2. 语法分析: 在词法分析的基础上将单词序列分解成各类语法短语,这些语法短语也称为语法单位,可以表示成语法树。

    语法分析依据的是语言的语法规则,即描述程序结构的规则
    例如 id1 := id2 + id3 * 10

赋值:=
标识符id1
表达式+
标识符id2
表达式*
标识符id3
表达式整数10

图 1.5 语句 id1:=id2+id3*10的语法树

  1. 语义分析: 审查源程序有无语义错误,为代码生成阶段收集类型信息。
  2. 中间代码生成: 有的编译程序将源代码变成一种内部表示形式,是一种结构简单、含义明确的记号系统,具有容易生成、容易翻译成目标代码的特点。

    例如 id1 := id2 + id3 * 10 可以表示为如下表

num运算符运算对象1运算对象2结果
1inttoreal10-t1t_1t1
2*id3t1t_1t1t2t_2t2
3+id2t2t_2t2t3t_3t3
4:=t3t_3t3-id1
  1. 代码优化: 对前一阶段的中间代码进行变幻或进行改造,目的是使生成的目标代码更为高效,以省时间和空间。

    上面的表可以优化为下面的表

num运算符运算对象1运算对象2结果
1*id310.0t1t_1t1
2+id2t1t_1t1id1
  1. 目标代码生成: 把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。

    编译最后阶段,它的工作与硬件系统结构和指令含义有关

并不是所有过程都是必须的,有的不需要中间代码,有的不需要优化,不一而足

1.2.2 编译程序的结构

表格管理程序 源程序错误处理程序 目标程序词法分析语法分析语义分析中间代码生成代码优化目标代码生成生成表格管理程序 源程序错误处理程序 目标程序

1.2.3 编译阶段

前端: 主要依赖于源语言而与目标机器无关

通常包括 词法分析,语法分析, 语义分析,中间代码生成,代码优化

后端: 主要值依赖于目标机器而一般不依赖与源语言

只与中间代码有关的那些阶段的工作,即目标代码生成,以及相关出错处理和符号表操作

遍或者趟 : 一个编译过程可由一遍、两遍或多遍完成,是对源程序或其等价的中间语言程序从头到尾扫描并完成规定任务的过程。

优点: 1.编译程序少占内存,2编程程序的逻辑结构更加清晰;
缺点: 增加编译过程时间

1.3 解释程序和一些软件工具

编译程序是一个语言处理程序,它把一个高级语言程序翻译成某个机器的汇编语言程序或者二进制代码程序,这个二进制代码程序在机器上运行以生成结果。

1.4 PL/0 语言编译系统

PL/0 语言编译系统由编译程序和解释程序两部分组成。

类P-code虚拟机
类P-code解释程序
PL/0编译程序
类P-code解释程序
PL/0程序
输入数据
输出数据

使用T形图来表示一个编译程序设计的三个方面的语言

PL/0

+-----------------------------+
|PL/0                类 P-code|
+----+             +----------+
     |C/Pascal/Ja^a|
     +-------------+

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值