天津理工大学编译原理试验3:语义分析与中间代码生成.docx

上传人:王** 文档编号:231662 上传时间:2023-04-18 格式:DOCX 页数:15 大小:53.62KB
下载 相关 举报
天津理工大学编译原理试验3:语义分析与中间代码生成.docx_第1页
第1页 / 共15页
天津理工大学编译原理试验3:语义分析与中间代码生成.docx_第2页
第2页 / 共15页
天津理工大学编译原理试验3:语义分析与中间代码生成.docx_第3页
第3页 / 共15页
天津理工大学编译原理试验3:语义分析与中间代码生成.docx_第4页
第4页 / 共15页
天津理工大学编译原理试验3:语义分析与中间代码生成.docx_第5页
第5页 / 共15页
天津理工大学编译原理试验3:语义分析与中间代码生成.docx_第6页
第6页 / 共15页
天津理工大学编译原理试验3:语义分析与中间代码生成.docx_第7页
第7页 / 共15页
天津理工大学编译原理试验3:语义分析与中间代码生成.docx_第8页
第8页 / 共15页
天津理工大学编译原理试验3:语义分析与中间代码生成.docx_第9页
第9页 / 共15页
天津理工大学编译原理试验3:语义分析与中间代码生成.docx_第10页
第10页 / 共15页
亲,该文档总共15页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《天津理工大学编译原理试验3:语义分析与中间代码生成.docx》由会员分享,可在线阅读,更多相关《天津理工大学编译原理试验3:语义分析与中间代码生成.docx(15页珍藏版)》请在优知文库上搜索。

1、大讲记大塔实验报告学院(系)名称:计算机与通信工程学院姓名学号专业班级实验项目实验三:语义分析与中间代码生成课程名称编译原理课程代码实验时间实验地点计算机软件实验室7-220计算机软件实验室7-215批改意见成绩教师签字:实验内容:可选择LLl分析法、算符优先分析法、LR分析法之一,实现如下表达式文法的语法制导翻译过程。文法GE如下所示:E-E+TIE-TITT-T*FIT/FIFF-PaFIPP(E)Ii要求构造出符合语义分析要求的属性文法描述,并在完成实验二(语法分析)的基础上,进行语义分析程序设计,最终输出与测试用例等价的四元式中间代码序列。实验目的:1 .掌握语法制导翻译的基本功能。2

2、 .巩固对语义分析的基本功能和原理的认识。3 .能够基于语法制导翻译的知识进行语义分析。4 .掌握类高级语言中基本语句所对应的语义动作。5 .理解并处理语义分析中的异常和错误。实验要求:1 .在实验二的基础上,实现语法制导翻译功能,输出翻译后所得四元式序列;2 .要求详细描述所选分析方法进行制导翻译的设计过程;3 .完成对所设计分析器的功能测试,并给出测试数据和实验结果;4 .为增加程序可读性,请在程序中进行适当注释说明;5 .整理上机步骤,总结经验和体会;6 .认真完成并按时提交实验报告。【实验过程记录(源程序、测试用例、测试结果及心得体会等)】#include#include#define

