电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > DOC文档下载
分享到微信 分享到微博 分享到QQ空间

广工编译原理实验报告

  • 资源ID:17930984       资源大小:592.02KB        全文页数:17页
  • 资源格式: DOC        下载积分:10金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要10金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

广工编译原理实验报告

1>课内实验报告项目名称 PL/0 编译器 学 院_ 计算机学院_专 业_ _年级班别_学 号 _学生姓名_ _辅导教师_成 绩_ _目录2一、课内实验的内容-4二、实验修改部分-4三、概述-11四、结构设计说明-11五、各功能模块描述-14六、主要成份描述-14七、测试用例-16八、开发过程和完成情况-21一、课内实验的内容对 PL/0 作以下修改扩充:(1)增加单词:保留字 ELSE,FOR, STEP,RETURN运算符 +=,-=,+,-, &,|,(2)修改单词:不等号# 改为 ='a'&&ch='a'&&ch='0'&&ch=0)i=k+1;while(ij)sym=wsymk;elsesym=ident;elseif(ch>='0'&&ch='0'&&chnmax)error(30);elseif(ch=':') /*检测赋值符号*/getchdo;if(ch='=')sym=becomes;getchdo;elsesym=nul; /*不能识别的符号*/elseif(ch='') /*检测大于或大于等于符号*/ getchdo;if(ch='=')sym=geq;getchdo;elsesym=gtr;/*这里之间为添加的内容*/else if(ch='+')/*检测+,+=,+符号*/getchdo;if(ch='=')sym=pluseq;getchdo;else if(ch='+')sym=plusone;getchdo;elsesym=plus;else if(ch='-')/*检测 -,-=,-符号*/getchdo;if(ch='=')sym=minuseq;getchdo;else if(ch='-')sym=minusone;getchdo;else sym=minus;/*这里之间为添加的内容*/elsesym=ssymch;/* 当符号不满足上述条件时,全部按照单字符号处理*/getchdo;/richardif(sym!=period)getchdo;/end richardreturn 0;Statement()增加的内容:(将本来“if(sym=becomes)”部分的内容修 36改为处理+, +=,-,-=),并在 Statement()中定义变量 int sym2;if(sym=becomes|sym=pluseq|sym=minuseq|sym=plusone|sym=minusone) sym2=sym;getsymdo;gendo(lod,lev-tablei.level,tablei.adr);elseerror(13);if(sym2=plusone|sym2=minusone)/* 准备按照 a+、a- 语句处理,与 read 类似 */if(i!=0)if(sym2=plusone)gendo(lit,0,1);gendo(opr,0,2);gendo(sto,lev-tablei.level,tablei.adr); if(sym2=minusone)gendo(lit,0,1);gendo(opr,0,3);gendo(sto,lev-tablei.level,tablei.adr); elsememcpy(nxtlev,fsys,sizeof(bool)* symnum);expressiondo(nxtlev,ptx,lev);if(i!=0) if(sym2=becomes)gendo(sto,lev-tablei.level,tablei.adr);if(sym2=pluseq)gendo(opr,0,2);gendo(sto,lev-tablei.level,tablei.adr);if(sym2=minuseq)gendo(opr,0,3);gendo(sto,lev-tablei.level,tablei.adr);/else74、修改单词:不等号# 改为 的识别( 在')那部分:if(ch='') /add neq sym=neq;getchdo;/*在之间添加*/else sym=lss;5、增加条件语句的 ELSE 子句 PL0.cpp在 statement()里的“if.then”语句处理的基础上添加对 else 子句 1的处理,使之能处理 ifthenelse的语句。elseif(sym=ifsym) /*准备按照 if 语句处理*/getsymdo;memcpy(nxtlev,fsys,sizeof(bool)*symnum);nxtlevthensym=true;nxtlevdosym=true; /*后跟符号为then或 do*/conditiondo(nxtlev,ptx,lev); /*调用8条件处理(逻辑运算)函数*/if(sym=thensym)getsymdo;elseerror(16); /*缺少 then*/cx1=cx; /*保存当前指令地址*/gendo(jpc,0,0); /*生成条件跳转指令,跳转地址暂写 0*/*这里之间开始添加*/memcpy(nxtlev,fsys,sizeof(bool)*symnum);/添加后跟符号nxtlevelsesym=true;statementdo(nxtlev,ptx,lev); /*处理then 后的语句*/codecx1.a=cx; /*经 statement 处理后,cx 为 then 后语句执行完的位置,它正是前面未定的跳转地址*/if(sym=elsesym)cx2=cx;getsymdo;gendo(jmp,0,0);codecx1.a=cx;statementdo(fsys,ptx,lev);codecx2.a=cx;/*这里之间开始添加*/elseif(sym=beginsym) /*准备按照复合语句处理*/getsymdo;memcpy(nxtlev,fsys,sizeof(bool)*symnum);nxtlevsemicolon=true;nxtlevendsym=true;/*后跟符号为分号或end*/*循环调用语句处理函数,直到下一个符号不是语句开始符号或收到 end*/statementdo(nxtlev,ptx,lev);while(inset(sym,statbegsys)|sym=semicolon)if(sym=semicolon)9getsymdo;elseerror(10);/*缺少分号*/statementdo(nxtlev,ptx,lev);if(sym=endsym)getsymdo;elseerror(17); /*缺少 end 或分号*/写出相关文法: 2G(S): Sif S else S | if S | aElse 语法图: 3i f 条 件 t h e n 语 句 1e l s e语 句 i d e n t : = 表 达 式语 句 2三、概述源语言:PL/0 语言目标语言:假想栈式计算机的汇编语言实现工具: VC+6.0 运行平台: Windows 7四、结构设计说明1、PL/0 编译程序的结构图如下:10P L 0 源 程 序词 法 分 析 程序语 法 分 析 程序代 码 生 成 程序目 标 程 序出错处理表格管理程序由于 PL/0 编译程序采用一趟扫描方法,所以语法语义分析过程 block 是整个编译程序的核心。下面给出编译程序的总体流程图,以弄清 block 过程在整个编译程序中的作用。在流程图中可以看出,主程序置初值后先调整用读单词过程 getsym 取一个单词,然后再调用语法分析过程 block,直到遇源程序的结束符“.”为止。11开 始置 初 值调 用 G E T S Y M取 单 词调 用 B L O C K过 程当 前 单 词 是否 为 源 程 序结 束 符 . 程 序 中 是 否 有错 误 ?调 用 解 释 过 程I N T E R P R E T 解 释执 行 目 标 程 序结 束出 错打 印 错误NNYY12五、 各功能模块描述GetSym() : 词法分析, 从源文件中读出若干有效字符,组成 token 串,识别它的类 1型为保留字/标识符 /数字或其它符号。GEN() : 目标代码生成过程,本过程用于把生成的目标代码写入目标代码数组,供后 2面的解释器解释执行.TEST() : 测试当前单词是否合法 3ENTER() : 在名字表中加入一项 4POSITION () : 查找名字的位置, 找到则返回名字表中的位置, 否则返回 0 5ConstDeclaration() : 常量声明处理 6VarDeclaration() : 变量声明处理 7ListCode() : 输出目标代码清单 8FACTOR() : 因子处理过程 9TERM() : 项处理过程10EXPRESSION() : 表达式处理过程11CONDITION() : 条件处理过程12STATEMENT() : 语句处理过程13Block() : 编译程序主体, 参数:lev: 这一次语法分析所在的层次,tx:符号表指针,14fsys:用于出错恢复的 单词集合15BASE() : 通过过程基址求上一层过程的基址16Interpret() : 解释程序, PL/0 编译器产生的类 PCODE 目标代码解释运行过程16六、主要成份描述1.符号表在编译程序中符号表用来存放语言程序中出现的有关标识符的属性信息,这些信息集中反映了标识符的语义特征属性.符号表的主要功能如下:、收集符号属性 1、上下文语义合法性检查的依据 2、作为目标代码生成阶段地址分配的依据. 3、符号表的数据结构: 4struct tablestruct char nameal; /*名字*/enum object kind; /*类型:const,var,array orprocedure*/int val;

注意事项

本文(广工编译原理实验报告)为本站会员(宝路)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.