WHILE循环语句的翻译程序设计递归下降法,输出四元式

上传人:痛*** 文档编号:89899613 上传时间:2022-05-13 格式:DOC 页数:13 大小:62.50KB
返回 下载 相关 举报
WHILE循环语句的翻译程序设计递归下降法,输出四元式_第1页
第1页 / 共13页
WHILE循环语句的翻译程序设计递归下降法,输出四元式_第2页
第2页 / 共13页
WHILE循环语句的翻译程序设计递归下降法,输出四元式_第3页
第3页 / 共13页
点击查看更多>>
资源描述
-*:课实践报告课程名称编译原理设计题目WHILE循环语句的翻译程序设计(递归下降法,输出四元式)学院计算机科学与技术专业班级计算机1203班*闵丹枫指导教师林泓2014年12月 8日. z.-课程设计任务书学生:闵丹枫专业班级:计算机1203班指导教师:林泓工作单位:计算机科学与技术学院题目: WHILE循环语句的翻译程序设计递归下降法、输出四元式初始条件:理论:学完编译课程,掌握一种计算机高级语言的使用。实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进展设计。要求完成的主要任务:包括课程设计工作量及其技术要求,以及说明书撰写等具体要求(1) 写出符合给定的语法分析方法的文法及属性文法。(2) 完成题目要求的中间代码四元式的描述。(3) 写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。(4) 编制好分析程序后,设计假设干用例,上机测试并通过所设计的分析程序。(5) 设计报告格式按要求书写。课程设计报告书正文的容应包括:1 系统描述问题域描述;2 文法及属性文法的描述;3 语法分析方法描述及语法分析表设计;4 按给定的题目给出中间代码形式的描述及中间代码序列的构造设计;5 编译系统的概要设计;6 详细的算法描述流程图或伪代码;7 软件的测试方法和测试结果;8 研制报告研制过程,本设计的评价、特点、缺乏、收获与体会等;9 参考文献按公开发表的规书写。时间安排:设计安排一周:周1、周2:完成系统分析及设计。周3、周4:完成程序调试及测试。周5:撰写课程设计报告。设计验收安排:设计周的星期五第1节课开场到实验室进展上机验收。设计报告书收取时间:设计周的次周星期一上午10点。指导教师签名: 2014年 9月 1日系主任或责任教师签名: 2014年月日WHILE循环语句的翻译程序设计递归下降法、输出四元式一 系统描述1.1问题描述设计一个WHILE布尔表达式DO赋值语句循环语句的词法语法及语义分析程序,语法分析选择递归下降法,采用用语法制导翻译输出中间代码四元式。1.2主要任务设计一个能识别while循环语句的文法,消除左递归,使文法符合LL(1)文法。利用递归下降法编写一个集词法分析,语法分析和语义分析为一体的程序。该程序首先可以检查输入语句是否符合词法要求,假设符合则继续识别输入的语句是否符合while语句的文法,假设符合则进展语义分析,输出用四地址代码表示的中间代码。二 文法及属性文法的描述2.1 文法的描述扩大巴科斯-瑙尔式EBNF: := while () do := := + | - | := * | / | :=() | |:=;根据以上写出来的While循环语句的文法表示如下:1.S - while (A) do B2.A - CDC3.D - | = | = | C+E | C-E | E5.E - E*F | E/F | E6.F - (C) | i | n对以上文法消除左递归,最后得到的文法为:1.S-while (A) do B 2.A-CDC3.D- | = | = | EG 5.G-+EG | -EG | 6.E-FH 7.H-*FH | / FH | 8.F-(C) | i | n 9.B-i=C;2.1 属性文法的描述(1)任一非终结符B都不是左递归的,否则会产生死循环。(2)对A的任意两个右部i , j ,有:first(i)first(j)=, First(i)表i所能导出串的第一个符号的集合。显然,每个i的first(i)是互不一样的,否则则无法判断应执行哪个(i )。产生式语义规则S-while (A) do B S.first:=newtemp; S.second:=newtemp;A.true:=newtemp;emitA.false:=S.second;S1.second:=S.first; S.place:=(S.begin, :) | B.place |printf(S.true, :) |S1.place | printf(goto,S.begin) | printf(B.false, :) | printf(goto Lne*t);A-CDCA.place:=newpemt;emit(A.place:=C1.place D.place C2.place).D- D.place:=newtemp ;Emit(D.Place:=).D- D.place:=newtemp ;Emit(D.Place:= =D.place:=newtemp ;Emit(D.Place:=).D- =D.place:=newtemp ;Emit(D.Place:=).D- =D.place:=newtemp ;Emit(D.Place:=EG C.Place:=newtemp;Emit(C.Place:=E.Place G.place)G-+EG G.Place:=newtemp;Emit(G1.Place:=+E.Place G2.place)G-EG G.Place:=newtemp;Emit(G1.Place:=-E.Place G2.place)G-G.Place:=newtemp;Emit(G.Place:=H-*FH H.Place:=newtemp;Emit(H1.Place:=*F.Place H2.place)H- /FHH.Place:=newtemp;Emit(H1.Place:=+F.Place H2.place)H-G.Place:=newtemp;Emit(H1.Place:=+E.Place H2.place)F-(C) F.Place:=C.PlaceB-i=C;p:=lookup(i.name)If p!=nil thenEmit(p:=C.PlaceElse error)三 语法分析方法描述31 语法分析方法描述递归下降法是一种比拟简单直观,易于构造的语法分析方法。他要求文法满足LL1文法,他的设计思想是对应文法中每个非终结符编写一个递归过程,每个过程的功能是识别由该非终结符推出的单词或串,当*非终结符的产生式有多个候选时,能够按LL1形式可唯一地确定选择*个候选进展推导。它的优点是简单直观,易于构造,很多编译系统所实现缺点是对文法要求很高,由于递归调用多,影响分析器的效率。递归下降程序是由一组子程序组成,每个子程序对应于一个非终结(S,A,B,C,D,E,F,G,H)。每个子程序处理相应句型中相对于此非终结符号的产生式。在定义文法时,是递归定义的,所以这些子程序也是递归的。当一个子程序调用另一个子程序时,原子程序顺序执行语句,即总是先执行被调用的子程序,然后再执行后继的程序。程序中9个子程序,其中S 是开场符号,也是递归下降分析的入口,通过调用词法分析器进展单词分析,并通过word=l.Yufa_Queue.front()来得到当前所分析到的单词,然后在递归语法分析中根据这个单词分析下一步要执行的子程序。其中要注意的是,当子程序G()和H()中出现匹配的是空字符串时,不做单词处理,该所取得的单词,应该为下一个匹配产生做准备。32 递归下降法实现的原理设A是一个非终结符:A1 A2An则写 (A) if charfirst(1 ) then(1 ) else if charfirst(2 ) then (2 ) else if charfirst(n ) then (n) else ERROR其中(i)表示调用处理符号串i的子程序。对A的任一右部i 设为:i = y1 y2 yn则定义( i) begin(y1);(y2);(yn) end其中yj可分为以下两种情况j=1,n):1) yjVT,则( yj) if char yj then ERROR else READ(char)2) yjVN,则(yj)表示调用关于yj的递归子程序。四中间代码形式的描述及中间代码序列的构造设计4.1四元式形式中间代码为四元式,按照要求,要输出四元式一个四元式是一个带有四个域的记录构造,这四个域分别称为oparg1arg2及result。域op包含一个代表运算符的部码。语句while ab do a=a+b的四元式输出:1 ( | =做Do_G G- c=R对赋值语句进展四元式输出:七 软件的测试方法和测试结果输入 whileabz=*+y;测试结果如下:输入while(ab)z=*+y*c; 测试结果如下输入wh(ab)z=y; 结果为:输入while(ab)z=z+y 结果为:八 研制报告研制过程,本设计的评价、特点、缺乏、收获与体会等8.1研制过程在做本次实验之前我对LL(1)文法的构成,递归下降原理不是很了解,在查阅了相关资料后,对此有了深入了解。将词法分析,语法分析,中间语言翻译结合到一起。8.2 设计的评价、特点、缺乏设计的程序根本上实现了用递归下降分析法实现了while语句的翻译,并能够用四元式将其输出,使人一目了然。程序还能够准确提示词法和语法错误。同时程序运行时简单明了,易于使用。8.3收获和体会深入了解计算机语言编译和运行的过程,对编译原理有了深刻的认识,掌握了递归下降法,熟练地使用四元式中间代码,明白了对于编写程序,解题的思路为重要。在编写程序之前,如果没有比拟清晰的思路,根本不可能编出好的程序。就算马马虎虎的编出来,程序的逻辑性、强健性、完善性、合理性也不会很强。在编程之前,我们应反复研究题目要求,对题目涉及的情况进展比拟充分的分析,以便编写出更加符合题意的程序;其次要充分考虑各种临界情况,对一些错误的输入进展处理。因此在我们编程序之前一定要做好充分的准备,首先要理清自己的思路,然后再将思路分划成几个模块,逐块的写好算法,最后再将所有的模块有机的联系起来,组成一个完整的程序。在成功通过编译的情况下,对程序运行的结果进展系统的分析,检验其正确性,如果有错误,应立即去分析源程序的逻辑错误,直到得到正确的结果。九 参考文献编译原理第2版清华大学素琴等著本科生课程设计成绩评定表班级:计算机1203 :闵丹枫*:序号评分工程总分值实得分1学习态度认真、遵守纪律102设计分析合理性103设计方案正确性、可行性、创造性204设计结果正确性405设计报告的规性106设计验收10总得分/等级评语:注:最终成绩以五级分制记。优90-100分、良80-89分、中70-79分、及格60-69分、60分以下为不及格指导教师签名:201 年月日. z.
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!