(完整word版)武汉理工大学DO-WHILE语句的翻译分析程序设计———递归下降法、输出四元式

上传人:tu****8 文档编号:57937552 上传时间:2022-02-25 格式:DOC 页数:15 大小:208KB
收藏 版权申诉 举报 下载
(完整word版)武汉理工大学DO-WHILE语句的翻译分析程序设计———递归下降法、输出四元式_第1页
第1页 / 共15页
(完整word版)武汉理工大学DO-WHILE语句的翻译分析程序设计———递归下降法、输出四元式_第2页
第2页 / 共15页
(完整word版)武汉理工大学DO-WHILE语句的翻译分析程序设计———递归下降法、输出四元式_第3页
第3页 / 共15页
资源描述:

《(完整word版)武汉理工大学DO-WHILE语句的翻译分析程序设计———递归下降法、输出四元式》由会员分享,可在线阅读,更多相关《(完整word版)武汉理工大学DO-WHILE语句的翻译分析程序设计———递归下降法、输出四元式(15页珍藏版)》请在装配图网上搜索。

1、武汉理工大学编译原理课程设计说明书1DO-WHIL 语句的翻译分析程序设计- 递归下降法、输出四元式1 问题描述i.i 问题描述设计一个DO-WHILE循环语句的词法、语法及语义分析程序,语法分析选择递归下降法,采用用语法制导翻译输出中间代码四元式。1.2 主要任务通过设计、编制、调试一个DO-WHILE循环语句的语法及语义分析程序,加深对语法及 语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。首先写出一个能识别DO-WHILE循环语句的文法,通过消除左递归使它符合LL(1)即递归 下降法的要求,然后按照这个文法编写一个集词法分析,语法分析和语义分析为一体的程序, 该程序首先

2、可以检查输入语句是否符合词法要求,若符合则继续识别输入的语句是否符合DO-WHILE语句的文法,若符合则进行语义分析,输出用四地址代码表示的中间代码。1.3 测试数据编写好源代码后,进行调试,根据程序要求进输入一小段程序,进行词法、语法的分析, 给出分析结果。2 文法及属性文法的描述2.1 文法的描述用扩充巴科斯-瑙尔范式(EBNF)给出的while循环语句的文法描述,如下:vwhile语句 :=do (条件语句) while 赋值语句 条件语句 := 表达式条件运算符 表达式条件运算符 := | | = | = | =表达式 := 表达式 + 表达式2 | 表达式 - 表达式2 | 表达式2

3、表达式2:=表达式2 * 表达式3 |表达式2 / 表达式3 | 表达式3武汉理工大学编译原理课程设计说明书2表达式3:=(表达式)| 标识符|数字:=;2.2 DO-while 循环语句文法的描述产生式为S- do E while A,为便于语法制导翻译将其改写如下: 文法G(s)如下:S-DGWE(意思是do G while E)G-c=RR-dTe|dT-+|-|*|/E-aFbF- |=|2.3 DO-WHILE 循环语句的属性文法产生式语义规则STdo E while AS.begi n:=n ewlabel;E.true:=newlabel;E.false:=S .n ext;S1