3、size1024usingnamespacestd;intstep=();typedefstructvariable_T(charOPerateJ操作符stringVar1;变量1stringvar2;变量2intnum;第几个变量variable_T;VariabIe_Ttsize;记录四元式变量的变量iniIsize=-I;/依示是第tsize+1个变量typedefstructchar_stack(charcontentJ/当前字符stringendchar:这个符号代表的中间变量可以是i,也可以是tl,t2,等等intnum;和该字符相关的中间变量的序号chajstack;string

4、table1913=/+-*a)#(iETFP*0*/eerr,eJeJe,err,e飞5”,飞6,1,2,3,4,/*1*,s7,飞8JenvelT”,“err”,eir”acc”,“enVerr7err“JenVenVerr,/*2*/,r3,r3,s9,sl,err,r3,yy,e,err,errerr,err,err,/*3*/,r6,r6,r6,r6,err,r6,rr,err,err,err,err,/*4*/r8,r8,r8,ur8,sl,r8,Y8rr,e,err,err,e,e,/*5*/,err*,eerr,err,err,errs5,s6,c,2,3,4u,/*6*/rl

5、0,10Jrl0,T10,T10,Tl(,T10,errJerr,err,errJerr,err,*7*/eJe,errJerreJeJe,s5,s6,err,d,“3“,“4,*8*/,err,errW,e,err,err,e,s5,s6,err,e,3,4,*9*/,errW,err,err,7,err,err,err,s5,s6,errerr,f,4,/10*/,err,e,err,e,e,e,e,s5,ts6,err,errg4,*11*/,err,err,e,err,err,7,err,err,s5,s6,e,err,h,4u,*12*/s7,err,err,slo,err,err,

6、errerr,err,err,err13*/rl,r,s9,slOeVTl,RJeVeVerr,5,eVe”14*/r2,r2,s9,sl,e,m2m,2W,err,7,e,7,e,err,err,15*/r4,r4,w,41l-zfHII-_Htw,zfIlMw,zr4,r4terr,r4r4,err,err,err,err,err,err16*/r5,r5,r,r3,r5,err,r3,r5,err,err,err,err,errerr*17*/,r7,r7,r7r7,errr7,Y7,e,err,err,err,err,*18*/,r9,r9,r9r9u,r9u,r9,r9,err,er

7、r,e,err,err,err,;inigetLength(charstrsize)(inti=0;while(stri!=,)i+;returni;)intgetLengthc(char_stackstrsize)(inti=O;vhile(stri.conlent!=,0)i+;returni;intgetstringLength(stringstr)inti=O;while(stri!=,O)i+;returni;)chargettop(charstacksize,inttop)(if(stacktop!=0)returnstacktop;elsereturnvoidpopstack(c

8、har*stack,int*pointer,inttimes)intp;fbr(inti=l;i=times;i+)(p=*pointer;stackp=0;(*pointer)-;1voidPoPStaCkC(ChaJStaCk*stack,int*poinler,inttimes)intp;fbr(inti=l;i=times;i+)p=*pointer;stackp.content=,0,;(*pointer);1voidPUShStaCk(Char_stack*stack,int*pointer,char*stack_state,int*poinler_state,charstr,ch

9、arsxjntx)inti=0;if(x=0)COUtttt状态sx”进状态栈elseif(x=l)CoUtVV状态VVsxVV”进状态栈”;if(str!=,)(coutstr进字符栈:(*poinler)+;stack(*pointer).Content=Str;(*pointer_state)+;stack_state(*pointer_state)=sx;intgetcol(chartop)(Switch(Iop)(casereturnO;case-:return1;case*:return2;caseV,:retum3;casea:retum4;case),:return5;case

10、return6;casereturn7;casei,:return8;case,E:return9;case,T:return10;caseF:return11;case,P:return12;default:coutError!Thischaracterstringisnotthisgrammer,ssentence,endl;return-1;intgetraw(charraw)(switch(raw)(case0:return0;case,:return1;case,2:return2;case,3:return3;case,4,:return4;case,5,:return5;case

11、,6:return6;case,7,:return7;case,8:return8;case,9:return9;case,a,:return10;case,b:return11;casec:return12;case,d:return13;case,e,:return14;casef:return15;caseg:return16;case,h,:return17;case,i,:return18;default:coutError!Thischaracterstringisnotthisgrammerssentence.endl;return-1;chargetraw_content(st

12、ringstr)(if(str=l)return;elseif(str=2)return2;elseif(str=3)return3;elseif(str=,4)return4;elseif(str=c)returnc;elseif(str=,d)returnd;elseif(str=e)returne;elseif(str=f)returnf;elseif(slr=g)returng,;elseif(str=h)returnh,;elseif(str=i)returni,;stringget_lx(intnum)switch(num)case 1:return,t,;case 2:return,t2;case 3:returnt3;case 4:return,t4;case 5:return,t5;cas

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > Web服务

copyright@ 2008-2023 yzwku网站版权所有

经营许可证编号:宁ICP备2022001189号-2

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