编译原理大型实验报告.doc

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《编译原理大型实验设计报告》 ——PL/0语言编译器 目录 1.1课程设计的基本要求 3 一、 基本内容 3 二、 选做内容 3 1.2设计概述 3 一、 源文件 3 二、 目标文件 3 三、 实现平台 3 四、 运行平台 3 1.3结构设计说明 一、 PL/0 语言介绍 3 二、 PL/0 语言语法描述图 4 三、 PL/0 语言结构图 5 1.4各功能模块描述 6 一、 词法分析子程序 二、 语法分析子程序 三、 分程序处理过程 四、 语句处理过程 五、 表达式、项、因子处理 六、 类PCODE代码解释执行过程 1.5主要成分描述 8 一、 符号表 8 二、 运行时存储组织和管理 9 三、 语法分析方法 10 四、 中间代码表示 11 1.6主要程序代码及运行结果 12 一、 程序代码 12 二、 运行结果 51 1.7心得体会 53 1.1、设计要求 一、基本内容 1、实现词法分析 2、实现语法分析 二、选做内容 1、目标代码生成 1.2、设计概述 1.源文件: pl0.h,pl0.cpp 2.实现平台:VC6.0 3.运行平台:xindows xp 1.3、结构设计说明 1. PL/0 语言介绍 PL/0 程序设计语言是一个较简单的语言,它以赋值语句为基础,构造概念有顺序、条件和重复(循环)三种。PL/0 有子程序概念,包括过程定义(可以嵌套)与调用且有局部变量说明。PL/0 中唯一的数据类型是整型,可以用来说明该类型的常量和变量。当然PL/0 也具有通常的算术运算和关系运算。 2. PL/0语法图如下 3. PL/0 语言编译器 PL/0 语言编译器的基本工作流程如图1-1 所示: 1.4、各功能模块描述 1. 词法分析子程序: 词法分析子程序名,功能是从源程序中读出一个单词符号,把它的信息放入全局变量 、和NUM中,语法分析器需要单词时,直接从这三个变量中获得。Geth过程通过反复调用Geth子过程从源程序过获取字符,并把它们拼成单词。Geth过程中使用了行缓冲区技术以提高程序运行效率。 词法分析器的分析过程:调用时,它通过Geth过程从源程序中获得一个字符。如果这个字符是字母,则继续获取字符或数字,最终可以拼成一个单词,查保留字表,如果查到为保留字,则把变量赋成相应的保留字类型值;如果没有查到,则这个单词应是一个用户自定义的标识符(可能是变量名、常量名或是过程的名字),把置为,把这个单词存入变量。查保留字表时使用了二分法查找以提高效率。如果Geth获得的字符是数字,则继续用Geth获取数字,并把它们拼成一个整数,然后把SYM置为 ,并把拼成的数值放入NUM变量。如果识别出其它合法的符号(比如:赋值号、大于号、小于等于号等),则把则成相应的类型。如果遇到不合法的字符,把置成。 2. 语法分析子程序:   语法分析子程序采用了自顶向下的递归子程序法,语法分析同时也根据程序的语生成相应代码,并提供了出错处理的机制。语法分析主要由分程序分析过程()常量定义分析过程(ConstDeclaration)、变量定义分析过程(ardeclaration)、语句分析过程(tatement)、表达式处理过程(xpression)、项处理过程(erm)、因子处理过程(actor)和条件处理过程(ondition)构成。这些过程在结构上构成一个嵌套的层次结构。除此之外,还有出错报告过程(rror)、代码生成过程(en)、测试单词合法性及出错恢复过程(est)、登录名字表过程(nter)、查询名字表函数(osition)以及列出类 PCODE代码过程(istcode)作过语法分析的辅助过程。   由PL/0的语法图可知:一个完整的PL/0程序是由分程序和句号构成的。因此,本编译程序在运行的时候,通过主程序中调用分程序处理过程block来分析分程序部分(分程序分析过程中还可能会递归调用block过程),然后,判断最后读入的符号是否为句号。如果是句号且分程序分析中未出错,则是一个合法的PL/0程序,可以运行生成的代码,否则就说明源PL/0程序是不合法的,输出出错提示即可。 block() constdeclaration() vardeclaration() statement() condition() expression() term() factor() 3. 分程序处理过程:语法分析开始后,首先调用分程序处理过程(lock)处理分程序。过程入口参数置为:0层、符号表位置0、出错恢复单词集合为句号、声明符或语句开始符。进入lock过程后,首先把局部数据段分配指针设为3,准备分配3个单元供运行期存放静态链SL、动态链DL 和返回地址RA。然后用x0记录下当前符号表位置并产生一条mp指令,准备跳转到主程序的开始位置,

文档评论(0)

xingyuxiaxiang + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档