电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

广工编译原理实验报告

17页
  • 卖家[上传人]:宝路
  • 文档编号:17930984
  • 上传时间:2017-11-12
  • 文档格式:DOC
  • 文档大小:592.02KB
  • / 17 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、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;/*这里之间为添加的

      2、内容*/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=

      3、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.lev

      4、el,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*

      5、/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*/*循环调用语句

      6、处理函数,直到下一个符号不是语句开始符号或收到 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 编译程序采用一趟扫描方法,

      7、所以语法语义分析过程 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 () : 查找名字的位置, 找到则返回名字表中的位置,

      8、否则返回 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;

      《广工编译原理实验报告》由会员宝路分享,可在线阅读,更多相关《广工编译原理实验报告》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    监控施工 信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.