




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、XXXXXX计算机系综合性实验实验报告课程名称编译原理实验学期 XXXX 至 XXXX 学年 第匕 学期学生所在系部计算机系年级 X 专业班级XXXXXX学生姓名XXX 学号 XXXXXXXXXXXX任课教师XXX实验成绩计算机系制编译原理课程综合性实验报告开课实验室:年 月日实验题目I分析中间代码生成程序一、实验目埼分析PL/0编译程序的总体结构、代码生成的方法和过程;具体写出一条语句的 中间代码生成过程。二、设备与环境PC兼容机、Windows操作系统、Turbo Pascal软件等。三、实验内容.分析PL/0程序的Block子程序,理清PL/0程序结构和语句格式。画出Block 子程序的
2、流程图,写出至少两条 PL/0程序语句的语法格式。.分析PL/0程序的Block子程序和Gen子程序,了解代码生成的方法和过程。 使用概要算法来描述语句的代码生成过程。.自己编写一个简单的PL/0程序,能够正确通过编译,得到中间代码。列出自 己编写的源程序和编译后得到的中间代码。.从中选择一个语句或表达式,写出代码生成的过程。要求从自己的源程序中 选择一条语句,结合这条语句写出语义分析和代码生成过程。在描述这个过 程中,要说清楚每个功能有哪个子程序的哪条语句来完成,说清楚语句和参 数的含义和功能。四、实验结果及分析(一)Block子程序分析.常量声明的分析:常量声明部分的语法结构定义为如下形式
3、: - const ; - ;-id = C其中C可以是常量标识符或字符串或整数(可带符号)或实数(可带符号)。常量声明分析程序的主要任务是:.扫描整个常量声明部分。.为被声明的常量标识符建立符号表项。.检查重复的声明。.变量声明部分的分析:变量声明部分的语法结构定义为如下形式:- var- ;-:T-id,其中idList是被定义的变量标识符序列,T是类型表达式。变量声明分析程序的主要任务是:.扫描整个变量声明部分,并进行语义错误检查。(2),为被声明的变量标识符建立相应符号表项。3.Block子程序流程图:(二)代码生成的方法和过程:Block子程序:首先置TX的初值,令DX=3,判读嵌套
4、层数是否大于最允的嵌 套层数,如果大于,则发出32号错误。小于然后读入一个token,当读入的当前token 是常量保留字,转入常量声明处理。如果 sym遇到逗号则反复声明下一个常量,获 取下一个token,声明以当前token为标识符的常量。如果sym遇到分号,常量声明 结束。获取下一个token,当读入的是变量保留字,转入变量声明处理,过程与常量 声明类似。当读入的当前token是过程保留字时,把过程名和它所在的层次填入符号 表,递归调用block分析过程,当前的层次加一。如果不是过程保留字,如果是一个 语句的开始,则进行语句处理,直至结束。Gen子程序:目标代码生成过程gen用于把生成的
5、目标代码写入目标代码数组。 如果cxcxmax表示当前生成的代码行号大于允许的最大代码行数,输出“program toolong”。然后,把代码写入目标代码数组的当前 cx所指位置,移动cx指针指向下一 个空位。(三)编写一个简单的PL/0程序PL/0程序为:const a=10;var b,c;procedure p;beginc:=2*(1+b)end;beginif a=10 thenbeginb:=2;call p;endend.将其保存为txt格式文彳存于EB下运行后结果如下:心* Turbo Pascal7. 0pleaseinputsource progranfile name:
6、,txt0consta =10;1uar91proceduirep;1bein3c;=2*Cl*h7end8jmp1&1122int133lit124lit115lod13Gopr127opr148sto149opr101Idbegin11ifa =10then14begin15b:=2;17call 18end18end.Qjnp1101jnp122int133lit124lit115lod136opp12?opr148atu149opr1010int1511lit11012lit11013opr1814JPC11815lit1216st u1317cal1218opr10atari9t p
7、l/06enri pl/0(四)分析上述程序中c:=2*(l+w);的代码生成过程在上述程序中,当调用block子程序分析这段语句时,遇到 c,查符号表, 判断是常量还是变量,入栈,遇到“:=”时,继续读下一字符,判断如c,并依 次将2、1和b入栈。第一个截图是过程p,句子就在这里,首先生成一个int的 目标码,分配一个3个单元的数据区,然后又生成两条lit代码分别将2、1入栈, 再后有一条10d代码,是将b入栈的。入栈后开始计算1+b (opr 1 2),此时栈顶 元素为1+b的结果,再计算乘2 (opr 1 4),次栈顶乘以栈顶然后退两栈,结果入栈,此时数据区中就是 2* (1+b)的结果了,通过一条sto代码将结果存入偏 移为4的单元中,就是co在土程序中也可以找到这一段,土程序中,先开辟了 5个数据区,然后跳到10的位置,把a入栈,10入栈,判断两个值是否相等, 不等的话就继续往下,程序结束,如果相等的话,给b赋值后,就ca
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 香菇肉酱罐头企业ESG实践与创新战略研究报告
- 木制筷子企业ESG实践与创新战略研究报告
- 地面伽玛射线全谱仪相关行业投资规划报告
- 基于三明治结构各层协同优化设计的P(VDF-TrFE-CFE)基复合介质储能性能研究
- 课题开题报告:西北地区新出土唐代署书人墓志书法研究
- 矩形截面钢-木组合梁抗弯性能研究
- 课题开题报告:推进数字经管教育建设的教师教学能力提升路径研究
- 课题开题报告:陶行知科学教育观及其对中小学科学教育的时代价值研究
- 2025年数控弧齿锥齿轮铣齿机合作协议书
- 水产养殖管理实习报告范文
- 常州2025年江苏常州工程职业技术学院其他专技岗管理岗招聘笔试历年参考题库附带答案详解
- 2025年大学宿舍物业服务质量承包合同
- (二调)武汉市2025届高中毕业生二月调研考试 生物试卷(含标准答案)
- 2025年安徽职业技术学院单招职业适应性考试题库含答案
- 2024大模型安全研究报告
- 2025年安徽审计职业学院单招职业技能测试题库附答案
- 2025河南中烟许昌卷烟厂招聘10人易考易错模拟试题(共500题)试卷后附参考答案
- 2020年国际命名化妆品原料INCI英汉对照名称
- 2025年高考数学二级结论篇(核心知识背记手册)-专项训练
- 《脑出血》课件完整版
- 《锂离子电池用二氟草酸硼酸锂》
评论
0/150
提交评论