下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实 验 题目名称 编译原理实验 学生学院_ 计算机学院 _ 专业班级_ 09计算机科学与技术1班 学 号_ 3109005882 2011 年 1月 1 日 编译原理上机实验报告一、 实验目的与要求目的:在分析理解一个教学型编译程序(如pl/0)的基础上,对其词法分析程序、语法分析程序和语义处理程序进行部分修改扩充。达到进一步了解程序编译过程的基本原理和基本实现方法的目的。要求:对pl/0作以下修改扩充:(1)增加单词:保留字 else,for,to,downto,return运算符 +=,-=,+,-(只实现词法分析部分)(2)修改单词:不等号# 改为 !=(3)修改单词:write改为 p
2、rintln(4)增加条件语句的else子句二、实验环境:计算机:机系统:windows7 x64、windows xp程序设计语言和工具:c+builder 6教学型编译程序:pl/03、 设计方案:4、 开发过程和完成情况:1、 增加单词:修改初始化关键字:strcpy(kword 1,begin); strcpy(kword 2,call);strcpy(kword 3,const); strcpy(kword 4,do);strcpy(kword 5,downto); strcpy(kword 6,else);strcpy(kword 7,end); strcpy(kword 8,fo
3、r);strcpy(kword 9,if); strcpy(kword 10,odd);strcpy(kword 11,println); strcpy(kword 12,procedure);strcpy(kword 13,program); strcpy(kword14,read);strcpy(kword 15,return); strcpy(kword16,then);strcpy(kword 17,to); strcpy(kword18,var);strcpy(kword19,while); wsym 1=beginsym; wsym 2=callsym; wsym 3=consts
4、ym; wsym 4=dosym; wsym 5=downtosym; wsym 6=elsesym; wsym 7=endsym; wsym 8=forsym; wsym 9=ifsym; wsym 10=oddsym; wsym 11=printlnsym; wsym 12=procsym; wsym 13=progsym; wsym14=readsym; wsym 15=returnsym; wsym16=thensym; wsym 17=tosym; wsym18=varsym; wsym19=whilesym;typedef enum nul, ident, number, plus
5、, minus, times, inc,dec,append,reduce,/+,-,+=,-= slash, oddsym, eql, neq, lss, leq, gtr, geq, lparen, rparen, comma, semicolon, period, becomes, beginsym, endsym, ifsym,elsesym, thensym, whilesym, printlnsym, readsym, dosym, callsym,constsym, varsym, procsym, progsym,contrary,/取反,仅实现到词法 downtosym,fo
6、rsym,returnsym,tosym symbol;char *symout = nul, ident, number, plus, minus, times,inc,dec,append, decduct, slash, oddsym, eql, neq, lss, leq, gtr, geq,lparen, rparen, comma, semicolon, period, becomes, beginsym, endsym, ifsym,elsesym, thensym, whilesym, printlnsym, readsym, dosym, callsym,constsym,
7、varsym, procsym, progsym,contrary,downtosym,forsym,returnsym,tosym ;const symnum = 43;/新添加常量,用于替代标识符个数以及初始化symset 代替( for i=0;i33;i+ ) 中的33、+、-、+=、-= 、!= 词法分析部分:在getsym()中switch(ch) case : getch(); if (ch=) sym=becomes; getch(); else sym=nul; break; case : getch(); if (ch=) sym=geq; getch(); else sy
8、m=gtr; break; case !: getch(); if(ch=)sym=neq;getch(); else sym= contrary; break; case +: getch(); if(ch=+)sym=inc;getch(); else if(ch=)sym=append;getch(); else sym= plus; break; case -: getch(); if(ch=-)sym=dec;getch(); else if(ch=)sym=reduce;getch(); else sym= minus; break; default: sym=ssymch; ge
9、tch(); 、write改为println:1、 在函数void statement(symset fsys,int lev,int &tx)中修改case writesym: 为:case printlnsym: 2、 statbegsysprintlnsym=1;将println归到语句开始符号集里面其它操作在上面的初始化里已经做好。、else的实现:case ifsym:getsym();condition(symsetunion(symsetnew(thensym,dosym),fsys),lev,tx);if (sym=thensym) getsym();else error(16
10、);jpc 0,0then语句jmp 0,0else语句。 /产生预跳转,将跳转位置暂设为0,等待回填cx1=cx; gen(jpc,0,0); /then后语句块的处理statement(fsys,lev,tx); getsym(); /判断是否后接else语句 if(sym=elsesym) getsym(); /当if()不成立时候,应该跳转到/else语句后,所以在这里将预跳转/的跳转位置回填上这时候的cx+1/(cx用于产生无条件跳转命令) codecx1.a=cx+1; cx1=cx;gen(jmp,0,0);/当执行的是then语句,则到这里必须跳过else语句部分待添加的隐藏文
11、字内容1 statement(fsys,lev,tx); codecx1.a=cx; else codecx1.a=cx;break;、完成情况:else&println 结果图附有类pcode的结果:= compile pl0 = 0 program ex01; 0 var a,b,c; 1 begin 2 b:=5; 4 a:=11; 6 if a=0 then 9 a:=88; 12 else read(a); 15 println(a); 18 end. 0 jmp 0 1 1 ini 0 6 2 lit 0 5 3 sto 0 4 4 lit 0 11 5 sto 0 3 6 lod 0 3 7 lit 0 0 8 opr 0 8 9 jpc 0 13 10 lit 0 88 11 sto 0 3 12 jmp 0 15 13 opr 0 16 14 sto 0 3 15 lod 0 3 16 opr 0 14 17 opr 0 15 18 opr 0 0 run pl0 ? 1414 end pl0 5、 学习体会:由于实验做了很久才来写实验报告,有一些细节的地方自己已经忘记,不过可以大概记起在做实验中遇到的问题:1、 由于是在别人代码的基础上修改,刚开始对作者的意图和逻辑并不是很清晰,总修改了明显要修改的地方,而没有修改与之关联的地方,这样就总是报错
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年岳阳货运从业资格考试
- 2025年晋城货运资格证考试有哪些项目
- 2025年南京货运资格考试答案
- 2025年天津货运从业资格证考试题技巧答案详解
- 电梯维护保养合同(2篇)
- 电力用户协议(2篇)
- 2025年市妇联执委会议上的工作报告
- 浙教版数学七年级上册2.5《有理数的乘方》听评课记录1
- 徐州报关委托协议
- 幼儿园后勤总务工作计划范本
- 北京市房山区2024-2025学年七年级上学期期末英语试题(含答案)
- 2025年南阳科技职业学院高职单招数学历年(2016-2024)频考点试题含答案解析
- 加油站复工复产方案
- 2025-2030年中国增韧剂(MBS高胶粉)行业发展现状及前景趋势分析报告
- 《钢筋焊接及验收规程》(JGJ18)
- 2025年高考物理复习新题速递之万有引力与宇宙航行(2024年9月)
- 2025年首都机场集团公司招聘笔试参考题库含答案解析
- 2025云南省贵金属新材料控股集团限公司面向高校毕业生专项招聘144人高频重点提升(共500题)附带答案详解
- 苏州市区2024-2025学年五年级上学期数学期末试题一(有答案)
- 暑期预习高一生物必修二知识点
- 医院人体器官捐献及获取流程
评论
0/150
提交评论