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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

天津理工大学编译原理实验3语义分析及中间代码生成Word文件下载.docx

1、5理解并处理语义分析中的异常和错误。实验要求:1在实验二的基础上,实现语法制导翻译功能,输出翻译后所得四元式序列;2要求详细描述所选分析方法进行制导翻译的设计过程;3完成对所设计分析器的功能测试,并给出测试数据和实验结果;4为增加程序可读性,请在程序中进行适当注释说明;5整理上机步骤,总结经验和体会;6认真完成并按时提交实验报告。【实验过程记录(源程序、测试用例、测试结果及心得体会等)】#includecstring#define size 1024using namespace std;int step=0;typedef struct variable_T char operate;/操作

2、符 string var1;/变量 1 string var2;/变量 2 int num;/第几个变量 variable_T;variable_T tsize;/记录四元式变量的变量 int tsize=-1;/表示是第tsize+1个变量typedef struct char_stack char content;/当前字符 string endchar;/这个符号代表的中间变量 可以是 i, 也可以是 t1, t2, 等等 /和该字符相关的中间变量的序号 char_stack;string table1913=/ + - * / ) # ( i E T F P /* 0 */ err,

3、s5s61234, /* 1 */ s7s8acc /* 2 */ r3s9s10 /* 3 */ r6 /* 4 */ r8s11 /* 5 */ c /* 6 */ r10 /* 7 */ d /* 8 */ e /* 9 */ f /* 10*/ g, /* 11*/ h /* 12*/ s18 /* 13*/ r1 /* 14*/ r2 /* 15*/ r4 /* 16*/ r5 /* 17*/ r7 /* 18*/ r9;int getLength(char strsize) int i=0; while(stri!=0) i+; return i; int getLengthc(c

4、har_stack strsize) while(stri.content!int getstringLength(string str)char gettop(char stacksize,int top) if(stacktop! return stacktop; else return #;void popstack(char *stack,int *pointer,int times) int p; for(int i=1;i=times;i+) p=*pointer; stackp= (*pointer)-; void popstackc(char_stack *stack,int

5、*pointer,int times) stackp.content=void pushstack(char_stack *stack,int *pointer,char *stack_state,int *pointer_state,char str,char sx,int x) if(x=0) coutttt状态 sx 进状态栈 else if(x=1) 状态 if(str!str 进字符栈 (*pointer)+; stack(*pointer).content=str; (*pointer_state)+; stack_state(*pointer_state)=sx;int getc

6、ol(char top) switch(top) case +: return 0;- return 1;* return 2;/ return 3; return 4;) return 5; return 6;( return 7;i return 8;E return 9;T return 10;F return 11;P return 12; default: coutError! This character string is not this grammers sentence.endl; return -1;int getraw(char raw) switch(raw)0123

7、456789abcd return 13;e return 14;f return 15;g return 16;h return 17; return 18;char getraw_content(string str) if(str= else if(str=istring get_tx(int num) switch(num) case 1: return t1 case 2:t2 case 3:t3 case 4:t4 case 5:t5 case 6:t6 case 7:t7 case 8:t8 case 9:t9 case 10:t10 case 11:t11 case 12:t1

8、2 case 13:t13 case 14:t14 case 15:t15 case 16:t16 /.本程序暂时用到这么多,等有时间编写合适的可以将数字转换为字符串的函数时,即可更改本函数 void show(char strsize,int index) int length=getLength(str); if(index!=-1)t for(int i=index+1;length;stri;void showc(char_stack strsize,int index) int length=getLengthc(str);stri.content;void switch_metho

9、d(char_stack *stack,int *pointer,char *state_stack,int *pointer_state,string production,char *str,int *index) step+; coutnstep/显示步骤 show(state_stack,-1);/显示状态栈 showc(stack,-1);/显示符号站 str(*index)/显示当前字符 show(str,(*index);/显示输入串 char c=str(*index); if(production= return ; else if(production= char sx=

10、(*index)+; pushstack(stack,pointer,state_stack,pointer_state,c,sx,0);) int po=(*pointer);/用P规约该表达式,有效变量在E的endchar中,需要找到E的位置,即下面的操作 string st=stackpo.endchar;/对应 F po-=2; string se=stackpo.endchar;/在规约之前记录下要规约的字符所代表的变量。对应 T tsize+;/新增临时变量 ttsize.num=tsize+1;/下面四个表达式是按照上面的规约式进行的赋值 ttsize.operate= ttsi

11、ze.var1=se; ttsize.var2=st;t(ttsize.operatettsize.var1ttsize.var2,tttsize.numE+T规约且 popstack(state_stack,pointer_state,3); popstackc(stack,pointer,3); char c=/str(*index); pushstack(stack,pointer,state_stack,pointer_state,c,c_out,1); string s=get_tx(ttsize.num); stack(*pointer).endchar=s;/把保存E+T规约的结果的变量保存至当前字符的终结符 /对应 T 对应 E tr2:E-T规约且/把保存E-T规约的结果的变量保存至当前字符的终结符 string s=stack(*pointer).endchar;/在规约之前记录下要规约的字符所代表的变量 p-; char second=state_s

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

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