编译原理PL0报告(附源码教程)

上传人:Wo****Z 文档编号:170114266 上传时间:2022-11-19 格式:DOC 页数:7 大小:17KB
收藏 版权申诉 举报 下载
编译原理PL0报告(附源码教程)_第1页
第1页 / 共7页
编译原理PL0报告(附源码教程)_第2页
第2页 / 共7页
编译原理PL0报告(附源码教程)_第3页
第3页 / 共7页
资源描述:

《编译原理PL0报告(附源码教程)》由会员分享,可在线阅读,更多相关《编译原理PL0报告(附源码教程)(7页珍藏版)》请在装配图网上搜索。

1、编译原理PL0报告附码教程 - 编译原理课程设计学 院 计算机学院 专 业 计算机科学与技术 班 级 学 号 姓 名 指导老师 20 年 月 日 一、课程设计要求 根本内容成绩范围:“中”、“及格”或“不及格” 1扩大赋值运算:*= 和 /= 扩大语句Pascal的FOR语句: FOR := TO DO FOR := DOWNTO DO 其中,语句的循环变量的步长为2, 语句的循环变量的步长为-2。 3增加运算:+ 和 -。 选做内容成绩评定范围扩大到:“优”和“良” 1增加类型: 字符类型; 实数类型。 2扩大函数: 有返回值和返回语句; 有参数函数。 3增加一维数组类型可增加指令。 4其他

2、典型语言设施。 二、概述 目的:实现PL0某些特定语句 实现语言:C语言 实现工具平台:VS201 运行平台:WIN7 三、构造设计说明与功能块描绘 PL/0编译程序的构造图 PL/0编译程序的过程或函数的功能表 过程或函数名 pl0 error getsym 简要功能说明 主程序 出错处理,打印出错位置和错误编码 词法分析p ,读取一个单词 getch gen test block enter position(函数) constdeclaration vardeclaration listode statement expression term factor condition inte

3、rpret base(函数) PL/0编译程序的总体流程图 四、主要成分描绘 1、 符号表 启动 置初值 漏掉空格,读取一个字符 生成目的代码,并送入目的程序区 测试当前单词符号是否合法 分程序分析p 处理过程 登录名字表 查找标识符在名字表中的位置 常量定义处理 变量说明处理 列出目的代码清单 语句处理 表达式处理 项处理 因子处理 条件处理 对目的代码的解释执行程序 通过静态链求出数据区的基地址 调用getsym取单词 调用block过程 N 是否为程序完毕符 出错 Y 程序是否有错误 Y 打印错误 N 调用解释过程interpret解释执行目的执行目的程序 完毕 编译程序里用了一个枚举类

4、型enum symbol,然后定义了enum symbol sym来存放当前的符号,前面讲过,主程序定义了一个以字符为元素的一维数组word,称保存字表,这个保存字表也存放在符号表里,为了识别当前的符号是属于哪些保存字;还有标识符,拼数,拼符合词等的符号名都存放在符号表里,当sym存放当前的符号时,我们可以判断它是属于哪类的符号,然后加以处理。 在运行的过程中,主程序中又定义了一个名字表,也就是符号表,来专门存放变量、常量和过程名的各个属性,里面的属性包括name,kind,val/level,adr,size,我们来举一个PL/0语言过程说明部分的片段: Const a=35,b=49; V

5、ar c,d,e; Procedure p; Var g; name a b c d e p g Kind const const variable variable variable procedure variable Val/level 35 49 Lev Lev Lev lev lev+1 dx Adr dx dx+1 dx+2 size 4 当遇到标识符的引用时就调用position函数,根据当前sym的符号类型来查table表,看是否有过正确的定义,假设已有,那么从表中取相应的有关信息,供代码的生成用。假设无定义那么调用出错处理程序。 2、 运行时存储组织和管理 对于程序的每一个过

6、程包括主程序,在被调用时,首先在数据段中开拓三个空间,存放静态链SL、动态链DL和返回地址RA。静态链记录了定义该过程的直接外过程或主程序运行时最新数据段的基地址。动态链记录调用该过程前正在运行的过程的数据段基址。返回地址记录了调用该过程时程序运行的断点位置。对于主程序来说,SL、DL和RA的值均置为0。静态链的功能是在一个子过程要引用它的直接或间接父过程这里的父过程是按定义过程时的嵌套情况来定的,而不是按执行时的调用顺序定的的变量时,可以通过静态链,跳过个数为层差的数据段,找到包含要引用的变量所在的数据段基址,然后通过偏移地址访问它。 在过程返回时,解释程序通过返回地址恢复指令指针的值到调用

7、前的地址,通过当前段基址恢复数据段分配指针,通过动态链恢复部分段基址指针。实现子过程的返回。对于主程序来说,解释程序会遇到返回地址为0的情况,这时就认为程序运行完毕。 解释程序过程中的base函数的功能,就是用于沿着静态链,向前查找相差指定层数的部分数据段基址。这在使用sto、lod、stoArr、lodArr等访问部分变量的指令中会经常用。 类PCODE代码解释执行的部分通过循环和简单的case判断不同的指令,做出相应的动作。当遇到主程序中的返回指令时,指令指针会指到0位置,把这样一个条件作为终至循环的条件,保证程序运行可以正常的完毕。 3、 语法分析p 方法 语法分析p 的任务是识别由词法

8、分析p 给出的单词符号序列在构造上是否符合给定的文法规那么.PL/0编译程序的语法分析p 采用了自顶向下的递归子程序法.粗略地说:就是对应每个非终结符语法单元,编一个独立的处理过程(或子程序).语法分析p 研究从读入第一个单词开场由非终结符程序即开场符出发,沿语法描绘图箭头所指出的方向进展分析p .当遇到非终结符时,那么调用相应的处理过程,从语法描绘图看也就进入了一个语法单元,再沿当前所进入的语法描绘图的箭头方向进展分析p ,当遇到描绘图中是终结符时,那么判断当前读入的单词是否与图中的终结符相匹配,假设匹配,那么执行相应的语义程序(就是翻译程序).再读取下一个单词继续分析p .遇到分支点时将当

9、前的单词与分支点上的多个终结符逐个相比拟,假设都不匹配时可能是进入下一非终结符语法单位或是出错. 假如一个PL/0语言程序的单词序列在整修语法分析p 中,都能逐个得到匹配,直到程序结束.,这时就说所输入的程序是正确的.对于正确的语法分析p 做相应的语义翻译,最终得出目的程序. 4、 中间代码表示 中间代码表示格式如下: f L a 其中f代表功能码,l表示层次差,也就是变量或过程被引用的分程序与说明该变量或过程 的分程序之间的层次差.a的含意对不同的指令有所区别,见下面对每条指令解释说明. 1. 2. 3. 4. 5. 6. 7. 8. LIT 0 A 将常数值取到栈顶,A为常数值 LOD L A 将变量值取到栈顶,A为偏移量,L为层差 STO L A 将栈顶内容送入某一变量单元中,A为偏移量,L为层差 CAL L A 调用过程,A为过程地址,L为层差 INT 0 A 在运行栈中为被调用的过程开拓A个单元的数据区 JMP 0 A 无条件跳转到A地址 JPC 0 A 条件跳转,当栈顶布尔值非真那么跳转到A地址,否那么顺序执行 OPR 0 0 过程调用完毕后,返回调用点并退栈 第 7 页 共 7 页

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!