编译原理课程设计--对pl0进行扩充和修改

编译原理课程设计--对pl0进行扩充和修改

ID:10999690

大小:292.00 KB

页数:12页

时间:2018-07-09

编译原理课程设计--对pl0进行扩充和修改_第1页
编译原理课程设计--对pl0进行扩充和修改_第2页
编译原理课程设计--对pl0进行扩充和修改_第3页
编译原理课程设计--对pl0进行扩充和修改_第4页
编译原理课程设计--对pl0进行扩充和修改_第5页
资源描述:

《编译原理课程设计--对pl0进行扩充和修改》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、课程设计课程名称__编译原理________题目名称__对PL0进行扩充和修改学生学院__计算机学院________专业班级__计算机科学与技术___学号3106006475学生姓名___杨振风_________指导教师__吴伟民____________2009年1月7日一、课程设计概述PL0语言是Pascal语言的一个子集,它的编译程序是一个编译解释执行系统,PL0的目标程序为假想栈式计算机的汇编语言,与具体的计算机无关。编译程序采用一趟扫描方式,已语法语义分析程序为核心,词法分析程序和代码生成的程序都作为一个独立的过程,当语法分析需要读单词的时候就调用词法分析程序,

2、而当语法分析正确需要生成相应的目标代码时候,就调用代码生成程序。此外用表格管理程序建立变量,常量和过程标识符的说明与引用之间的信息联系,用出错处理程序对词法和语义分析遇到的错误给出在源程序中出错的位置和错误性质。PL0源程序出错处理程序表格管理程序词法分析程序语法语义分析程序目标程序代码生成程序本课程设计通过对PL/0(C语言版)进行修改和添加功能完成设计,通过修改词法分析程序、语法分析、程序编译主体block和解释执行等各部分的修改扩充,完成基本内容和选做内容。扩充了赋值运算+=、-=,运算++、--,以及扩充语句repeat<语句序列>dowhile<条件>。二、操

3、作平台操作系统WindowsXPSP3,硬件:AMDathlon3600+1.9GHZ,1G内存软件:VisualC++6.0创天中文版三、主要成分的描述1、符号表根据符号变量的存储类别定义及他们除向的位置和次序来确定每一个变量应分配的存储区及在该区的具体位置。编译程序有两类的存储区,即静态的存储区和动态的存储区。由于本课程设计没有添加其他的数据类型暂时不需要在符号表里面处理。2、运行时存储组织和管理采用栈式存储分配,运行时每进入一个过程,就在栈顶为该过程分配所需的数据空间,当一个过程工作完毕返回时,它在栈顶的数据空间也即释放程序运行时的存储空间,栈中在某一个时刻可能会

4、包含某个过程的几个活动记录,即某个过程递归调用的情况,另外同样一个存储的位置,可能会不同运行时刻分配给不同的数据对象。1、词法分析的过程PL0的词法分析程序GETSYM是一个独立的过程,其功能是为语法语义分析提供单词,把输入的字符串形式的源程序分割成一个个单词符号传递给语法语义分析为此PL0设置了3个全程变量SYM存放每个单词的类别,用内部编码表示ID存放用户所定义的标识符的值。NUM存放用户定义的数2、语法分析方法在PL/0中是采用递归子程序法进行语法分析的,具体实现方法是为每个非终结符写一个函数,如遇到变量声明时调用变量声明函数,遇到常量声明时调用常量声明函数等。3

5、、中间代码表示编译程序所使用的中间代码有多种形式。常见的有逆波兰式,三元式,四元式和树形表示。4、目标代码PL0编译程序所产生的目标代码是一个假想的栈式计算机汇编语言,可称为类PCODE指令代码,它不依赖于任何的实际计算机指令的格式如下:fla其中f代表功能码,l代表层次差,也就是引用变量或过程的分程序与说明该变量或过程的分程序之间的层次差。a的含义对不同的指令有所区别。这里我们需要用到的有关目标指令有:LITLODSTOCALINTJMPJPCOPR一、详细设计1、扩充赋值运算①首先在头文件的enumsymbol中添加自己定义的+=,-=运算的关键字peq和meq。还

6、有#defiinesymnum以便词法分析时能够正确的识别这些关键字。②在词法分析程序中添加对+=和-=的识别,也就是在程序中找到getsym函数,添加如下:elseif(ch=='+'){getchdo;if(ch=='='){sym=peq;这里是自己的定义的+=的标识符getchdo;}elseif(ch=='+'){sym=ppl;getchdo;}else{sym=plus;}}同理对于-=的标识符:elseif(ch=='-'){getchdo;if(ch=='='){sym=meq;这里是自己的定义的+=的标识符getchdo;}elseif(ch=='-

7、'){sym=mmi;getchdo;}else{sym=minus;}}③接着在语句处理函数statement添加如下的代码:if(sym==becomes

8、

9、sym==peq

10、

11、sym==meq){peqop=sym;这是自己定义的标识符,识别运算符getsymdo;}else{error(13);}memcpy(nxtlev,fsys,sizeof(bool)*symnum);expressiondo(nxtlev,ptx,lev);if(i!=0&&peqop==becomes)//赋值{gendo(sto,lev-table[i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。