PL-0实验报告.docx_第1页
PL-0实验报告.docx_第2页
PL-0实验报告.docx_第3页
PL-0实验报告.docx_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PL_0分析报告一、程序整体的思路语法分析子程序采用了自顶向下的递归子程序法,语法分析同时也根据程序的语意生成相应的代码,并提供了出错处理的机制。语法分析主要由分程序分析过程(block)、常量定义分析过程(constdeclaration)、变量定义分析过程(vardeclaration)、语句分析过程(statement)、表达式处理过程(expression)、项处理过程(term)、因子处理过程(factor)和条件处理过程(condition)构成。这些过程在结构上构成一个嵌套的层次结构。除此之外,还有出错报告过程(error)、代码生成过程(gen)、测试单词合法性及出错恢复过程(test)、登录名字表过程(enter)、查询名字表函数(position)以及列出类PCODE代码过程(listcode)作过语法分析的辅助过程。由PL/0的语法图可知:一个完整的PL/0程序是由分程序和句号构成的。因此,本编译程序在运行的时候,通过主程序中调用分程序处理过程block来分析分程序部分(分程序分析过程中还可能会递归调用block过程),然后,判断最后读入的符号是否为句号。如果是句号且分程序分析中未出错,则是一个合法的PL/0程序,可以运行生成的代码,否则就说明源PL/0程序是不合法的,输出出错提示即可。二、各个子程序的功能分析1. 读入字符程序(getch)分析: getch函数其实就是对C语言中getch()具体的过程的一个实现,该过程中使用了行缓冲区技术以提高程序运行效率:即定义一个line数组每次将文件的一行数据存取在line数组中,以便每次高效的从缓冲区读取一个字符。 2. 词法分析子程序(getsym)分析:词法分析子程序名为getsym,功能是从源程序中读出一个单词符号(token),把它的信息放入全局变量sym、id和num中,语法分析器需要单词时,直接从这三个变量中获得。但是语法分析器每次用完这三个变量的值就立即调用getsym子程序获取新的单词供下一次使用,而不是在需要新单词时才调用getsym过程,这样就可以显得高效。getsym过程通过反复调用getch子过程从源程序过获取字符,并把它们拼成单词。需要单词时调用getsym函数,它通过getch过程从源程序中获得一个字符。如果这个字符是字母,则继续获取字符或数字,最终可以拼成一个单词,然后查保留字表,如果查到为保留字,则把sym变量赋成相应的保留字类型中的枚举值;如果没有查到,则这个单词应是一个用户自定义的标识符(可能是变量名、常量名或是过程的名字),把sym置为ident,把这个单词存入id变量。查保留字表时使用了二分法查找以提高效率。如果getch获得的字符是数字,则继续用getch获取数字,并把它们拼成一个整数,然后把sym置为number,并把拼成的数值放入num变量。如果识别出其它合法的符号(比如:赋值号、大于号、小于等于号等),则把sym则成相应的类型。如果遇到不合法的字符,把sym置成nul。3. 语法分析子程序(block)分析:该部分也是程序编译的主题,语法分析子程序采用了自顶向下的递归子程序法,语法分析同时也根据程序的语意生成相应的代码,并提供了出错处理的机制。语法分析主要由相关的分程序分析过程反复调用完成,例如常量定义分析过程(constdeclaration)、变量定义分析过程(vardeclaration)、语句分析过程(statement)、表达式处理过程(expression)、项处理过程(term)、因子处理过程(factor)和条件处理过程(condition)构成。这些过程在结构上构成一个嵌套的层次结构。除此之外,还有出错报告过程(error)、代码生成过程(gen)、测试单词合法性及出错恢复过程(test)、登录名字表过程(enter)、查询名字表函数(position)以及列出类PCODE代码过程(listcode)作过语法分析的辅助过程。由PL/0的语法图可知:一个完整的PL/0程序是由分程序和句号构成的。因此,本编译程序在运行的时候,通过主程序中调用分程序处理过程block来分析分程序部分(分程序分析过程中还可能会递归调用block过程),然后,判断最后读入的符号是否为句号。如果是句号且分程序分析中未出错,则是一个合法的PL/0程序,可以运行生成的代码,否则就说明源PL/0程序是不合法的,输出出错提示即可。至此整个语法过程分析结束。3. 子程序(init)分析:该函数的作用是将需要的字符集以及在词法分析中折半查找需要的关键字数组、以及机器指令中需要的指令集以及一些必要的符号集进行初始化。4. 子程序(inset)、子程序(addset)、子程序(subset)、子程序与(mulset)等函数的作用都是现实:用数组来实现对集合的集合运算。5. 子程序(error)分析:该子函数的作用是当程序在运行的过程中出现错误的时候来实现出错的打印,打印出出错的位置以及给出错误编号。6. 子程序(gen)分析:该函数的主要作用是生成三元式,同时将生成的三元式目标代码写入到目标代码的数组中,从而以供后面解释执行之用。7. 子程序(test)分析:该部分的作用就是用来检测当前的符号是否合法。因为在程序的分析过程中可能某一部分(例如一条语句、一个表达式)将要结束时我们希望下一个符号集属于某一个集合(该部分的后跟符号),此时test函数就是负责这一项检查的函数。并且负责当前的检测如果不能通过的时候的不久措施,因为当程序检测到某一符号如果不能通过的时候,不能就此让分析过程结束,而是应该给出一个补救措施让程序的分析能够得以继续进行。8. 子程序(enter)分析:该函数的作用是用来登陆符号表之用,将某一个项加入到名字表中。9. 子程序(position)分析:该函数的作用是用来查找指定符号在符号表中的位置,如果找到则返回符号在符号表中位置,否则返回0。10. 子程序(constdeclaration)分析:此函数的作用是如何来声明一个常量。11. 子程序(vardeclaration)分析:此函数的作用是如何来声明一个变量。12. 子程序(listcode)分析:该函数的作用是用来列出类PCODE代码过程,输出目标代码清单。13. 子程序(statement)分析:该函数的作用是对语句的如理,判断属于哪一种语句并且该语句的语法格式是不是正确。14. 子程序(expresssion)分析:该函数是表达式处理过程,处理和判断表达式是否符合要求。15. 子程序(term)分析:该函数的作用是判断一个项是否符合要求,因为每一个项都应该由因子开始。所以该函数会递归调用因子处理函数(factor)来分子因子然后分析项。16. 子程序(factor)分析:该函数的作用是对因子进行分析处理。16. 子程序(condition)分析:该函数是进行条件处理,即对逻辑表达式进行分析处理看是否为合法的条件表达式。17. 子程序

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论