编译实验报告语义清华大学_第1页
编译实验报告语义清华大学_第2页
编译实验报告语义清华大学_第3页
编译实验报告语义清华大学_第4页
编译实验报告语义清华大学_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

编译原理实验报告实验名称:分析语义分析调试分析程序实验类型: 验证型 指导教师:专业班级:姓名: —学号: 实验地点: 实验成绩: 日期:2013年月日词法语法语义代码地址

注三个代码在一个项目里一、实验目的通过分析调试TEST语言的语义分析和中间代码生成程序,加深对语法制导翻译思想的理解,掌握将语法分析所识别的语法范畴变换为中间代码的语义翻译方法。二、实验设计1、分析调试附录部分语义分析代码,调试正确后调试抽象机代码2、用TEST语言编写1-10的乘积与和,并输出的代码,先进行词法分析,后进行语义分析,在调用抽象机模拟三、实验过程1、先将代码编译,找到输入错误,改正,此类错误不易看出,要细心找。其中TEST抽象机代码打开文件部分文件名有错,ccc.t改为Codein2、将如下代码进行语法语义分析:{/*Thisatestprogram.*/intabc;int123;inti;intn;intb,c;charss;readn;for(i=1;i<=n;i=i+1){

abc=abc+i;}writeabc;}实验输出intint123;有语法错误,删除该行,测试test沁融I彳牛名(包括路径):2-txt-txt:1.txttest沁融I彳牛名(包括路径):2-txt-txt:1.txt福法成标源黑目t天入分入inbe®IW<ta畫词请€inID旬天IDchar 语法、语义分析及代码生成程序结果第&行:缺少方・语法、语文谢 TEET模扌IPress己n#kEytocontimwintb,c;不能同时定义两个变量,改为intb,c;不能同时定义两个变量,改为intb;测试J:test括路径)・txt:1・txttnitnJ:test括路径)・txt:1・txttnitn血程法成标|«分入亶词请€I彳牛名〔包括路径):2.txtintintIDiintintIDnintintIDbIDchar析及代码生成程序结果?[Pressan</keytocontinuecharss;将char识别为标识符,删除该行1 'C:\Users\Administrator\De-5ktop\实验3\TEST\Debug\TEST.exe"writewriteIDabc析及代码生成程序结果?continue4otyey_na地址01表析及代码生成程序结果?continue4otyey_na地址01表号字c符名abi义成机45xw:393nb费ST据89语语TE数85「=入:-一一法一一普-五口-責別此时分析成功,但输入数据,结果是一随机数,分析是变量没有赋值。赋值■ 'C:\Users\Administrator\De5ktop\实验3\TEST\Debug\TEST.exe"++writewrite表号字表号字c符名ab地址01义成机IKX絵:3义成机IKX絵:3雯ST据语语TE数_一、=入:6析及代码生成程序结果ano

t

y

econtinue结果正确如果分析代码结果正确如果分析代码{writeabc;}显示没有定义变量,显示有错没有定义变量,显示有错3、编写计算1-10的乘积与和,并输出的代码,如下{intnum;num=0;inti;intn;readn;for(i=1;i<=n;i=i+1){3、编写计算1-10的乘积与和,并输出的代码,如下{intnum;num=0;inti;intn;readn;for(i=1;i<=n;i=i+1){num=num+i;}writenum;num=1;for(i=1;i<=n;i=i+1){num=num*i;}writenum;}结果I'C:\Users\Administrator\Desktop\实验3\TEST\Debug\TEST.exe"S3IDnumIDnum严«■IDiwritewriteIDnumif、竄:100n雯ST据88语语TE数562_一、=入汚:3_一法一一朗岀==五二青建刨表号字m符名nui结果正确三、实验结果I输出1-10的乘积与和四、讨论与分析1、语义及代码生成中的符号表管理方案存在什么问题?提出改进方案。不能分析出变量是否赋值,可以在增加一个属性,change_state,如果变量被赋值则change_state=1,否则始终为0.3、 给出〈declaration_stat〉产生式所添加的动作含义。<declaration_stat>Ivarablep,datap->intIDfn@name-def|n,t;动作解释:Vartablep指出符号表的最后一个记录的下一个位置,即第一个空白记录位置。每当有一个记录加入符号表,该值加1;datap表示已经分配的地址空间,它开始时间为0,每当声明一个变量,该值则根据变量类型累加。@name-defIn,t的动作:查询符号表,从vartablep所指的前一个位置起往回查,直到第一个记录,若没有,将标志符名n及类型1、datap的值填入符号表vartablep所指的位置,然后vartablep加1,datap根据类型t增加;若有,报告错误:变量名重复定义。4、 给出〈factor>产生式中所添加的动作含义。〈factor〉::=(〈expression〉)|IDfn@LOOKInfd@LOADId|NUMfi@LOADIIi动作符号解释:@LOOK|nfd:查符号表n,给出变量地址d;没有,变量没定义@ASSIGN:超前读一个符号,如果是‘二'则表示进入赋值表达式,如果不是‘=',则选择<比较表达式>,然后还要将超前读的这个符号退回。@STO|d:输出指令代码STOd,且codep++(因产生了指令,所以指令记数加1)@LOADI|i:输出指令代码LOADI i,且codep++@LOAD|d:输出指令代码LOAD d,且codep++@GT、@ADD等:输出后的指令代码GT、ADD等5、在抽象机模拟程序中是如何统计指令总数的?画出流程并做说明。irtfiizciitef■冃mEl1CDd»|l|=aiJT|話TO力片li远门.iZad^i;irtfiizciitef■冃mEl1CDd»|l|=aiJT|話TO力片li远门.iZad^i;-=AH'、lowzffjeMeJiKFQirNcnrrST-||*l£JJ5f(CDde|i|-^OI)-ll!HI>ll<IIH胆反S肿Mi> 幡网肖种囲1Ui•川.:.a>T^r^ftrtiKS?S^4l.l用i记录五、附录:关键代码(给出适当注释,可读性高)intexpression(){intes=0,fileadd,n=0;chartoken2[20],token3[40];if(token[0]=='"') //字符串的判断{RWNext();fprintf(fout,"\tOUTS%s\n",token1);//输出OUTS指令outs=true;RWNext();if(token[0]!='"'){es=11;qes.push(es);qesy.push(posx[numb]);es=0;goonfsc();}RWNext();}else{while((n<keywordSum)&&strcmp(token1,keyword[n]))n++;if(n<keywordSum)//是保留字,报错{es=8;qes.push(es);qesy.push(posx[numb]);es=0;goonfsc();RWNext();returnes;}if(strcmp(token,"ID")==0){fileadd=ftell(fp); //@ASSIGN记住当前文件位置fscanf(fp,"%s%s\n",&token2,&token3);if(strcmp(token2,"=")==0){intaddress;es=lookup(token1,&address); //查符号表,获取变量地址if(es>0)return(es); //变量没声明printf("%s%s\n",token2,token3);RWNext();if(strcmp(token,"-")==0) //判断负号RWNext();es=bool_expr();if(es>0)returnes;fprintf(fout,"STO%d\n",address);//输出STO指令}else{fseek(fp,fileadd,0);es=bool_exp

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论