编译原理实践报告

编译原理实践报告

ID:18445695

大小:518.00 KB

页数:20页

时间:2018-09-18

编译原理实践报告_第1页
编译原理实践报告_第2页
编译原理实践报告_第3页
编译原理实践报告_第4页
编译原理实践报告_第5页
资源描述:

《编译原理实践报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、课程实践报告书编译原理课程实践报告书学员姓名:学号:专业:年级:年月日20课程实践报告书1、课程实践目的本次是实践的目的旨在加强学生对编译过程的整体认识,通过扩充PL语言编译器,加深对词法分析、语法分析和中间代码生成的原理的理解。2、任务概述本次实践的任务包括源程序的分析,扩充repeat、for、case等语言成分。3、实现方法3.1、准备工作:1、在词法库中添加repeat、until、for、to、case等;2、添加repeat、for、case等语句的分析函数;3、修改初始化工作(修改voidINITIAL()函数

2、);4、增加相应常量的定义。3.2、repeat语句的扩充方法:PL语言中的repeat语句语法如下:repeatS1untilE;其中E为布尔表达式。实现函数如下:voidREPEATMENT(SYMLIST*list)//repeat语句的分析{TYPEITEMtypeItem;intjumpback;20课程实践报告书JUMADRTAB[JX]=CX;JX++;jumpback=CX;//纪录repeat循环执行时需要往前返回的地址getASymbol();while(CurSymbol->type!=UNTILSYM

3、){STATEMENT(list);//分析语句if(CurSymbol->type==SEMICOLON)getASymbol();}if(CurSymbol->type==UNTILSYM)getASymbol();/////////////////////////////////////////////////////////////////SYMLIST*tempList=newSYMLIST;COPYLIST(tempList,listAddSym(list,UNTILSYM));EXPRESSION(tempLi

4、st,typeItem);deletetempList;/////////////////////////////////////////////////////////////////if(typeItem.typ!=BOOLS)error(32);20课程实践报告书//if或while或until后面的表达式类型应该是布尔类型GEN(JPC,0,jumpback);}词法分析器识别repeat后,调用REPEATMENT()函数,进行语法分析。REPEATMENT()函数首先翻译repeat语句的循环体S1,识别unti

5、l后翻译条件表达式E。E的false出口为语句S1,true的出口为下一语句。3..3、for语句的扩充方法:PL语言中的for语句语法如下:forQ1toVdoS1其中Q1为赋值语句,V为整型表达式。实现函数如下:voidFORMENT(SYMLIST*list)//for语句的分析{TYPEITEMtypeItem;intjumpback,fillBackFalse;inta_level,a_address;//记录循环变量的层次和地址getASymbol();intx;x=GETPOSITION(CurSymbol->

6、value.lpValue);//查表if(x!=0){a_level=NAMETAB[x].level;20课程实践报告书a_address=NAMETAB[x].unite.address;}STATEMENT(list);//分析语句JUMADRTAB[JX]=CX;JX++;jumpback=CX;//纪录for循环执行时需要往前返回的地址if(CurSymbol->type==TOSYM)getASymbol();elseerror(44);//应该是'to'GEN(LOD,a_level,a_address);/

7、/取a/////////////////////////////////////////////////////////////////SYMLIST*tempList=newSYMLIST;COPYLIST(tempList,listAddSym(list,DOSYM));EXPRESSION(tempList,typeItem);deletetempList;/////////////////////////////////////////////////////////////////if(typeItem.typ!=

8、INTS)error(45);//to后面的表达式类型应该是整型GEN(LE,0,0);//比较a<=b20课程实践报告书fillBackFalse=CX;//条件测试失败后从哪里往循环“外”跳GEN(JPC,0,0);if(CurSymbol->type==DOSYM)getASymbo

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。