资源描述:
《编译原理课程设计---pl0编辑器扩充》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、编译原理课程设计题目___PL0编辑器扩充____学院计算机学院专业软件工程年级班别10级4班学号学生姓名陈泳鑫指导教师杨劲涛答辩程序设计报告撰写平时总成绩2013年1月4日一.课程设计目的与要求1、课程设计目的:在分析理解一个教学型编译程序(如PL/0)的基础上,对其词法分析程序、语法分析程序和语义处理程序进行部分修改扩充。达到进一步了解程序编译过程的基本原理和基本实现方法的目的。2、课程设计要求:基本内容(成绩范围:“中”、“及格”或“不及格”)(1)扩充赋值运算:*=和/=扩充语句(Pascal的FOR语句):①FOR<变量>:=<表达式>TO<表达式>D
2、O<语句>②FOR<变量>:=<表达式>DOWNTO<表达式>DO<语句>其中,语句①的循环变量的步长为2,语句②的循环变量的步长为-2。(3)增加运算:++和--。选做内容(成绩评定范围扩大到:“优”和“良”)(1)增加类型:①字符类型;②实数类型。(2)扩充函数:①有返回值和返回语句;②有参数函数。(3)增加一维数组类型(可增加指令)。(4)其他典型语言设施。二、结构设计方案1、结构设计说明:PL/0的编译程序以语法分析程序为核心,词法分析程序和代码生成程序都作为一个独立的过程,当语法分析需要读单词时就用词法分析程序,而当语法分析正确需生成相应的目标代码时,
3、则调用代码生成程序。此外,用表格管理程序建立变量,常量和过程标识符的说明与引用之间的信息联系。用出错处理程序对词法和语法分析遇到的错误给出在源程序中出错的位置和错误性质。2、各功能模块图示:3.各功能模块作用表:1PL0主程序2Error出错处理,打印出错位置和错误编码3GetCh漏掉空格,读取一个字符4GetSym词法分析,读取一个单词5Gen生成目标代码,并送入目标程序区6TEST测试当前单词符号是否合法7ENTER登录名字表8POSITION查找标识符在名字表中的位置9ConstDeclaration常量定义处理10VarDeclaration变量说明处理
4、11ListCode列出目标代码清单12FACTOR因子处理13TERM项处理14EXPRESSION表达式处理15CONDITION条件处理16STATEMENT语句部分处理17Block分程序分析处理过程18BASE通过静态链求出数据区的基地址19Interpret对目标代码的解释执行程序3.符号名字表结构:structtablestruct{charname[al];/*名字*/enumobjectkind;/*类型:const,var,arrayorprocedure*/intval;/*数值,仅const使用*/intlevel;/*所处层,仅cons
5、t不使用*/intadr;/*地址,仅const不使用*/intsize;/*需要分配的数据区空间,仅procedure使用*/};4.保留关键字枚举结构:enumsymbol{nul,ident,number,plus,minus,times,slash,oddsym,eql,neq,lss,leq,gtr,geq,lparen,rparen,comma,semicolon,period,becomes,beginsym,endsym,ifsym,thensym,whilesym,writesym,readsym,dosym,callsym,constsym,
6、varsym,procsym,elsesym,forsym,tosym,downtosym,returnsym,pluseql,minuseql,plusplus,minusminus,};5.名字表中标识符枚举类型:enumobject{constant,/*常量*/variable,/*变量*/procedur,/*过程*/};6.运行时存储组织和管理对于源程序的每一个过程(包括主程序),在被调用时,首先在数据段中开辟三个空间,存放静态链SL、动态链DL和返回地址RA。静态链记录了定义该过程的直接外过程(或主程序)运行时最新数据段的基地址。动态链记录调用该过
7、程前正在运行的过程的数据段基址。返回地址记录了调用该过程时程序运行的断点位置。对于主程序来说,SL、DL和RA的值均置为0。静态链的功能是在一个子过程要引用它的直接或间接父过程(这里的父过程是按定义过程时的嵌套情况来定的,而不是按执行时的调用顺序定的)的变量时,可以通过静态链,跳过个数为层差的数据段,找到包含要引用的变量所在的数据段基址,然后通过偏移地址访问它。 在过程返回时,解释程序通过返回地址恢复指令指针的值到调用前的地址,通过当前段基址恢复数据段分配指针,通过动态链恢复局部段基址指针。实现子过程的返回。对于主程序来说,解释程序会遇到返回地址为0的情况,这
8、时就认为程序运行结束。