ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:61.93KB ,
资源ID:14329967      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/14329967.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(pl0语言功能扩充Word格式.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

pl0语言功能扩充Word格式.docx

1、(1)整型一维数组,数组的定义格式为:VAR(:)其中上界和下界可以是整数或者常量标识名。访问数组元素的时候,数组下表是整型的表达式,包括整数、常量或者变量和他们的组合。(2)扩充条件语句,格式为:条件语句=EFTHEN ELSEREPEATUNTL四实验过程(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编译程序的功能扩充程序说

2、明(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-TABLEi.vp.LEVEL,TABLEi.vp.ADR); if(SYM=PLUSBECOMES) FACTOR(FSYS,LEV,TX); GEN(OPR,0,2); if(SYM=MINUSBECOME

3、S) GEN(OPR,0,3); if (i!=0) GEN(STO,LEV-TABLEi.vp.LEVEL,TABLEi.vp.ADR);(2)扩充FOR TO和FOR DOWNTO语句,此功能的关键是如何判断条件是否成立,并如何进行程序跳转.在这里用到了几条指令,和地址回填技术.扩充程序如下:case FORSYM: if(SYM!=IDENT)Error(31); /FOR后面要标识符 i=POSITION(ID,TX); if (i=0) Error(11); else if (TABLEi.KIND!=VARIABLE) /*ASSIGNMENT TO NON-VARIABLE*/

4、Error(12); /变量=BECOMES) Error(13); EXPRESSION(SymSetUnion(SymSetNew(TOSYM,DOWNTOSYM,DOSYM),FSYS),LEV,TX);/表达式 if(SYM=DOWNTOSYM) CX1=CX;/保存结果至变量单元/重新调入栈顶 EXPRESSION(SymSetAdd(DOSYM,FSYS),LEV,TX); GEN(OPR,0,11);/判断运算 CX2=CX; GEN(JPC,0,0);/如果栈顶非真跳转/重新调入栈顶 GEN(LIT,0,1) ;/送1到栈顶 /减运算 if(SYM=DOSYM) STATEME

5、NT(FSYS,LEV,TX); GEN(JMP,0,CX1); CODECX2.A=CX; else if(SYM=TOSYM)GetSym(); /保存结果至变量单元 /重新调入栈顶/表达式分析 GEN(OPR,0,13); GEN(LIT,0,1);/回填地址 else Error(35); break;(3) 增加条件语句的ELSE子ELSE语句的语法语义分析程序:case IFSYM: GetSym(); CONDITION(SymSetUnion(SymSetNew(THENSYM,DOSYM),FSYS),LEV,TX); if (SYM=THENSYM) GetSym(); e

6、lse Error(16); CX1=CX; STATEMENT(FSYS,LEV,TX); GEN(JMP,0,CX+1); CODECX1.A=CX; if (SYM=SEMICOLON) GetSym(); if(SYM=ELSESYM) /add the statement of ELSE else STATEMENT(FSYS,LEV,TX); break;(4)修改单词:不等号# 改为 if (CH=) GetCh(); if (CH=) SYM=LEQ; GetCh(); if(CH=) SYM=NEQ; else SYM=LSS;六实验设计思想1设计说明PL/0语言是Pasca

7、l语言的一个子集,这里分析的PL/0的编译程序包括了对PL/0语言源程序进行分析处理、编译生成类PCODE代码,并在虚拟机上解释运行生成的类PCODE代码的功能。PL/0语言编译程序采用以语法分析为核心、一遍扫描的编译方法。词法分析和代码生成作为独立的子程序供语法分析程序调用。语法分析的同时,提供了出错报告和出错恢复的功能。在源程序没有错误编译通过的情况下,调用类PCODE解释程序解释执行生成的类PCODE代码。2各功能模块描述词法分析子程序分析:词法分析子程序名为GETSYM,功能是从源程序中读出一个单词符号(TOTAKEN),把它的信息放入全局变量 SYM、ID和NUM中,字符变量放入CH

8、中,语法分析器需要单词时,直接从这三个变量中获得。Getch过程通过反复调用Getch子过程从源程序过获取字符,并把它们拼成单词。GETCH过程中使用了行缓冲区技术以提高程序运行效率。词法分析器的分析过程:调用GETSYM时,它通过GETCH过程从源程序中获得一个字符。如果这个字符是字母,则继续获取字符或数字,最终可以拼成一个单词,查保留字表,如果查到为保留字,则把SYM变量赋成相应的保留字类型值;如果没有查到,则这个单词应是一个用户自定义的标识符(可能是变量名、常量名或是过程的名字),把SYM置为IDENT,把这个单词存入ID变量。查保留字表时使用了二分法查找以提高效率。如果Getch获得的

9、字符是数字,则继续用Getch获取数字,并把它们拼成一个整数或实数,然后把SYM置为 INTEGER或REAL,并把拼成的数值放入NUM变量。如果识别出其它合法的符号(比如:赋值号、大于号、小于等于号等),则把SYM则成相应的类型。如果遇到不合法的字符,把SYM置成NUL。语法分析子程序分析:语法分析子程序采用了自顶向下的递归子程序法,语法分析同时也根据程序的语义生成相应三元代码,并提供了出错处理的机制。语法分析主要由分程序分析过程(BLOCK)、参数变量分析过程(ParaDeclaration)、参数变量处理过程(ParaGetSub)、数组处理过程(ParaGetSub)、常量定义分析过程

10、(ConstDeclaration)、变量定义分析过程(Vardeclaration)、语句分析过程(Statement)、表达式处理过程(Expression)、项处理过程(Term)、因子处理过程(Factor)和条件处理过程(Condition)构成。这些过程在结构上构成一个嵌套的层次结构。除此之外,还有出错报告过程(Error)、代码生成过程(Gen)、测试单词合法性及出错恢复过程(Test)、登录名字表过程(Enter)、查询名字表函数(Position)以及列出类 PCODE代码过程(Listcode)作过语法分析的辅助过程。由PL/0的语法图可知:一个完整的PL/0程序是由分程序

11、和句号构成的。因此,本编译程序在运行的时候,通过主程序中调用分程序处理过程block来分析分程序部分(分程序分析过程中还可能会递归调用block过程),然后,判断最后读入的符号是否为句号。如果是句号且分程序分析中未出错,则是一个合法的PL/0程序,可以运行生成的代码,否则就说明源PL/0程序是不合法的,输出出错提示即可。下面按各语法单元分析PL/0编译程序的运行机制。分程序处理过程:语法分析开始后,首先调用分程序处理过程(Block)处理分程序。过程入口参数置为:0层、符号表位置0、出错恢复单词集合为句号、声明符或语句开始符。进入Block过程后,首先把局部数据段分配指针设为3,准备分配3个单元供运行期存放静态链SL、动态链DL 和返回地址RA。然后用Tx0记录下当前符号表位置并产生一条Jmp指令,准备跳转到主程序的开始位置,由于当前还没有知到主程序究竟在何处开始,所以Jmp的目标暂时填为0,稍后再改。同时在符号表的当前位置记录下这个Jmp指令在代码段中的位置。在判断了嵌套层数没有超过规定的层数后,开始分析源程序。首先判断是否遇到了常量声明,如果遇到则开始常量定义,把常量存入符号表。接下去用同样的方法分析变量声明,变量定义过程中会用Dx变量记录下局部数据段分配的空间个数。然后如果

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1