ImageVerifierCode 换一换
格式:DOCX , 页数:8 ,大小:15.46KB ,
资源ID:8867588      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8867588.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(中间代码生成程序三地址.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

中间代码生成程序三地址.docx

1、中间代码生成程序三地址#include#include#includeusing namespace std;stack state;stack symbol;/stack val;stack symbol2;char sen50;char sym126=/符号表 s,e,e,s,e,e, e,s,e,e,e,a, r,r,s,r,r,r, r,r,r,r,r,r, s,e,e,s,e,e, r,r,r,r,r,r, s,e,e,s,e,e, s,e,e,s,e,e, e,s,e,e,s,e, r,r,s,r,r,r, r,r,r,r,r,r, r,r,r,r,r,r;char snum126

2、=/数字表 5,1,1,4,2,1, 3,6,5,3,2,0, 2,2,7,2,2,2, 4,4,4,4,4,4, 5,1,1,4,2,1, 6,6,6,6,6,6, 5,1,1,4,2,1, 5,1,1,4,2,1, 3,6,5,3,11,4, 1,1,7,1,1,1, 3,3,3,3,3,3, 5,5,5,5,5,5;int go2123=/goto表 1,2,3, 0,0,0, 0,0,0, 0,0,0, 8,2,3, 0,0,0, 0,9,3, 0,0,10, 0,0,0, 0,0,0, 0,0,0, 0,0,0;void action(int i,char *&a,char &how

3、,int &num,char &A,int &b,int &k)/action函数i,a int j;/,r; char s1,s2,s3; char v; switch(*a) case i: /case d: j=0;break; case +: j=1;break; case *: j=2;break; case (: j=3;break; case ): j=4;break; case #: j=5;break; default: j=-1;break; if(j!=-1) how=symij; num=snumij; if(how=r) switch(num) case 1: A=E

4、,b=3; coutE1+T规约endl; s1=symbol2.top(); symbol2.pop(); s2=symbol2.top(); symbol2.pop(); s3=symbol2.top(); symbol2.pop(); symbol2.push(k+48); couttk=(v=(isdigit(s3)?t: )s3s2;cout(v=(isdigit(s1)?t: )s1endl; k+; break; case 2: A=E,b=1; coutT规约endl; break; case 3: A=T,b=3; coutT1*F规约endl; s1=symbol2.top

5、(); symbol2.pop(); s2=symbol2.top(); symbol2.pop(); s3=symbol2.top(); symbol2.pop(); symbol2.push(k+48); couttk=(v=(isdigit(s3)?t: )s3s2;cout(v=(isdigit(s1)?t: )s1endl; k+; break; case 4: A=T,b=1; coutF规约endl; break; case 5: A=F,b=3; cout(E)规约endl; break; case 6: A=F,b=1; coutid规约endl; break; defaul

6、t: break; int go(int t,char A)/gotot,A switch(A) case E: return go2t0;break; case T: return go2t1;break; case F: return go2t2;break; void error(int i,int j,char *&a)/error显示函数 couterrorendl; switch(j) case 1:/期望输入id或左括号,但是碰到+,*,或$,就假设已经输入id了,转到状态5 /state.push(5); /symbol.push(i);/必须有这个,如果假设输入id的话,符号

7、栈里必须有. cout缺少运算对象digitendl; break; case 2:/从输入中删除右括号 /a+; cout不配对的右括号endl; break; case 3:/期望碰到+,但是输入id或左括号,假设已经输入算符+,转到状态6 /state.push(6); /symbol.push(+); cout缺少运算符endl; break; case 4:/缺少右括号,假设已经输入右括号,转到状态11 /state.push(11); /symbol.push(); cout缺少右括号endl; break; case 5: /a+; cout*号无效,应该输入+号!sen; a=

8、sen; state.push(0);/先输入0状态 while(*a!=0) b=0;num=0;how=0;A=0; s=state.top(); q=*a; if(isalpha(*a) *a=i; action(s,a,how,num,A,b,k); if(how=s)/移进 cout移进endl; symbol.push(*a); state.push(num); if (q!=(&q!=) symbol2.push(q); a+; else if(how=r)/规约 for(int i=0;ib;i+) if(!state.empty() state.pop(); if(!symbol.empty() symbol.pop(); int t=state.top(); symbol.push(A); state.push(go(t,A); else if(how=a)/接受 cout成功接受endl; break; else error(s,num,a);/错误显示 cout输入有误,重新输入!endl; break; return 0;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1