1.2编译过程和编译程序的结构 目的是为了得到高质量(省时,省空间)的目标 任务 程序。 运算符 运算对象1 运算对象2 结果 代码优化 例题 (1)* count 10.0 T1 (2) + first T1 sum 例:X=1;y=2;Z=x*y 优化后:Z=2; 例:fork:=1to100do 优化后:m=n:=; begin for k:=1to 100 do m:=l+10*k begin n:=J+10*k m:=m+10;n:=n+10; end; end; 做300次“+”,200次 “为 做300次“+”,不做 “ 返回 一编译原理 21
1.2 编译过程和编译程序的结构 目的是为了得到高质量(省时,省空间)的目标 任 务 程序。 • 运算符 运算对象 1 运算对象2 结果 (1) * count 10.0 T1 例 题 (2) + first T1 sum 代 码 优 化 例:x=1;y=2;z=x*y 优化后: z=2; 例:for k:=1 to 100 do 优化后:m:=I; n:=J; begin for k:=1 to 100 do m:=I+10*k; begin n :=J+10*k; m:= m+10; n:=n+10; end; end; 做300次“+”,200次“*” 做300次“+”,不做“*” -编译原理- 21
1.2 编译过程和编译程序的结构 目 任务 由中间代码很容易生成目标程序(地址指令序 列)。 标代码生成 绝对指令代码:直接将程序装入内存中确定的位置 可重定位的指令代码:每个程序开始都是0,需要时装入 内存 汇编指令代码 这部分工作与机器关系密切,所以要根据机器进行。 ·在做这部分工作时,也可以进行代码优化的处理。 一编译原理-一 22 返回
1.2 编译过程和编译程序的结构 由中间代码很容易生成目标程序(地址指令序 列)。 目 任 务 标 代 码 生 成 • 绝对指令代码:直接将程序装入内存中确定的位置 • 可重定位的指令代码: 每个程序开始都是0,需要时装入 内存 • 汇编指令代码 • 这部分工作与机器关系密切 ,所以要根据机器进行。 • 在做这部分工作时,也可以进行代码优化的处理。 -编译原理- 22
1.2编译过程和编译程序的结构 S.P 词法分析程序 语法分析程序 表格管理 语义分析 出错处理 中间代码生成 代码优化 生成目标程序 0.P 一编译原理 23 返回
1.2 编译过程和编译程序的结构 S.P O.P 语义分析 生成目标程序 代码优化 语法分析程序 词法分析程序 出 错 处 理 表 格 管 理 中间代码生成 -编译原理- 23
1.2 编译过程和编译程序的结构 表格管理(符号表组织) 表格 在整个编译过程中始终都要贯穿着建 表(填表)和查表的工作。即要及时的把 管理 源程序中的信息和编译过程中所产生的信 息登记在表格中,而在随后的编译过程中 同时又要不断的查找这些表格中的信息。 出错 处理 出错处理 规模较大的源程序难免有多种错误, 编译程序 编译程序必须要有出错处理的功能。即能 诊察出错误,并能报告用户错误性质和位 置,} 以便用户修改源程序。 出错处理能力的优劣是衡量编译程序 质量好坏的一个重要指标。 返回 一编译原理-一 24
出错处理 规模较大的源程序难免有多种错误, 编译程序必须要有出错处理的功能。即能 诊察出错误,并能报告用户错误性质和位 置,以便用户修改源程序。 出错处理能力的优劣是衡量编译程序 质量好坏的一个重要指标。 表格管理(符号表组织) 在整个编译过程中始终都要贯穿着建 表(填表)和查表的工作。即要及时的把 源程序中的信息和编译过程中所产生的信 息登记在表格中,而在随后的编译过程中 同时又要不断的查找这些表格中的信息。 1.2 编译过程和编译程序的结构 编译程序 出错 处理 表格 管理 -编译原理- 24
1.2编译过程和编译程序的结构 遍(ass):对源程序(包括源程序中间形式)从头到尾扫描一次,并做有 关的加工处理,生成新的源程序中间形式或目标程序,通常称之为一遍。 第一遍 第二遍 S.P C1 S.P C2 S.P 0.P 中间形式1 中间形式 小贴士1:上一遍的结果是下一遍的输入,最后一遍生成目标程序。 小贴士2:要注意遍与基本阶段的区别 五个基本阶段:是将源程序翻译为目标程序在逻辑上要完成的 工作。 遍:是指完成上述5个基本阶段的工作,要经过几次扫描处理。 返回 编译原理一 25
遍(pass):对源程序(包括源程序中间形式)从头到尾扫描一次,并做有 关的加工处理 ,生成新的源程序中间形式或目标程序,通常称之为一遍。 第一遍 第二遍 S.P . 中间形式1 S.P 中间形式2 S.P C1 C2 O.P 1.2 编译过程和编译程序的结构 小贴士1:上一遍的结果是下一遍的输入,最后一遍生成目标程序。 小贴士2:要注意遍与基本阶段的区别 五个基本阶段:是将源程序翻译为目标程序在逻辑上要完成的 工作。 遍:是指完成上述5个基本阶段的工作,要经过几次扫描处理。 -编译原理- 25