




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、华北科技学院计算机学院综合性实验实验报告课程名称编译原理实验学期 2015 至 2016 学年 第 二 学期学生所在院部计算机学院年级 2013 专业班级 计科B学生姓名 学号 201307014任课教师王养廷实验成绩计算机学院制开课实验室:软件开发实验室2016年5月18日实验题目分析中间代码生成程序一、实验目的分析PL/0编译程序的总体结构、代码生成的方法和过程;具体写出一条语句的 中间代码生成过程。二、设备与环境PC兼容机、Windows操作系统、Turbo Pascal软件等。三、实验内容1 .分析PL/0程序的Block子程序,理清PL/0程序结构和语句格式。画出Block 子程序的
2、流程图,写出至少两条 PL/0程序语句的语法格式。2 .分析PL/0程序的Block子程序和Gen子程序,了解代码生成的方法和过程。 使用概要算法来描述语句的代码生成过程。3 .自己编写一个简单的 PL/0程序,能够正确通过编译,得到中间代码。列出 自己编写的源程序和编译后得到的中间代码。4 .从中选择一个语句或表达式,写出代码生成的过程。要求从自己的源程序中 选择一条语句,结合这条语句写出语义分析和代码生成过程。在描述这个过 程中,要说清楚每个功能有哪个子程序的哪条语句来完成,说清楚语句和参 数的含义和功能。四、实验结果及分析(一)程序标注(常量声明处理过程 constdeclaration
3、 *) procedure constdeclaration;begin if sym = ident then/常量声明过程开始遇到的第一个符号必然应为标 识符begin getsym;if sym in eql, becomes then/度口果是等号或赋值号begin if sym = becomes/如果是赋值号(常量生明中应该是等号)then error(1);getsym;/获取下一个token,等号或赋值号后应接上数字if sym = number then/砌果的确是数字begin enter(constant);/把这个常量登陆到符号表getsym/后关取下一个token,为
4、后面作准备endelse error(2)如果等号后接的不是数字,抛出 2号错误end else error(3)/如果常量标识符后接的不是等号或赋值号,抛出3号错误end else error(4)/如果常量声明过程遇到的第一个符号不为标 识符,抛出4号错误end constdeclaration;(*变量声明过程vardeclaration *)procedure vardeclaration;begin if sym = ident then/ 变量声明过程 vardeclarationbegin enter(varible);将标识符登陆到符号表中/ getsym endelse er
5、roK4)如果变量声明过程遇到的第一个符号不是标识符,抛出 4 号错误end vardeclaration;(二)过程说明说明入口参数,返回值和过程的功能1、入口参数:过程体入口时的处理codetabletx0.adr.a:=cx; (cx 为过程入口地址,填写在 code 中)with tabletx0 dobeginadr:=cx;(过程的入口填写在table表的过程名中)size:=dx;(过程需要的空间填写在table中)end;cxo:=cx;(保留过程在code中的入口地址在输出目标代码 时用)gen(int,0,dx);(生成过程入口指令)2、返回值:(*通过静态链求出数据区基地
6、址的函数base *)(*参数说明:l:要求的数据区所在层与当前层的层差*)(*返回值:要求的数据区基址*)function base(l: integer): integer;varb1: integer;beginbl := b; (* find base 1 level down *) (* 首先从当前层开始 *)while l 0 do (*如果l大于0,循环通过静态链往前找需要的数据区基址*)beginb1 := sb1; (*用当前层数据区基址中的内容(正好是静态链SL数据,为上一层的基址)的作为新的当前层,即向上找了一层*)l := l - 1 (* 向上了一层,l 减一 *)e
7、nd;base := b1 (*把找到的要求的数据区基址返回*)end(* base *);(三)程序静态结构图瀛程序输入程序运行输出语法分析出错处理程序表格管理程序常量说明部分:= const常量定义,常量定义);常量定义 := 标识符 =无符号整数无符号整数 := 数字数字标识符 := 字母字母|数字变量说明部分:= var标识符, 标识符;过程说明部分 := 过程首部 分程序;过程说明部分过程首部 := procedure市识符;语句 := 赋值语句|条件语句|当循环语句|过程调用语句|复合语句|读语句|写语句|空赋值语句 := 标识符 := 表达式表达式 :=+|-项加法运算符 项项:
8、= 因子乘法运算符 因子因子:k 标识符|无符号整数|(表达式 )加法运算符:=+|-乘法运算符:=*|/条件:= 表达式 关系运算符 表达式|odd表达式关系运算符 :=|=|=条件语句:=if条件then语句当循环语句:= while条件do语句过程调用语句:= call标识符复合语句:= begin语句;语句end读语句:= read板识符否, 标识符)写语句:= write表达式否, 表达式) 字母 := a|b|c|d.x|y|z数字:k 0|1|2|3-.8|9(五)代码生成程序说明对分程序体入口的处理(见程序文本block的过程体)begin (*block*)dx:=3;tx0
9、:=tx; (*保留当前table表指针值,实际为过程名在table表中的位置*)(*保留当前code指针值到过程名的adrtabletx.adr:=cx;域*)gen(jmp,0,0);生成转向过程体入口的指令,该指令的地址为 cx已保留在过程名的adr域,真 正的过程体入口地址,等生成过程体入口的指令时,再由 tabletx.adr 中取出cx 将过程体入口返填到 cx所指目标彳t码,即:(jmp,0,0 )的第3区域,同时填到 tabletx.adr 中 *)过程体入口时的处理codetabletx0.adr.a:=cx; (cx 为过程入口地址,填写在 code 中)with tabl
10、etx0 do begin adr:=cx;(过程的入口填写在table表的过程名中) size:=dx;(过程需要的空间填写在table中)end;cxo:=cx;(保留过程在code中的入口地址在输出目标代码 时用)gen(int,0,dx);(生成过程入口指令)table表格管理(0,j mp 0 0CONST Af3&*tsp曲工 i-i郁3电n)0 oVAR C, D, E;过程的入口地址填rntJCEDURE P;耳在red和t3hl巨中xVAR G班 0 4Him aKAIE: ENUE: CNUE; rHUE; E rKIBD COffSTAHTKIHEh CCMTSTABT
11、KIBH VAILUKLE KIBU VAKUELEKIBI1 TAMABLE KIHE: PROCEDURTAK: 3S 7AL:LEVEL: LEVLEVEL; LEVLEVEL: LEV LEVEL: LEVXDE= Dxl 3 取 DxL ADSz 叫 2 ADE: 1 cxSIZE: 4GKIBEb YAE1AEEES 4 1 V - LEVEL: LETt1ADEz DM名宁美重层次J值地it存储空回(六)代码生成程序实例给出pl0源程序,中间代码和过程说明编写代码:const x=4;var a,b;procedure try; beginb:=a*x-x;end;begina:
12、=5;call try;end.运行程序如图:DOSBom d.74r CpLi soeed: max 100% cydw, craTneskp 0, Program: 7URBO3 opr 1010 begin11a:=5;13 call try;14 end.3 4-56d t r t o i p 1 I 10r a r t pt p n K i11 lit 115 cal 1Z16 opr* 10start pl/E)51end pl五、实验总结这次实验让我学到了许多,通过运行THPL0CA程序,掌握了符号表的建立过程,及运行过程中运行栈的变化过程。了解了PL/0语言是PASCA昭言的子集和指令功能表.但是在编码过程中暴露的问题是我们今后需要改进的地方,我相信认识到了问 题所在,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 代发工资活动方案
- 代笔活动策划方案
- 以身说法活动方案
- 企业上云活动方案
- TJSQA-温室气体 产品碳足迹量化方法与要求 砌体材料产品编制说明
- 企业上网绘画活动方案
- 企业代发活动方案
- 企业公司初步策划方案
- 企业冬至活动方案
- 贵州省铜仁市沿河县2022-2023学年五年级下学期数学期末试卷(含答案)
- 中脉道和系统文化课件
- 品检员考试题库及答案
- 数字金融促进区域经济高质量发展的机制与路径研究
- 2025年高考英语课后续写高频考点话题分类第07讲 读后续写之成长类主题(讲义)
- 2025-2030中国制鞋机械行业市场现状供需分析及投资评估规划分析研究报告
- 2025年信息技术小学水平测试试卷及答案
- 2025年中国对苯二甲酸二甲酯市场调查研究报告
- 生物+2025云南新高考自主命题冲刺金卷及答案
- 国家开放大学《园林规划设计》形考任务1-4参考答案
- 腕管综合征诊治循证临床实践指南(2024)解读
- 融资租赁 测试题及答案
评论
0/150
提交评论