- 1、本文档共58页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 1.3.3 语义分析及中间代码生成程序 任务:依据语义规则对识别出的各种语法成分析其含义,并进行初步翻译,生成中间代码。 静态: 分析语法成份的含义,进行语义上的正确性检查 动态: 根据相应语义,生成中间代码(介于源语言和目标语言之间的中间语言形式) * 表达式:a=10+c*20 表达式 = ID(a) 项 + 表达式 项 表达式 NUM(20) ID(c) NUM (10) 因子 * 因子 因子 项 * 例如表达式 (a+b)*(c+d) 翻译成四元式的中间代码如下: (+ , a , b , t1) (+ , c , d , t2) (* , t1 , t2 , t3) LOAD a 将a的内容加载到操作数栈 LOAD b 将a的内容加载到操作数栈 ADD 将操作数栈顶的两个单元的内容相加 STO t1 将操作数栈顶的内容存入单元t1 LOAD c 将c的内容加载到操作数栈 LOAD d 将d的内容加载到操作数栈 ADD 将操作数栈顶的两个单元的内容相加 STO t2 将操作数栈顶的内容存入单元t2 LOAD t1 将t1的内容加载到操作数栈 LOAD t2 将t2的内容加载到操作数栈 MULT 将操作数栈顶的两个单元的内容相乘 STO t3 将累加器的内容存入单元t3 翻译成某个抽象机的汇编指令代码: 中间代码生成 * S.P O.P 语义分析及生成中间代码程序 代码生成程序 代码优化程序 语法分析程序 词法分析程序 错 误 处 理 符 号 表 管 理 * 1.3.4 代码优化 任务:对中间代码进行加工变换,以得到高质量的中间代码 有四元式指令代码如下: (*,3.14,2,t1) (=,t1,_,x) (*,2,5,t2) (*,t2,a,t3) (=,t3,_,y) (+,x,1,t4) (=,t4,_,z) 而优化后的代码如下: (=,6.28,_,x) (*,10,a,y) (=,7.28,_,z) 代码优化不是编译程序的必要组成部分,不同的编译程序所进行的代码优化程度差别很大,能够完成代码优化的编译程序称为“优化编译程序”。 * S.P O.P 语义分析及生成中间代码程序 代码生成程序 代码优化程序 语法分析程序 词法分析程序 错 误 处 理 符 号 表 管 理 * 1.3.5 目标代码生成 任务:把中间代码变换成特定机器上的低级语言代码 目标代码的形式可以是绝对指令代码、可重定位的机器指令代码或汇编指令代码。 * 1.3.6 符号表管理 填表:把源程序中的信息和编译过程中所产生的信息登记在表格中 查表:在随后的编译过程中同时又要不断的查找这些表格中的信息 每个阶段中都要有: 符号表管理和错误处理 标识符名 标识符类型 类型 地址 aaa 1(表示变量) 1(表示整型) 0001 * 1.3.7 错误处理 诊察错误,并能报告用户错误性质和位置 出错处理能力的优劣是衡量编译程序质量好坏的一个重要指标 典型的编译程序具有7个逻辑部分 * S.P O.P 语义分析及生成中间代码程序 代码生成程序 代码优化程序 语法分析程序 词法分析程序 错 误 处 理 符 号 表 管 理 * 1.4 编译程序的结构 对源程序(包括源程序中间形式)从头到尾扫描一次,并做有关的加工处理 ,生成新的源程序中间形式或目标程序,通常称之为一遍。 第一遍 第二遍 …… S.P 中间形式1 S.P 中间形式2 C2 C1 S.P O.P 上一遍的结果是下一遍的输入,最后一遍生成目标程序。 * 1.4.1 单遍编译程序 单遍编译程序只对源程序进行一遍扫描,就完成编译的各项任务,产生目标代码。在单遍编译程序中,不产生中间代码,往往以语法分析程序为中心,词法分析和语义分析作为语法分析的子程序。 语法分析函数 { 词法分析子程序; 语义分析子程序; } * 词法分析 源程序 取单词 目标程序 开始 语法分析 语义分析及代码生成 送单词 典型的单遍编译程序结构如图所示 1、当语法分析需要读进一个新单词时,就调用词法分析子程序。词法分析子程序则从源程序中依次读入字符,组合成单词符号,并将单词符号返回给语法分析程序。 2、当语法分析程序识别出一个语法成分时,就调用语义分析子程序进行语义分析,并
文档评论(0)