编译原理实验报告

编译原理实验报告

ID:13569935

大小:38.99 KB

页数:10页

时间:2018-07-23

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

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

1、编译原理实验报告课程名称:编译原理课程设计考试形式:实验报告授课院(系):大连理工大学软件学院交作业日期:2012年7月20日共1页班级:学号:姓名:洋洋洋嘿嘿联系方式:电子邮件:手机号码:139********上机检查出勤实验报告(二)实验报告(三)总分标准分7010155100得分一、上机实验检查(总计70分):(1)分离解释和编译器(20分):将解释器从已有代码中分离出来,形成一个独立的解释器,对于中间代码文件,可以执行并输出相应的结果。(2)注释处理(10):增加对注释的支持,注释由(*和*)包含,不允许嵌套。(3)布尔数据处理(10分):增加对于布尔类型的支持,其产生式见《编译

2、原理实践教程》。(4)布尔表达式的短路处理(10分):在上面工作的基础上,对and和or采取短路计算。(5)for语句处理(20分):  参照C语言,增加对于for语句处理。二、完成情况(15分):1.修改后的PL/0词法(正规式)(a)注释的正规式为:leftpart—>(*,rightpart—>*),phrase—>(任意字符)*(b)布尔类型的正规式为:bool—>Boolean,int—>interger,colon—>:,true——>true,false——>false,band—>and,bor—>or,bnot—>not(c)For的正规式为:for—>for,lbra

3、ce—>{,rbrace—>},break—>break,and—>&&,or—>

4、

5、2.修改后的PL/0语法(产生式)(a)注释的产生式为:part—>leftpartphraserightpart;(b)布尔的产生式为:S—>ABcolonT;A—>var

6、constB—>idCC—>,idC

7、εT—>bool

8、intE—>TE’E’—>orTE’

9、εT—>FT’-9-T’—>andFT’

10、εF—>notF’F’—>(E)

11、id(c)FOR的产生式:S—>for(A;B;C)D;A—>statementE

12、εE—>,statementE

13、εB—>conditionF

14、εF—>Hcon

15、ditionF

16、εC—>statementG

17、εH—>and

18、orG—>,statementG

19、εD—>statement

20、ε各任务的实现伪代码或者主要思想(1)解释器分离:在这段代码中,由变异产生的目标代码存在code里面,然后由解释器进行执行。但是老师给的源代码中编译器和解释器是放在一起的。所以,我们就得分清哪部分是编译器,哪部分是解释器,最后把两者分开。所以,我新建了一个工程,只将base()函数和interrupt()函数拷贝进来,并对主函数进行修改,主要代码如下:if((infile=fopen(s,"r"))==NULL){printf("File%scan'tbeopene

21、d.",s);exit(1);}while(!feof(infile)){fread(&code[i++],size,1,infile);if(i>=CXMAX){printf("Thefile%sistoolarge,can'tbeexcuted",s);break;}printf("%5d%st%dt%d",i,mnemonic[code[i-1].f],code[i-1].l,code[i-1].a);}interpret();(2)注释处理:在getsym()函数中,当时别处‘(’时,紧接着读取下一个字符,判断是否为‘*’号,如果不是则把‘sym’置为做括号标记,不再

22、处理,如果是的话则表明是注释的开始,然后继续取字符,直到遇到’*’,并且去下一个判断是否是’)‘,如果是的话,则再次调用getsym(),不是的就继续。关键代码如下:while((!feof(infile))//added&modifiedbyalex01-02-09&&((ch=getc(infile))!='')){////////////////////////////注释处理if('('==ch){ch=getc(infile);if('*'==ch)//是注释{while(1){ch=getc(infile);-9-if('*'==ch){ch=getc(infile);i

23、f(')'==ch)//注释结束{ch=getc(infile);break;}else{fseek(infile,-1,SEEK_CUR);}}}}else//不是注释回退指针{fseek(infile,-1,SEEK_CUR);ch='(';}}fprintf(outfile,"%c",ch);printf("%c",ch);line[++ll]=ch;}(3)布尔类型处理增加一个新的数据类型需要改变很多地方:A.改变NRW的值

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

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

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