语义分析及中间代码生成程序设计原理与实现技术实验报告及源代码北京交通大学

.语义分析及中间代码生成程序设计原理与实现技术XXX1028XXX2计科1XXX班1.程序功能描述完成以下描述赋值语句和算术表达式文法的语法制导生成中间代码四元式的过程。G[A]:A→V:=EE→E+T∣E-T∣T→T*F∣T/F∣FF→(E)∣iV→i说明:终结符号i为用户定义的简单变量,即标识符的定义。2.设计要求(1)给出每一产生式对应的语义动作;(2)设计中间代码四元式的结构(暂不与符号表有关)。(3)输入串应是词法分析的输出二元式序列,即某算术表达式“实验项目一”的输出结果。输出为输入串的四元式序列中间文件。(4)设计两个测试用例(尽可能完备),并给出程序执行结果四元式序列。3.主要数据结构描述:本程序采用的是算符优先文法,文法以及算符优先矩阵是根据第四次实验来修改的,所以主要的数据结构也跟第四次差不多,主要为文法的表示,FirstVT集和LastVT集以及算符优先矩阵:专业资料word.structinfo{charleft;vector<string>right;vector<char>first;vector<char>last;};算符优先矩阵采用二维字符数组表示的:算符优先矩阵charmtr[9][9];//4.程序结构描述:本程序一共有8功能函数://获取文法voidget();//打印文法voidprint();LastVT和//求FirstVTvoidfun();voidmatrix();//求算符优先矩阵测试文法voidtest();//-10比较两个运算符的优先级1intcmp(chara,charb);打印四元式voidout(charnow,intavg1,intavg2);//定义四元式计算方法//intope(charop,inta,intb);5.实验代码详见附件6.程序测试6.1功能测试程序运行显示如下功能菜单:专业资料word.选择打印文法:集:LastVTFirstVt选择构造集和专业资料word.选择构造算符优先矩阵:文法测试6.2专业资料word.测试1:1+2*3测试2:2+3+4*5+(6/2)专业资料word.学习总结7.所采用的方法为算符优先本次实验完成了语义及中间代码生成的设计原理与实现,然后根据他们求出此LastVT集,集和分析方法,首先根据文法求出此文法的FirstVT所只是多了一条赋值语句,文法的算符优先矩阵。由于此文法和第四次文法基本相同,以采用的规则和第四次基本相同。在分析阶段,每当遇到有规约的项目,判断一下,打印出此部运算的四元式,这样一步一步分析,知道输入的算术表达式计算分析完毕。只需增加一点四元式的分析由于本次实验部分代码和第四次实验的代码比较相似,专业资料word.计算打印过程,就能够顺利完成本次实验。通过这次实验,我对语义分析以及中间代码部分有了一定的提高,对以后的学习有了一定程度上的帮助。//lb6.cpp:定义控制台应用程序的入口点。//#includestdafx.h#include<iostream>#include<string>#include<VECTOR>#include<stack>usingnamespacestd;structinfo{charleft;vector<string>right;vector<char>first;vector<char>last;};vector<info>lang;专业资料word.charmtr[9][9];//算符优先矩阵stack<char>sta;voidget();//获取文法voidprint();//打印文法voidfun();//求FirstVT和LastVTvoidmatrix();//求算符优先矩阵voidtest();//测试文法intcmp(chara,charb);//比较两个运算符的优先级10-1voidout(charnow,intavg1,intavg2);//打印四元式intope(charop,inta,intb);//定义四元式计算方法intmain(){intchoose;while(1){cout<<****************************************<<endl;cout<<获取文法请按1<<endl;cout<<打印文法请按2<<endl;cout<<构造FirstVT集和LastVT集请按3<<endl;cout<<构造优先关系矩阵请按4<<endl;cout<<文法测试请按5<<endl;专业资料word.cout<<结束请按0<<endl;cout<<****************************************<<endl;cout<<endl;cin>>choose;if(choose==0)break;switch(choose){case1:get();break;case2:print();break;case3:fun();break;case4:matrix();break;case5:test();break;default:break;}}return0;}voidget(){infotemp,temp1,temp2;temp.left='E';专业资料word.temp.right.push_back(E+T);temp.right.push_back(E-T);temp.right.push_back(T);temp.right.push_back(i);temp1.left='T';temp1.right.push_back(T*F);temp1.right.push_back(T/F);temp1.right.push_back(F);temp2.left='F';temp2.right.push_back((E))...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

笔杆子文秘
机构认证
内容提供者

为您提供优质文档,供您参考!

确认删除?