4、. next:=S.beg in;S.code:=gen(S.beginII E。:ode IIge n(E.truell:S1)ode IIgen( goto S.begin)武汉理工大学编译原理课程设计说明书33.语法分析方法及中间代码形式的描述3.1 语法分析方法递归下降程序是由一组子程序组成,每个子程序对应于一个非终结(S,A,B,C,D,E,F,GH)。每个子程序处理相应句型中相对于此非终结符号的产生式。在定义文法 时,是递归定义的,所以这些子程序也是递归的。当一个子程序调用另一个子程序时,原子程 序顺序执行语句,即总是先执行被调用的子程序,然后再执行后继的程序。程序中9个子程序,

5、其中S是开始符号,也是递归下降分析的入口,通过调用词法分析器进行单词分析,并通过word=I.Yufa_Queue.fro nt()来得到当前所分析到的单词,然后在递归语法分析中根据这个单词分 析下一步要执行的子程序。其中要注意的是,当子程序G()和H()中出现匹配的是空字符串时,不做单词处理,该所取得的单词,应该为下一个匹配产生做准备。它的优点是简单直观,易于构造,很多编译系统所实现。缺点是对文法要求很高,由于 递归调用多,影响分析器的效率。其文法可以表示为:ET|E+TTF|T*FFi| (E)武汉理工大学编译原理课程设计说明书43.2 中间代码形式描述中间代码采用四元式输出,一个四元式是

6、一个带有四个域的记录结构,这四个域分别称为op、arg1、arg2及result。域op包含一个代表运算符的内部码。语句do c=a+b while ab的四元式输出形式如下:100( + , a , b , T )101( = , T , - , c )102( j, a , b , 100 )4 简要的分析与概要设计4.1 全局程序概要设计递归下降分析技术就是通过对每个非终结符编写一个子程序来实现它的操作,然后通过递归的调用来实现对输入字符串的分析, 这其中还包括对输入字符串的词法分析。 在词法分析 的时,得到的字符单词要和关键字比较,看是否是关键字,根据比较结果进行返回相应的单词 类型。

7、单词类型主要包括界限符,关键字,常量,标识符,运算符等,每种符号都是一种类型。 在语法分析程序中,根据词法得到的结果, 进行判断是否是当前需要的单词类型, 如果不是就 说明输入字符串不能由该文法推导出来;如果是当前需要的类型,就相应得做该单词类型分支 程序。根据文法可以得到这个递归下降程序可以分析while语句,在文法的开始符号S开始进 行递归调用,因此这个文法的递归中就要考虑到调用以及递归。在递归子程序中,在嵌套调用 其他子程序时都是有一定条件的,当满足这个条件的时候该程序可以按照满足的条件执行下 去,当没有满足程序中的条件时就会显示语法错误。4.2 词法分析词法分析程序的任务是:从左至右逐

8、个字符地对源程序进行扫描, 产生一个个的单词符号 把作为字符串的源程序改造成为单词符号的中间程序。词法分析检查的错误主要是挑出源程序 中出现的非法符号。所谓非法符号是指不是程序设计语言中允许出现的符号,就像自然语句中 的错字。武汉理工大学编译原理课程设计说明书54.3 递归下降翻译器的设计1.对每个非终结符A构造一个函数过程,对A的每个继承属性设置一个形式参数,函数的返回值为A的综合属性,A对应的函数过程中,为出现在A的产生式中的每一个文 法符号的每一个属性都设置一个局部变量。2.非终结符A对应的函数过程中,根据当前的输入符号决定使用哪个产生式候选。3.每个产生式对应的程序代码中,按照从左到右

9、的次序,对于单词符号,非终结符和语 义动作分别做以下工作。(1)对于带有综合属性x的终结符X,把x的值存入为X,x设置的变量中。然后产 生一个匹配X的调用,并继续读入一个输入符号。(2) 对于每个非终结符号B,产生一个右边带有函数调用的赋值语句c=B(b1,b2,;bk)(3) 对于语义动作,把动作的代码抄进分析器中,用代表属性的变量来代替对应属性 的每一次引用。4.4 语法制导翻译在语法分析过程中,随着分析的步步进展,根据每个产生式所对应的语义子程序(或 语义规则描述的语义动作)进行翻译。属性文法的每个符号有属性,所以每个符号入栈时, 必须连属性一起入栈,这样,栈符号就由文法符号及存放该符号

10、属性的域所组成。由于属性类 型不同,属性域存放的内容就要根据属性的类型来定。有的可能直接存放属性值,也有的存放 的是指向属性值的指针。对于综合属性,其属性域不存放其属性值,而是存放一个指针,指向 存贮该属性值的单元。对于继承属性,其属性域直接保存其属性值。继承属性的属性域刚入栈 时为空,但是在该栈符号变成栈顶符号之前的某一时刻,它们必须接受相应的属性值,即在成 为栈顶时,继承属性的属性域必须有值。5 测试方法和测试结果5.1 测试方法编写好源程序,连接运行无误后,用几个简单的while语句检测其正确性,如:输入do-while语句:WabDa=a+b#,看其输出结果是否与我们所预期的结果一致,

11、如果不一致,武汉理工大学编译原理课程设计说明书6则需对源程序进行检查修正,我们可以用逐步调试的方法来对源程序进行跟踪分析,找出出错的地方和原因,在对其进行修改,重新调试运行,直到输出正确的结果为止。若输出 结果正确,还要多用几个while语句对其进行检测,直到所有输出结果正确。5.2 测试结果测试结果如下:6 经验与体会在做本次实验之前我对LL(1)文法的构成,递归下降原理不是很了解,在查阅了相关资料 后,对此有了深入了解在整个设计过程中,将词法分析做为一个单独的模块,它可以被任何语 法分析调用,提高独立性并且在编程之前就已经将程序的概要设计都做出来了, 所以在编写程 序的时候相对比较容易。词

12、法分析,语法分析都是很容易的,只要理解了分析方法的实现原理, 编写程序判断输入字符串是否满足给定的武汉理工大学编译原理课程设计说明书7文法是比较简单的。本次的设计的不足主要体现在以下几个方面,首先,因为前几次的实验都没有把词法分析器编出来,因此程序中我没有采用词法分析器,只能够对唯一的Da=a+bWaDGWEG-c=RR-dTe|dT-+|-|*|/E-aFbF- |=|*/#in clude #in clude#in clude#i ncludevstri ng.h char a50,g5050;武汉理工大学编译原理课程设计说明书8char ch;int n1,i1=0,i2=0;int t

13、otal=0;void S();void D();void G();void W();void E();void R();void T();void F();void mai n()in t p,j=0;printf(请输入do-while语句(D代表do, W代表while),并以#结束:n);dosea nf(%c,&ch);aj=ch;j+;while(ch!=#);n1=j;ch=a0;S();printf(n);if (ch=#)printf(输出四元式为:n);p=o;for(;pDGWEn,total);total+;D();G();void D()if(ch!=D) print

14、f(有非法字符c请按回车返回! ,ch);getchar();getchar();/*输出推导式*/武汉理工大学编译原理课程设计说明书10exit(1);ch=a+i1;void G() int i=i1+1;if(ch!=c&ai!=)printf(有非法字符%c %c请按回车返回! ,ch,ai);getchar();getchar();exit(1);prin tf(%dtG-c=Rn,total);total+;R();void R()int i;i=i1+1;i1=i1+2;ch=ai1;if(ai!=&ch!=d)printf(有非法字符%c %c请按回车返回! ,ai,ch);g

15、etchar();getchar();exit(1);else武汉理工大学编译原理课程设计说明书11if(ai1+1=+)|(ai1+1=-)|(ai1+1=*)|(ai1+1=/)prin tf(%dtR-dTen,total);total+;i2=3;T();elseprin tf(%dtR-dn,total);total+;i2=2;strcpy(g0,(=,c,d,_);W();E();void T()ch=a+i1;switch(ch)case +:prin tf(%dtT-+n,total);total+;strcpy(gO,(+,d,e,T);strcpy(g1,(=,c,T,_

16、);break;case -:prin tf(%dtT-n,total);total+; strcpy(gO,(-,d,e,T); strcpy(g1,(=,c,T,_); break;case *:prin tf(%dtT-*n,total);total+;武汉理工大学编译原理课程设计说明书12strcpy(g0,(*,d,e,T);strcpy(g1,(=,c,T,_);break;default:prin tf(%dtT-/n,total);total+; strcpy(g0,(/,d,e,T); strcpy(g1,(=,c,T,_); break;W();E();void W()+i

17、1;ch=a+i1;if(ch!=W)printf(有非法字符c请按回车返回! ,ch);getchar();getchar();exit(1);void E()ch=a+i1;if(ch!=a)printf(有非法字符%c %c请按回车返回! ,ch);getchar();getchar();武汉理工大学编译原理课程设计说明书13exit(1);prin tf(%dtE-aFbn,total);total+;F();void F()int i;ch=a+i1;i=i1+1;if(ai!=b)printf(有非法字符c请按回车返回! ,ai);getchar();getchar();exit(

18、1);=h(i2HH2)swioh(ch)宀caseV.rprinff(=%2mvv一rrJOQr_)sQr-+ sfcpy(gs=jvL00)break八case-HH-pinff(=%2f71VHL.rrJ0Qr-)sQ)-+ sfcpy(gs=Loo)break八prinff(=%2mvxrrJOQ)-)sQ)-+sfcpy(gs=吴LLOO)break八e_seif(i2HH3)swifch(ch)宀caseV.rprinff(=%2mvv一rrJOQr-)sQr-+ sfcpy(gE=jvLOO)break八case-HH-pinff(=%2f71VHL.rrJOQr-)sQ)-+sfcpy(gE=丿LLOO)break八defauFprinff(=%2mvxrrJOQ)-)sQ)-+武汉理工大学编译原理课程设计说明书15strcpy(g2,(jv,_,_,100);break;ch=#;

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


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