2022年PL编译器功能扩充要点 .pdf
《2022年PL编译器功能扩充要点 .pdf》由会员分享,可在线阅读,更多相关《2022年PL编译器功能扩充要点 .pdf(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 Ningxia Normal University PL0编译器题目 Pl0编译器功能扩充姓名学号院(系)数学与计算机科学学院专业班级计算机技术与科学2 班时间 2014-1-5 1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 14 页 - - - - - - - - - 2 目录一、实验目的 - 3 二、实验内容 - 3 三、实验框图 - 4 四、过程分析 - 6 1、词法过程分析 - 6 2、语法过程分析 - 6 3、整体过程分析 - 7 4、扩充过程分析 -
2、 9 五、测试结果 - 11 六、问题及感受 - 12 2名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 14 页 - - - - - - - - - 3 一、实验目的本次实验设计主要是在分析理解PL/0 编译程序的基础上,对其词法分析程序、 语法分析程序和语义处理程序进行部分修改扩充,使其增加并且实现了更多的功能。二、实验内容PL/0语言是Pascal语言的一个子集,这里分析的PL/0的编译程序包括了对PL/0语言源程序进行分析处理、编译生成类 PCODE 代码, 并在
3、虚拟机上解释运行生成的类PCODE 代码的功能。PL/0 语言编译程序采用以语法分析为核心、一遍扫描的编译方法。 词法分析和代码生成作为独立的子程序供语法分析程序调用。 语法分析的同时,提供了出错报告和出错恢复的功能。在源程序没有错误编译通过的情况下,调用类PCODE 解释程序解释执行生成的类PCODE 代码。扩充 PL0语言是在 PL0语言的基础上增加对整型一维数组的支持、扩充 IF-THEN-ELSE条件语句、增加 REPEAT 语句。如下所示:(1)整型一维数组,数组的定义格式为:VAR (:) 其中上界和下界可以是整数或者常量标识名访问数组元素的时候,数组下标是整型的表达式,包括整数、
4、常量或者变量和它们的组合(2)扩充条件语句,格式为::= IF THEN ELSE (3)增加 REPEAT 语句,格式为: := REPEAT UNTIL (4) 注释单行注释以 开始,以 结束,注释内容不包括和 3 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 14 页 - - - - - - - - - 4 三、实验框图1、基本工作流程图2、语法分析图语法分析词法分析语义分析代码生成代码执行源程序执行结果符号表管理错误诊断处理程序程序体语句条件表达式项因子4 名师
5、资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 14 页 - - - - - - - - - 5 3、if-then-else 语句的流程图进入 if语句条件判断 Y N 执行 then 后语句执行 else 后语句退出该语句4、增加 +a,-a功能开始程序读入 a 值 a=a+1或 a=a-1 a 原值参与运算退出该语句5 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - -
6、- 第 5 页,共 14 页 - - - - - - - - - 6 四、过程分析1、词法分析:词法分析子程序名为GETSYM ,功能是从源程序中读出一个单词符号,把它的信息放入全局变量 SYM、 ID 和 NUM中,字符变量放入CH 中,语法分析器需要单词时,直接从这三个变量中获得。Getch 过程通过反复调用Getch 子过程从源程序过获取字符,并把它们拼成单词。GETCH过程中使用了行缓冲区技术以提高程序运行效率。词法分析器的分析过程:调用GETSYM时,它通过GETCH过程从源程序中获得一个字符。如果这个字符是字母,则继续获取字符或数字,最终可以拼成一个单词,查保留字表,如果查到为保留
7、字,则把SYM变量赋成相应的保留字类型值;如果没有查到,则这个单词应是一个用户自定义的标识符(可能是变量名、常量名或是过程的名字),把 SYM置为 IDENT,把这个单词存入ID 变量。查保留字表时使用了二分法查找以提高效率。如果 Getch 获得的字符是数字,则继续用Getch 获取数字,并把它们拼成一个整数或实数,然后把SYM置为 INTEGER 或REAL ,并把拼成的数值放入NUM变量。如果识别出其它合法的符号(比如:赋值号、大于号、小于等于号等),则把SYM则成相应的类型。如果遇到不合法的字符,把SYM置成 NUL 。2、 语法 分 析:语法分析子程序采用了自顶向下的递归子程序法,语
8、法分析同时也根据程序的语义生成相应三元代码,并提供了出错处理的机制。语法分析主要由分程序分析过程、参数变量分析过程、 参数变量处理过程、数组处理过程、常量定义分析过程、变量定义分析过程、语句分析过程、表达式处理过程、项处理过程、因子处理过程和条件处理过程构成。这些过程在结构上构成一个嵌套的层次结构。除此之外,还有出错报告过程、代码生成过程、测试单词合法性及出错恢复过程、登录名字表过程、查询名字表函数以及列出类PCODE代码过程作过语法分析的辅助过程。6 3、整体分析:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理
9、- - - - - - - 第 6 页,共 14 页 - - - - - - - - - 7 语法 分析 开始 后 ,首 先调 用分 程 序处 理过 程处 理分程 序。过程入口参数置为:0 层、符号表位置0、出错恢复单词集合为句号、声明符或语句开始符。进入Block 过程后,首先把局部数据段分配指针设为3,准备分配3 个单元供运行期存放静态链 SL、动态链DL 和返回地址RA。然后用Tx0 记录下当前符号表位置并产生一条Jmp 指令,准备跳转到主程序的开始位置,由于当前还没有知到主程序究竟在何处开始,所以Jmp的目标暂时填为0,稍后再改。同时在符号表的当前位置记录下这个 Jmp 指令在代码段中
10、的位置。在判断了嵌套层数没有超过规定的层数后,开始分析源程序。首先判断是否遇到了常量声明,如果遇到则开始常量定义,把常量存入符号表。接下去用同样的方法分析变量声明,变量定义过程中会用Dx 变量记录下局部数据段分配的空间个数。然后如果遇到Procedure保留字则进行过程声明和定义,声明的方法是把过程的名字和所在的层次记入符号表,过程定义的方法就是通过递归调用Block过程,因为每个过程都是一个分程序。由于这是分程序中的分程序,因此调用Block时需把当前的层次号Lev 加一传递给Block 过程。分程序声明部分完成后,即将进入语句的处理,这时的代码分配指针CX 的值正好指向语句的开始位置,这个
11、位置正是前面的Jmp 指令需要跳转到的位置。于是通过前面记录下来的地址值,把这个Jmp 指令的跳转位置改成当前cx 的位置。 并在符号表中记录下当前的代码段分配地址和局部数据段要分配的大小(DX 的值)。生成一条INT 指令,分配DX个空间,作为这个分程序段的第一条指令。下面就调用语句处理过程 Statement分析语句。 分析完成后, 生成操作数为0 的 OPR指令,用于从分程序返回。常量定义过程:通过循环,反复获得标识符和对应的值,存入符号表。符号表中记录下标识符的名字和它对应的值。变量定义过程:与常量定义类似,通过循环,反复获得标识符,存入符号表。 符号 表中 记 录下 标识 符的 名字
12、、 它所 在的 层 及它 在所在层中的偏移地址。7 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 14 页 - - - - - - - - - 8 参变量定义过程:类似变量定义,将参变量,存入符号表中。参变量处理过程:如果 函数 用参 变 量, 依照 形参 的类型 、个 数, 由 实参 进行赋值。数组处理过程:计 算 数 组 括 号 内 的 偏 移 值 , 存 入 栈 顶 用 于 后 面 生 成 的STOARR 和 LODARR 指令调用实际的数组中元素的地址。语句处理
13、过程:语句处理过程是一个嵌套子程序,通过调用表达式处理、项处 理、 因 子 处理 等 过 程及 递 归 调用 自 己 来实 现 对 语句 的 分析。语句处理过程可以识别的语句包括赋值语句、read 语句、write语句、 +语句、 - 语句、 +=语句、 -= 语句、 if-else-then语句、 while语句、 For 语句、 repeat语句。当遇到begin/end语句 时, 就 递 归调 用 自 己来 分 析 。分 析 的 同时 生 成 相应 的 类PCODE 指令。赋值语句的处理:首先 获 取 赋值 号 左 边的 标 识 符, 从 符 号表 中 找 到它 的 信息,并确认这个标识
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年PL编译器功能扩充要点 2022 PL 编译器 功能 扩充 要点
限制150内