电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

pl0语言功能扩充VIP专享VIP免费

pl0语言功能扩充_第1页
pl0语言功能扩充_第2页
pl0语言功能扩充_第3页
《编译原理》课程 实验报告 题目 PL/0 编译程序的 C 语言扩充 专业 化学工程与工艺 班级 学号 姓名 任课教师 华东理工大学信息学院 一.实验题目 PL/0 编译程序的 C 语言扩充 二.实验目的 在分析理解 PL/0 编译程序的基础上,对其词法分析程序、语法分析程序和语义处理程序进行部分修改扩充。 三.实验内容 在 PL/0 语言的基础上增加对整型一维数组的支持、扩充 IF-THEN-ELSE 条件语句、增加REPEAT 语句、支持带参数的过程和增加注释等,如下所示: (1) 整型一维数组,数组的定义格式为: VAR<数组标识名>(<下界>:<上界>) 其中上界和下界可以是整数或者常量标识名。 访问数组元素的时候,数组下表是整型的表达式,包括整数、常量或者变量和他们的组合。 (2) 扩充条件语句,格式为: <条件语句> ::= EF<条件>THEN<语句> [ELSE<语句>] (3)增加 REPEAT 语句,格式为: <复合语句> ::= REPEAT<语句>UNTL<条件> 四.实验过程 (1)PL/0 编译程序的 C 语言源代码输入 (2)运行 PL/0 编译程序的 C 语言源代码,调试运行 PL/0 编译程序 (3)对 PL/0 编译程序进行功能扩充 (4)PL/0 编译程序功能扩充部分的分析与设计 (5)对 PL/0 编译程序进行功能扩充,即编写代码 (6)进行 PL/0 编译程序功能扩充部分的运行调试 (7)完成实验报告总结 五.PL/0 编译程序的功能扩充程序说明 (1)扩充赋值运算:+=,-=.此功能扩充只需在语句分析里面进行增加如下程序: if(SYM==BECOMES||SYM==PLUSBECOMES||SYM==MINUSBECOMES){ if (SYM==BECOMES) { GetSym(); EXPRESSION(FSYS,LEV,TX); } else if(SYM==PLUSBECOMES||SYM==MINUSBECOMES) { GEN(LOD,LEV-TABLE[i].vp.LEVEL,TABLE[i].vp.ADR); if(SYM==PLUSBECOMES){ GetSym(); FACTOR(FSYS,LEV,TX); GEN(OPR,0,2); } else if(SYM==MINUSBECOMES){ GetSym(); FACTOR(FSYS,LEV,TX); GEN(OPR,0,3); } } if (i!=0) GEN(STO,LEV-TABLE[i].vp.LEVEL,TABLE[i].vp.ADR); } (2)扩充FOR TO和FOR DOWNTO语句,此功能的关键是如何判断条件是否成立,并如何进行程序跳转.在这里用到了几条指令,和地址回填技术.扩充程序如下: case FORSYM: GetSym(); if(SYM!=IDENT)Error(31); //FOR后面要标识符 i=POSITION(ID,TX); if (i==0) Error(11); else if (TABLE[i].KIND!=VARIABLE) { /*ASSIGNMENT TO NON-VARIA...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部