网站大量收购独家精品文档,联系QQ:2885784924

编译器的代码生成..doc

  1. 1、本文档共52页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
佛山科学技术学院 实 验 报 告 课程名称 编译原理 实验项目 编译器的代码生成 专业班级 计算机1班 姓 名 学 号 指导教师 黄营 成 绩 日 期 2014/6/7 一、实验目的; 掌握PL语言编译器的中间代码生成的程序分析与实现方法,并能对错误进行分析与处理 二、实验内容; 为了使我们的编译程序保持适当简单的水平,不致陷入与本课程无关的实际机器的特有性质的考虑中去,我们假想有台适合PL程序运行的计算机,我们称之为PL处理机。PL处理机顺序解释生成的目标代码。 三、实验原理; PL处理机的指令集根据PL语言的要求而设计,它包括以下的指令: (1)LIT /* 将常数置于栈顶 */ (2)LOD /* 将变量值置于栈顶 */ (3)STO /* 将栈顶的值赋与某变量 */ (4)CAL /* 用于过程调用的指令 */ (5)INT /* 在数据栈中分配存贮空间 */ (6)JMP, JPC /* 用于if, while语句的条件或无条件控制转移指令 */ (7)OPR /* 一组算术或逻辑运算指令 */ 上述指令的格式由三部分组成: F L A 其中,f, l, a的含义见下表: F L a INT ——— 常 量 LIT ——— 常 量 LOD 层次差 数据地址 STO 层次差 数据地址 CAL 层次差 程序地址 JMP ——— 程序地址 JPC ——— 程序地址 OPR ——— 运算类别 表1 PL 处理机指令 四、实验步骤; PL的编译程序为每一条PL源程序的可执行语句生成后缀式目标代码。另一方面,发现错误,并给出合适的诊断信息且继续编译下去从而发现更多的错误,对于编译程序而言是完全必要的。结合关键字规则、镇定规则,采用策略:先用一些明显的关键符号给它赋初值,然后随着分析子目标的层次深入,逐步补充别的合法符号。 程序代码 PL0.h: /*PL/0 编译系统C版本头文件 pl0.h*/ /*typedef enum{ false, true, }bool;*/ # define norw 20 /*关键字个数*/ # define txmax 100 /*名字表容量*/ # define nmax 14 /*number的最大位数*/ # define al 10 /*符号的最大长度*/ # define amax 2047 /*地址上界*/ # define levmax 3 /*最大允许过程嵌套声明层数[0,lexmax]*/ # define cxmax 200 /*最多的虚拟机代码数*/ /*符号*/ enum symbol{ nul, ident, number, plus, minus, times, slash, oddsym, eql, neq, lss, leq, gtr, geq, lparen, rparen, comma, semicolon, period, becomes, beginsym,endsym, ifsym, thensym, whilesym, writesym,readsym, dosym, callsym, constsym, varsym, procsym, elsesym, forsym, tosym, downtosym,returnsym,pluseql, minuseql,plusplus, minusminus,repeatsym,dowhilesym, }; #define symnum 43 /*-------------*/ enum object{ c

您可能关注的文档

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档