还剩9页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
编译原理课程设计报告院信息工程学院学姓名:李盂洪班级讦科0601学号061106115指导教师陈宏建完成时间分数教师签名析字符串为“当前字符为,此时,分析器到底是将其分析为大于关系运算符还是大于等于关系运算符呢?又比如,分析为正号还是加法符号,以及对空白符、跳格符、回车符和换行符等编辑性字符的处理,及删除注解等这些在程序设计初期实现都比较艰难,在几位同学的匡助下,在后期这些问题都得到了比较有效的解决在前个问题中,我们用到了超前搜索方法,当当前待分析字符串浮现“当前字符为时,分析器读入下一个字符,这时可知应将解释为大于运算符但此时,超前读了一个字符,所以要回退一个字符,词法分析器才干正常运行而后一个问题就由一个预处理子程序来完成在语法分析器设计过程中,程序相当复杂,但是本人在网上找到了一个比较好的例子,然后自己改写下用在了本程序中,减少了自己编写代码的时间总之,通过本次课程设计一定程度上提高了软件开辟能力,对编译原理这一门课程也有了比较深刻的了解最后,由于所学知识不够全面,课程设计在不少方面还有待完善,在以后的学习过程中,会掌握更多知识,力求做到更好
六、实验指导书与参考书秦振松,《编译原理及编译程序构造》,东南大学出版社,
1.1996吕映芝等编著,《编译原理》,清华大学出版社,
2.1998阎天民,倪朝奎,编译方法,西安电子科技大学出版社,
3.1999张幸儿,《计算机编译理论》(第一版),科学出版社,
4.1999高仲仪,金茂忠,编译原理及编译程序构造,北京航空航天大学出版社,
5.2001o胡元义,邓亚玲,胡英,编译原理实践教程,西安电子科技大学出版社,
6.2002张幸儿,《计算机编译理论》(第二版),科学出版社,
7.2003o
一、课程设计的目的编译原理课程兼有很强的理论性和实践性,是计算机专业的一门非常重要的专业基础课程,它在系统软件中占有十分重要的地位,是计算机专业学生的一门主修课为了让学生能够更好地掌握编译原理的基本理论和编译程序构造的基本方法和技巧,融会贯通本课程所学专业理论知识,提高他们的软件设计能力,特设定该课程的课程设计,通过设计一个简单的语言(语言)的编译程序,提高学生设计程序的能力,加深对编译理论知识的理解与应用
二、课程设计的任务课程设计是一项综合性实践环节,是对平时实验的一个补充,课程设计内容包括课程的主要理论知识,但由于编译的知识量较复杂而且综合性较强,于是对一个完整的编译程序不适合平时实验通过课程设计可以达到综合设计编译程序的目的本课程的课程设计要求学生编写一个完整的编译程序,包括词法分析器、语法分析器以及实现对简单程序设计语言中的逻辑运算表达式、算术运算表达式、赋值语句、语句、语句以及…语句进行编译,并生成中间代码和直接生汇编指令的代码生成器
三、课程设计方案编译器设计的编译程序涉及到编译中的四个阶段,它们的基本知识点如下)词法分析程序的功能是输入源程序,输出单词符号词法分析程序将依据语言词法规则,分析由字1符组成的源程序,把它识别为一个一个具有独立意义的最小语法单位,即“单词”,并识、别出与其相关的属性,再转换成长度上统一的标准形式一属性字,最终将字符串形式的源程序改造成单词符号串形式的中间程序,以供其他部份使用语法分析程序在词法分析识别出单词符号串的基础上,分析并判定程序的语法结构是否符合语法规则自上而下语法分析从识别符号出发,不断建立直接推导,试图构造一个最左推导序列,最终由它推导初与输入符号串相同的终结符号串从语法树的角度看,自顶向下分析过程将以识别符号串为根结点,试图向下构造一棵语法树,其末端结点符号串正好与输入符号串相同中间代码生成是将输入的经词法和语法分析过后的源程序翻译成中间四元式以便生成汇编指令执行中间代码生成的程序为间代码生成器目标代码生成是将有中间代码生成器生成的四元式生成具体的机器指令序列或者汇编代码本课程设计只会生成汇编指令
四、课程设计详细分析、词法分析器设计词法分析是编制一个读单词的过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类并挨次输出各个单词的内部编码及单词符号自身值程序语言的单词符号普通分为五种关键字保留字/基本字、、;标识符常量名、if whilebegin...变量名…;常数、、运算符+、
3456.78true.a\・、*、/、〈、and、or、....、;界限符,;{}/*…词法分析器的功能是输入源程序,输出单词符号词法分析器的单词符号往往表示成以下的二元式单词种别码,单词符号的属性值例如源程序为语言输入如下一段C要求输出:,“”a”,“”,”,,,”,”,””,,,”,”””,”,”””,”,””“,”,””,,”,”“,”””,”,”””,”””,”“构建关键字表:单词符号类号单词符号类号单词符号类号词法分析的设计方法有手工构造方法和程序自动生成方法两种:词法分析程序的手工构造方法自然语言描述直接构.造♦1正规文法一转换规则—子集法状态集的划分最小化L正规表达式处换期则「JV词法分析程序.编码程序流程图自动生成利用程序的自动生成器如等自动生成词法分析程序、语法分析器设计分析程序从逻辑上说,一个分析程序包括一个总控驱动程序和一张分析表两部份所有的分析器的总控程序都是一样的,只是分析表因文法不同而各有不同分析表是分析程序的核心部份,它有“动作”和“状态转换”两部份和都是二维数组分析表是分析程序的核心部份常见的分析表的方法是种分析表构造、分析表构造、分析表构造发和向前分析表构造分析算法在分析的每一步,通用的总控程序按照状态栈顶状态和当前输入符号查询分析表,并执行其中和部份规定的操作可以用一个三元式表示分析的每一步栈中状态,文法符号串的变化情况;下一步通过查询分析表,执行其中规定的操作为了使源程序能被正确地翻译,产生等价的目标程序,源语言的使用者和实现者都应该遵循关于源语言的共同约定因此,每种程序设计语言都有自己的程序构成规则语法规则使用者可以依据这些规则,以确定所书写程序的正确形式与结构;实现者则依据这些规则,以确定翻译程序可以接受什么样的程序以及怎样翻译该程序具体的语法规则如下所示定义的文法,如下0Z--S1S--AB2A一・CDE3C—9void4D—^main5E—96B—f{F}7F—9GF8F--9G9G—HIJ10H-^int11I---KLM12K---character二13L--914M---num15J;根据上面文法画出的分层有限自动机并根据分层自动机构造的分析表LR1具体的实现程序在随本报告一起的代码中,在这里再也不赘述中间代码分析器设计3,进入编译程序的第三阶段中间代码产生阶段为了使编译程序有较高的目标程序质量,或者要求从编译程序逻辑结构上把与机器无关和与机器有关的工作明显的分开来时,许多编译程序都采用了某种复杂性介于源程序语言和机器语言之间的中间语言常用的几种中间语言有逆波兰式、四元式、三元式、树表示本课程设计主要实现逆波兰式的生成逆波兰式的定义和设计思想及算法、逆波兰式定义将运算对象写在前面,而把运算符号写在后面用这种表示法表示的表达式也称做后缀式逆波兰式的特点在于运算对象顺序不变,运算符号位置反映运算顺序采用逆波兰式可以很好的表示简单算术表达式,其优点在于易于计算机处理表达式、生成逆波兰式的设计思想及算法曾人一个中学寅我即的篦I生电目表达点“入d首先构造一个运算符栈,此运算符在栈内遵循越往栈顶优先级越高的原则读入一个用中缀表示的简单算术表达式,为方便起见设该简单算术表达式的右端多加之了优先级最低的特殊符号“”从左至右扫描该算术表达式,从第一个字符开始判断,如果该字符是数字,则分析到该数字串的结束并将该数字串直接输出如果不是数字,该字符则是运算符,此时需比较优先关系做法如下将该字符与运算符栈顶的运算符的优先关系相比较如果该字符优先关系高于此运算符栈顶的运算符,则将该运算符入栈倘若不是的话,则将此运算符栈顶的运算符从栈中弹出,将该字符入栈重复上述操作直至扫描完整个简单算术表达式,确定所有字符都得到正确处理,我们便可以将中缀式表示的简单算术表达式转化为逆波兰表示的简单算术表达式目标代码生成器的设计由于只需生成汇编指令,下表列出各语句、四元式和汇编指令的相互对应关系,借助于该关系很容易就可以由四元式到汇编指令的转换程序语句四元式汇编指令,,,,
四、实验结果与分析c programis ShiYuanShiisnainO115x,8,T
4.T5〉2〈16=,T5,--jint3float x;4*,i,5,T2i-3;5j,T2,3,7x=i*2;6j.一,-,12〉ifi+53j==,x J,2,9ifx==2x i=5j.一--,12〉8:j=3*5;9:jnz,x^-,12Jj=8*7*4;1011♦35/312C4,T4〉1314/RESULT.TX...g OUT.TXT-...文件E编辑E格式9文件E编辑E格式9查看N帮助出查看Y帮助出L1MOU R1,3MOU成i,R1结L2MOU R1,i»R1,23:果L3MOU R1,T14:T2MOU x,R1j=,T2,3,75L4:MOU R1,i6:♦R1,5j==,x,29f7L5CMP T2,3JC L7L6JMP L178jnz,x,-,1311L7CMP x,2JZ L99L8:JMP L13L9CMP x,0JNZjnz»i,-»15L13L10JMP L11=»,-,j L11MOU R1,5MOUi,R1♦,3,5/3=L12JMP L17L13CMP i0JNZ9L15L14JMP L17L15MOU R1,MOU*,7,4,T4j,R1*,8,T4,T5L16JMP L13文件中的四元式和主界面显示的一样,中的汇编指令和人工手动汇编结果一样,程序运行正常L18MOU R1,T3MOU j,R1i,0
五、课程设计心得体味L19CMP L21L22JNZ L20JMP本课程设计是一个编译器的设计,倒h旃袪分析部份和中间代码生成部L卷分以及目标代码生成部份在整个编译器设计过程中,廿名K最想不到的艰福其主要确在鞫法加原因是对各个部份要实现的功能考虑不够周全,典型解的设计中,当前待分*R1J4L24MOUR1,T5。