首页 递归下降语法分析程序设计

递归下降语法分析程序设计

举报
开通vip

递归下降语法分析程序设计编译方法卖殓报告时间:2021.03.06创作:欧阳道卖验名称:简单的语出分析程序设计卖验要求功能:对简单的赋值语句进行语比分析随机输入赋值语句,输出所输入的赋值语句与柏应的叨元式采用递.归下阵分析程序完成(自上而下的分析丿确定各个子程序的功能并昌出流程图文法如下:编码、调试通过采用榇准输入输出方式。输入输出的样例如下:【样例输入】x:=a+b*c/d(e+f)【样例输出】(说朗,语句和叨元式之间用5个空格隔开)Tl:=b*c(*,b,c,Tl)T2:=Tl/d(/,Tl,d,T2)T3:=a+T2(+,a,...

递归下降语法分析程序设计
编译方法卖殓 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 时间:2021.03.06创作:欧阳道卖验名称:简单的语出分析程序设计卖验 要求 对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗 功能:对简单的赋值语句进行语比分析随机输入赋值语句,输出所输入的赋值语句与柏应的叨元式采用递.归下阵分析程序完成(自上而下的分析丿确定各个子程序的功能并昌出 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 图文法如下:编码、调试通过采用榇准输入输出方式。输入输出的样例如下:【样例输入】x:=a+b*c/d(e+f)【样例输出】(说朗,语句和叨元式之间用5个空格隔开)Tl:=b*c(*,b,c,Tl)T2:=Tl/d(/,Tl,d,T2)T3:=a+T2(+,a,T2,T3)T4:=e+f(+,c,f,T4)T5:=T3T4(,T3,T4,T5)x:=T5(:=,T5„x)【样例说朗】程序除能够正确输出叨元式外,当输入的表达式错误时,还应能检测出语比错误,给出相应错谖提示。设计35个赋值语句测试卖例,检验程序能否输出正确的四元式;多输入错谖的句子时,检验程序能够给出语法错谖的柏应提示信息。掖吿内彖包括:递.归程序的调用过程,各子程序的流程图和总控流程图,详细设计,35个测试用例的程序运行我图及相关说朗,有详细注猝的程序代码请单等。1•语法分析适归下啥分析算法51.1背景知识51.2苗除左适归62•详细设计及流程图6函数voidV()//V>alblcldle…Iz62.2函数voidA()//A>V:=E72.3函数voidE()//E>TEr72.4函数voidT()//T>FT8函数voidEl()//F>+TErITE1null8函数voidTl()//T*>*FTI/FTInull93.测试用例及我图93」测试用例1及我图93.2测试用例2及我图103.3测试用例3及裁.图11代码请单11•语出分析逼归下阶分析算法1.1背景知识无回溯的自上向下分析技术可用的丸决条件是:无左递_归和无回溯。无左递.归:既没有直接左递.归,也没有间接左递_归。无回溯:对于任一非终结符号U的产生式右部xl|x2|...|xn,其对应的字的首终结符号两两不相交。如果一个文法不含回路,也不含以£为右部的产生式,那么可以通过块行谄除丈比左递.归的算比谄除文法的一切左递.归(改写后的丈比可能含有以£为右部的产生式丿。文法的左递.归消除算法:1、将丈比G的所有非终结符排序为U1,U2,...,5;2、For(i=lii++;i>n){forj^lto订把产生式Ui—>Uja眷换成Ui-^pla|p2a|...|pma;其中:UHpl|p2|...|pm葡除Ui产生式中的直接左递.归;}化简改写之后的文法,删除多余产生式。丈比的直接左递.归谄除公式:直接左适归形式:U->Ux|y;其中:x,yefVNUVTJ*,y不以U打头。直接左递.归的谄除:U—yU"UJxU"|w直接左递.归的一般形式:U—>Uxl|Ux2|...|Uxm|yl|y2|...|yn;其中:xi舟,yi都不以U打头。一般形式直接左递.归的葡除:U—ylU"|y2U"|...|ynU"UJxltqx2U"|...|xmU"|£回溯的谄除的前提是丈法不得含有左递.归,可提左因子来谄除回溯。1・2询险左遁归根据卖验中给出的丈法,进行谄除左递.归及回溯,得到下刊的式子A>V:=EE>TE'E*>+TE,ITE'lnullT>FT*T*>^FTI/FT'InullF>VI(E)V>alblcldle...lz•详鈿设计凤浇程图根擔谄除左递.归后的丈比,可以编写相应的函数。由數voidV()//V>alblcldle...lzvoidV()//V>alblcldle...lz函数设计主要用来枳别小写字母的,如果是小写字母的话,放入字符表,不是的话,输出语比错娱。函数比较简单,代码如下:if(islower(s[sym])){Table[list_n][O]=s[sym];〃把读取的小写孕母存入符号表,便于分析是生成中问代码Table[list_n][l]='\O';list_n++;sym++;}else{printfC'OperandErrors!\nH);〃运算对象错谋SIGN=1;exit(O);}函數voidA()//A>V:=EvoidA()//A>V:=E函数主要用来卖现賦值的操作,流程图如图1所示。图1A()因数流程图2・3函數voidE()//E>TE1函数E(丿里面主要递.归调用函数T()和E()。当没有出现语法错误时就可正帝的运行。函数比较简单,代码如下:{if(SIGN==0){T();El();}}2・4函數voidT()//T>FT1函数T()里面主要递.归调用函数F()和T”()。当没有出现语比错谖时就可正帝的运行。场数比较简单,代码如下:if(SIGN==0)F();Tl();}函數voidEl()//E*>+TE,ITE,lnull函数voidEl()//E'>+TE,ITE,lnull,主要用来卖现加减出的语义分析。流程图如图2所示。图2E1()函数流程图函數voidTl()//T>*FT'l/FT'lmill函数voidTl()//T>*FT'l/FT'lnulL主要用来卖现乘除法的语义分析。流程图如图3所示。图3T1()曲数流程图•测洪用例汶辄图3.1测试用例1及枫图用例1为卖唸要求上的的用例。测试结果图4所示。图4测试用例1及结果我图3・2测试用例2及枫图用例2为出现大写字母,出现赧错。测试结果图5所7jTo图5测试用例2及结果我图3・3测诚用钢3及离图用例3为随意编写用例。测试结果图6所示。图6测试用例3及结果我图代码谕車includeinclude#include#includevoidA();//A>V:=EvoidE();//E>TE'voidT();//T>FTvoidE1();//E'>+TE1TE'lnullvoidTl();//T>*Fri/FTInullvoidF();//F>VI(E)voidV();//V>alblcldle...lzchars[50],n=T;//s[50]用于存放输入的賦值表达式charTable[50][3];〃产生中间代码所需的符号表intSIGN,sym;//sym为s[50]中当前读入符号的下栋intlist_n=0;//符号表的下标/*谄除左递.归及回溯A>V:=EE>TEE'>4-TE'ITE'lnullT>FTT>^FTI/FTlnullF>VI(E)V>alblcldle...lz*/intmain(){SIGN=0;//SIGN用于指示赋值表达式是否出现餡镁sym=0;scanf(”%s”,&s);if(S[O]==AO1)〃没有输入的情况直接退出return0;A();if(s[sym]!=r\0'&&SIGN==0){printf(nERROR!\n");exit(0);}return0;}voidA()//A>V:=E{V();if(s[sym]==,:t&&s[sym+l]==』')〃判断赋值号是否有拼写错谋{sym+=2;E();printf(H%s:=%sH,Table[list_n2],Table[list_nl]);printf(H(:=,%s„%s)\n,',Table[list_nl],Table[list_n2]);}elseprintf("TheassignmentSymbolspellingmistakes!\nn);〃賦j值号拼写错谖SIGN=1;exit(O);}}voidV()//V>alblcldle...lz{if(islower(s[sym])){Table[list_n][O]=s[sym];〃把读取的小写字母存入符号表,便于分析是生成中间代码Table[list_n][l]=,\O,;list_n++;sym++;}else{printf("OperandErrors!\nH);〃运算对象错谋SIGN=1;exit(0);}}voidE()//E>TE{if(SIGN==0){T();El();}}voidT()//T>FT1{if(SIGN==0){F();Tl();}}voidE1()//E'>+TE1TE1nullintp;if(SIGN==0){if(s[sym]=='+'lls[sym]=="){p=sym;〃用p 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 出现或”时sym的值sym++;T();charch[3];ch[O]=T;ch[l]=n;ch⑵八0:if(s[p]==V)printf(n%s:=%s+%s,\ch,Table[list_n2],Table[list_n1]);〃输出三地址代码printf(n(+,%s,%s,%s)\nf\〃输出b元式Table[list_n2],Table[list_nl],ch);else{printf(H%s:=%s%s",ch,Table[list_n2],Table[list_n1]);〃输出三地址代码printf(H(,%s,%s,%s)\n",Table[list_n2],Table[list_n1],ch);〃输出四元式}strcpy(Table[list_n2],ch);〃将当<结果归结式放衣.符号表中list_n;n++;El();voidT1()//T>*FT'l/FT'lnull{intp;if(SIGN==0)if(s[sym]==t*tlls[sym]==7,){p=sym;sym++;F();charch[3];ch[0]=T;ch[l]=n;ch⑵八0:if(s[p]=='**){printf(H%s:=%s*%sn,ch,Table[list_n2],Table[list_nl]);〃输出三地址代码printf(H(*,%s,%s,%s)\n'\Table[list_n2],Table[list_nl],ch);//输出四元式}else{printf(,,%s:=%s/%s,,,ch,Table[list_n2],Table[list_nl]);〃输出三地址代码printf(n(/,%s,%s,%s)\n'\Table[Iist_n2],Table[list_nl],ch);//输出四元式}strcpy(Table[list_n2],ch);〃将当前结果归结式放往符号表中list_n;n++;Tl();}}}voidF()//F>VI(E){if(SIGN==0){if(s[sym]=='(,){sym++;E();if(s[sym]==y)sym++;elseprintf(HERROR!\nn);SIGN=1;exit(0);}elseif(islower(s[sym]))〃判断s[sym]是否是小写字V();elseprintf(”ERROR!\n”);SIGN=1;exit(O);}}时间:2021.03.06创作:欧阳道
本文档为【递归下降语法分析程序设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
zhouhe
暂无简介~
格式:doc
大小:18KB
软件:Word
页数:0
分类:交通与物流
上传时间:2021-10-25
浏览量:0