编译方法结课作业.docVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译方法结课作业 姓名 班级 学号 任课教师 开设学期 2015-2016第一学期 评定成绩 评定人 评定日期 2016年1月10日 1. 谈谈你对编译程序工作过程的5个阶段的理解。 答:编译程序正常工作五个过程的流程图如下图所示。 目标程序 目标程序 源程序 词法分析 语法分析 语义分析与中间代码生成 代码优化 目标代码生成 阶段一:词法分析 这个阶段的目的就是按照从左到右的顺序一个一个的将其读入源程序,即识别一个单词,同时对其进行归类。这个过程就类似于我们对汉语语法的分析,比如,我们输入这样一句话:我是一名东北大学的学生。然后对其进行语法分析,读入“我”,可以识别这个单词为汉语实词中的代词类,“我”就归到名词类;读入“是”,我们归到汉语实词中的动词类;读入“一”字,不能构成一个可识别的符号,紧接着读入“一名”,归为汉语实词中的形容词类;读入“东”字,也不能构成一个可识别的单词,紧接着读入“东北大学”,归为汉语实词中的名词类;读入“的”,我们归到汉语虚词中的助词类;读入“学”字,同样不能构成一个可识别的单词,紧接着读入“学生”,归为汉语实词中的名词类。 而在计算机中,如果我们对如下所写的某些代码进行归类: … x:=x+1; begin y:=9; z:=y*x; end; … 归类结果如下表所示: 注意:(1) KT[k],PT[p] – 静态表(系统设定); (2) IT[i],CT[c] – 动态表(随源程序变化); 关键字表 界符表 符号表 常数表 KT[k] PT[p] IT[i] CT[c] 1 begin 1 := 1 X 1 1 2 end 2 ; 2 y 2 9 … 3 + 3 z … 4 * 4 … … 阶段二:语法分析 在上面进行词法分析的基础上,将单词序列分解成各类语法短语,如“程序”、“语句”、“表达式”等等。比如通过上面的单词“我”“是”“一名”“东北大学”“的”“学生”,可以构成多种形式的语句,我是一名东北大学的学生,我是东北大学的一名学生,东北大学的一名学生是我等等,都符合<主语><谓语>这样的语法。 阶段三:语义分析与中间代码生成 审查源程序是否有语义的错误,当不符合语言规范的时候,程序就会报错。例如上面的“我是一名东北大学的学生”“我是东北大学的一名学生”“东北大学的一名学生是我”三个句子,显然最后面的“东北大学的一名学生是我”就不符合语义。接着在进行了语法和语义的分析工作之后,编译程序将源程序变成了一种内部表示形式,这种内部表示形式叫做中间语言或中间代码。我们可以理解为,是生成一种介于源码和机器语言的形式。 阶段四:代码优化 根据代码优化是否涉及具体的计算机来划分: 1. 与机器无关的优化(在源代码或中间代码级上进行),又可分三种: (1)全局优化 — 针对整个源程序。 (2)局部优化 — 除全局优化外皆属此类。 ① 常值表达式节省(常数合并) 如:a=4+3;b=a+1; ……. 4+3,a+1 皆为常值表达式!则可优化为a=7;b=8; 又如a=5+3;…;a=x…; a=a+1; 则 a+1不是常值表达式! ② 公共子表达式节省(删除多余运算) 如:a=b*d+1;e=b*d-2;…… b*d是公共表达式!则可优化为t=b*d; a=t+1; e=t-2; 又如:b=b*d+1; e=b*d-2; 则 b*d不是公共表达式! ③ 删除无用赋值 如:a=b+c;x=d-e;y=b;a=e-h/5; 其中a=b+c 为无用赋值! 则可优化为x=d-e; y=b; a=e-h/5; ④ 不变表达式外提(循环优化之一),即把循环不变运算,提到循环外。 如:i=1; while(i<100){x=(k+a)/i;…;i++;} 则可优化为i=1;t=k+a;while (i<100){x=t/i;…;i++;} ⑤ 消减运算强度(循环优化之二),即把强度大的运算换算成强度小的运算。 如:i=1; while ( i<100 ){ t=4*i; b=a↑2;…; i++; } 则可优化为 i=1;t=0; while (i<100){t=t+4; b=a*a;…;i++;} (3)循环优化 — 对循环语句实施的优化。 2. 与机器有关的优化(目标代码级上的优化),包括: (1)寄存器分配的优化。 (2)消除无用代码。 通过以上代码优化划分和具体方法的简单了解,优化代码这一阶段主要是对上一阶段的中间代码进行变换或者改造,目的是使生成的目标代码更为便捷、高效,以达到节省时间和空间的目的。 阶段五:目标代码生成 目标代码生成是编译程序工作过程的最后一个阶段,其功能表示如下:

文档评论(0)

_______ + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档