编译方法结课作业.docx
编译方法结课作业姓名班级学号任课教师开设学期20 1 5-20 1 6 第一学期评定成绩评定人评定日期2016年1月10日1.谈谈你对编译程序工作过程的5个阶段的理解。答:编译程序正常工作五个过程的流程图如下列图所示。源程序目标程序阶段一:词法分析这个阶段的目的就是按照从左到右的顺序一个一个的将其读入源程序,即识 别一个单词,同时对其进行归类。这个过程就类似于我们对汉语语法的分析,比 如,我们输入这样一句话:我是一名东北大学的学生。然后对其进行语法分析, 读入“我”,可以识别这个单词为汉语实词中的代词类,“我”就归到名词类;读 入“是”,我们归到汉语实词中的动词类;读入“一”字,不能构成一个可识别 的符号,紧接着读入“一名”,归为汉语实词中的形容词类;读入“东”字,也 不能构成一个可识别的单词,紧接着读入“东北大学”,归为汉语实词中的名词 类;读入“的”,我们归到汉语虚词中的助词类;读入“学”字,同样不能构成 一个可识别的单词,紧接着读入“学生”,归为汉语实词中的名词类。而在计算机中,如果我们对如下所写的某些代码进行归类: x:=x+l;beginy:=9;z:=y*x;end;归类结果如下表所示:注意:(1) KTk, PTp-静态表(系统设定);(2) ITi, CTc-动态表(随源程序变化);关键字表界符表符号表常数表阶段二:语 法分析在上面进行词法分析的基础上,将单词序列分解成各类语法短语,如“程序”、 “语句”、“表达式”等等。比方通过上面的单词“我” “是” “一名” “东北大学” “的”“学生”,可以构成多种形式的语句,我是一名东北大学的学生,我是东北 大学的一名学生,东北大学的一名学生是我等等,都符合主语谓语这样的 语法。阶段三:语义分析与中间代码生成审查源程序是否有语义的错误,当不符合语言规范的时候,程序就会报错。 例如上面的“我是一名东北大学的学生” “我是东北大学的一名学生” “东北大学 的一名学生是我”三个句子,显然最后面的“东北大学的一名学生是我”就不符 合语义。接着在进行了语法和语义的分析工作之后,编译程序将源程序变成了一 种内部表示形式,这种内部表示形式叫做中间语言或中间代码。我们可以理解为, 是生成一种介于源码和机器语言的形式。阶段四:代码优化根据代码优化是否涉及具体的计算机来划分:1 .与机器无关的优化(在源代码或中间代码级上进行),又可分三种:(1)全局优化一针对整个源程序。(2)局部优化一除全局优化外皆属此类。常值表达式节省(常数合并)如:a=4+3;b=a+l;4+3,a+1皆为常值表达式!那么可优化为a=7;b=8;又如a=5+3;.;a=x.; a=a+l;那么a+1不是常值表达式!公共子表达式节省(删除多余运算)如:a=b*d+l;e=b*d-2;b*d 是公共表达式!那么可优化为 t=b*d; a=t+1; e=t-2;又如:b=b*d+l; 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=l; while(i< 100) x=(k+a)/i;, , , ;i+;那么可优化为 i=l;t=k+a;while (i< 100) x=t/i;. ;i+;消减运算强度(循环优化之二),即把强度大的运算换算成强度小的运算。如:i=l; while (i<100 )t=4*i; b=af2;.; i+; 那么可优化为 i=l;t=0; while (i<100)t=t+4; b=a*a;i+;(3)循环优化一对循环语句实施的优化。2 .与机器有关的优化(目标代码级上的优化),包括:(1)寄存器分配的优化。(2)消除无用代码。通过以上代码优化划分和具体方法的简单了解,优化代码这一阶段主要是对 上一阶段的中间代码进行变换或者改造,目的是使生成的目标代码更为便捷、高 效,以到达节省时间和空间的目的。阶段五:目标代码生成目标代码生成是编译程序工作过程的最后一个阶段,其功能表示如下:其中:中间代码一逆波兰式,三元式,四元式,语义树;目标代码一机器语言,汇编语言,符号表一变量的语义词典,本阶段的目的通过目标代码生成器把优化后的中间代码变换成目标代码。目 前我了解的目标代码有三种形式:能立即执行的机器语言代码,其所有地址都要重定位。汇编语言代码需要经过汇编程序汇编后,才能成为可执行的机器语言 代码。待装配的机器语言模块,只有执行时,由连接装入程序把它们和某些 运行程序连接起来,才能转换成可执行的机器语言代码。止匕外,因为这是编译程序工作过程的最后阶段,与硬件系统结构、指令系统 相关,同时还涉及到硬件系统功能部件运用、机器指令的选择等等。本阶段理应考虑到直接影响目标代码运行速度的三个主要问题:一是如何生成较短的目标代 码;二是如何充分利用计算机指令系统的特点,以提高目标代码的质量;三是如 何充分利用计算机中的寄存器,减少目标代码访问存储单元的次数。2.你觉得编译程序中使用的关键技术都有哪些应用方向,请详细说明。答:编译方法不仅适用于编译程序,也广泛适用于其他系统软件和应用软件 的开发。从根本上看,编译程序和其他应用程序一样,都可以归结为处理数据和 表格,故可将它当作一个大型的应用实例。通过本课程学习,到达提高应用程序 设计能力和解决实际问题能力的目的。如词法分析中的字符串匹配技术可以应用于文本编辑程序、信息检索、通讯 程序、模式识别中上下文无关文法和语法制导的翻译可以用于分析表达式,写打字程序,绘图 程序等小系统。代码优化技术更可以用于自己的结构化程序中,用于改进性能、优化已有的 程序等成绩评价表格:考核标准得分(1)正确理解和掌握编译程序的工作原理;(30%);(2)有自己独到的见解(20%);(3)文字描述能够使用专业术语完成(30%);(4)论述有理论依据(20%)