编译原理课程设计报告

编译原理课程设计报告

ID:12485433

大小:1.80 MB

页数:0页

时间:2018-07-17

编译原理课程设计报告_第页
预览图正在加载中,预计需要20秒,请耐心等待
资源描述:

《编译原理课程设计报告》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、一、实验要求1、基本内容(1)扩充赋值运算:+=和-=(2)扩充语句(Pascal的FOR语句):FOR<变量>:=<表达式>STEP<表达式>UNTIL<表达式>DO<语句>(3)增加运算:++和--。2、选做内容(1)增加类型:①字符类型;②实数类型。(2)扩充函数:①有返回值和返回语句;②有参数函数。(3)增加一维数组类型(可增加指令)。(4)其他典型语言设施。二、实验环境与工具1、源语言:P语言2、目标语言:假想式计算机的汇编语言,与具体计算机无关3、实现工具:编译工具:C++builder6,实现语言c语言4、运行平台:由C++builder6解释目标语言,实现程序功能三、结

2、构设计说明1、PL编译程序的结构:2、编译程序中各功能模块的描述过程或函数名简要功能说明pl0主程序error出错处理getsym词法分析,读取一个单词getch漏掉空格,读取一个字符gen生成目标代码,并送入目标程序区test测试当前单词符号是否合法block分程序分析处理过程enter登录名字表15position查找标识符在名字表中的位置constdeclaration常量定义处理vardeclaration变量说明处理listcode列出目标代码清单statement语句部分处理expression表达式处理term项处理factor因子处理condition条件处理inter

3、pret对目标代码的解释执行程序base(函数)通过静态链求出数据区的基地址1、编译程序的总体流程图启动置初值调用getsym取单词调用block过程是否为源程序结束符源程序是否有错误调用解释过程interpret解释执行目标执行目标程序结束出错打印错误NNYY2、词法分析过程15一、主要成分描述1、符号表结构NAMEKIND(总共有一下5种类型)VAL/vpvp:LEVEL或者VALADRSIZEACONSTANT存放常量的数BVARIABLELEV该变量所在地址CREALLEV该变量所在地址DCHARACTERLEV该变量所在地址EPROCEDURLEV开辟空间大小2、运行时存储组织和

4、管理当源程序经过语法分析,如果未发现错误时,由编译程序调用解释程序,对存放在CODE中的代码CODE[0]开始进行解释执行.当废弃结束后,记录源程序中标识符的TABLE表已没有作用.因此存储区只需以数组CODE存储的只读目标程序和运行机制时的数据区S,S是由解释程序定义的一维整数型数组.15解释执行时的数据空间S为栈式计算机的在座空间,遵循后进先出规则,对每个过程(包括主程序)当调用时,才分配数据空间,退出过程进,则所分配原则的数据空间被释放.解释程序还定义了4个寄存器:1、指令寄存器.存放当前正在解释的一条目标指令2、程序地址寄存器.指向下一条要执行的目标程序的地址3、栈顶寄存器.4、基

5、址寄存器.指向每个过程被调用时,在数据区S中给它分配原则的数据段起始地址,也称基地址.1、语法分析方法PL/0编译程序的语法分析采用了自顶向下的递归的子程序法。其语法调用关系如图左:block过程流程图如图右2、中间代码15中间代码总共有8条,具体如下程序中的代码生成是由过程GEN完成的。GEN过程有3个参数,分别代表目标的功能码、层差和位移量。生成的代码顺序存放在数组CODE中一、测试用例1、扩充赋值运算:+=和-=(必作部分)151、扩充for语句FOR<变量>:=<表达式>STEP<表达式>UNTIL<表达式>DO<语句>:(必作部分)2、增加运算:++、--:(必做部分)151、增

6、加类型:①字符类型;②实数类型。(选作部分)①变量A:实数到整型的转换,变量B:实数的读取,变量C:字符的辨认和输出,变量D:实型和整型的混合运算,实数的输出。②字符型不能参加算术运算,不能将实数和整型数据赋值给字符型的检测15一、开发过程和完成情况1、赋值运算+=,-=和运算++,--的实现过程①添加保留字实验部分已经完成,主要是在STATEMENT函数部分增加语法语义的识别。在caseIDENT:后面增加一下部分代码,实现A+=B;A-=B;A++;A—的功能……………………………………………….elseif(SYM==PLUSEQL){//增加+=,-=赋值运算GetSym();EX

7、PRESSION(FSYS,LEV,TX);if(i!=0){GEN(LOD,LEV-TABLE[i].vp.LEVEL,TABLE[i].vp.ADR);GEN(OPR,0,2);GEN(OPR,0,17);GEN(STO,LEV-TABLE[i].vp.LEVEL,TABLE[i].vp.ADR);}}elseif(SYM==MINUSEQL){//-=GetSym();GEN(LOD,LEV-TABLE[i].vp

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

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

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