- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《编译原理》课程
实验报告
题目 PL/0编译程序的C语言扩充
专业 化学工程与工艺
班级
学号
姓名
任课教师
华东理工大学信息学院
一.实验题目
PL/0编译程序的C语言扩充
二.实验目的
在分析理解PL/0编译程序的基础上,对其词法分析程序、语法分析程序和语义处理程序进行部分修改扩充。
三.实验内容
在PL/0语言的基础上增加对整型一维数组的支持、扩充IF-THEN-ELSE条件语句、增加REPEAT语句、支持带参数的过程和增加注释等,如下所示:
整型一维数组,数组的定义格式为:
VAR数组标识名(下界:上界)
其中上界和下界可以是整数或者常量标识名。
访问数组元素的时候,数组下表是整型的表达式,包括整数、常量或者变量和他们的组合。
扩充条件语句,格式为:
条件语句?::=?条件语句 语句(3)增加REPEAT语句,格式为:
复合语句?::=?REPEAT语句条件
case IFSYM:
GetSym();
CONDITION(SymSetUnion(SymSetNew(THENSYM,DOSYM),FSYS),LEV,TX);
if (SYM==THENSYM) GetSym();
else Error(16);
CX1=CX; GEN(JPC,0,0);
STATEMENT(FSYS,LEV,TX);
CX2=CX; GEN(JMP,0,CX+1);
CODE[CX1].A=CX;
if (SYM==SEMICOLON) GetSym();
if(SYM==ELSESYM)
{
GetSym();
STATEMENT(FSYS,LEV,TX);
CODE[CX2].A=CX;
} //add the statement of ELSE
else STATEMENT(FSYS,LEV,TX);
break;
(4)修改单词:不等号# 改为
if (CH==)
{
GetCh();
if (CH===) { SYM=LEQ; GetCh(); }
else
if(CH==) { SYM=NEQ; GetCh(); }
else SYM=LSS;
六.实验设计思想
1.设计说明
PL/0语言是Pascal语言的一个子集,这里分析的PL/0的编译程序包括了对PL/0语言源程序进行分析处理、编译生成类PCODE代码,并在虚拟机上解释运行生成的类PCODE代码的功能。 PL/0语言编译程序采用以语法分析为核心、一遍扫描的编译方法。词法分析和代码生成作为独立的子程序供语法分析程序调用。语法分析的同时,提供了出错报告和出错恢复的功能。在源程序没有错误编译通过的情况下,调用类PCODE解释程序解释执行生成的类PCODE代码。词法分析子程序分析: 词法分析子程序名为,功能是从源程序中读出一个单词符号(),把它的信息放入全局变量 、和NUM中,语法分析器需要单词时,直接从这三个变量中获得。Getch过程通过反复调用Getch子过程从源程序过获取字符,并把它们拼成单词。过程中使用了行缓冲区技术以提高程序运行效率。 词法分析器的分析过程:调用时,它通过过程从源程序中获得一个字符。如果这个字符是字母,则继续获取字符或数字,最终可以拼成一个单词,查保留字表,如果查到为保留字,则把变量赋成相应的保留字类型值;如果没有查到,则这个单词应是一个用户自定义的标识符(可能是变量名、常量名或是过程的名字),把置为,把这个单词存入变量。查保留字表时使用了二分法查找以提高效率。如果etch获得的字符是数字,则继续用Getch获取数字,并把它们拼成一个整数,然后把SYM置为 INTEGER,并把拼成的数值放入NUM变量。如果识别出其它合法的符号(比如:赋值号、大于号、小于等于号等),则把则成相应的类型。如果遇到不合法的字符,把置成。语法分析子程序分析: 语法分析子程序采用了自顶向下的递归子程序法,语法分析同时也根据程序的语生成相应代码,并提供了出错处理的机制。语法分析主要由分程序分析过程()、ParaDeclaration)、参数变量处理过程(ParaGetSub)、数组处理过程(ParaGetSub)、常量定义分析过程(ConstDeclaration)、变量定
您可能关注的文档
最近下载
- 档案整理及数字化投标方案(517页).doc VIP
- 2025解读新《监察法实施条例》核心要点与条文速览PPT学习课件(含文字稿).pptx VIP
- 铁路信号电缆配线作业.ppt VIP
- 2025江苏邳州农村商业银行招聘10人笔试历年典型考题及考点剖析附带答案详解.docx
- 采砂船水上船舶运输安全应急预案 .docx VIP
- 2025年自贡市中考英语试卷(含答案解析).docx
- 2024年北京昌平四年级(下)期末英语(含答案).pdf
- 七年级下册数学期末试卷.pdf VIP
- SH_T 3043-2014石油化工设备管道钢结构表面色和标志规定.pdf VIP
- 新人教版数学四年级上册课本练习题《练习一》可编辑可打印.pdf VIP
文档评论(0)