广工编译原理课程设计报告.doc

广工编译原理课程设计报告.doc

ID:50905499

大小:131.50 KB

页数:11页

时间:2020-03-15

广工编译原理课程设计报告.doc_第1页
广工编译原理课程设计报告.doc_第2页
广工编译原理课程设计报告.doc_第3页
广工编译原理课程设计报告.doc_第4页
广工编译原理课程设计报告.doc_第5页
资源描述:

《广工编译原理课程设计报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、一、实验目的在分析理解一个教学型编译程序(如PL/0)的基础上,对其词法分析程序、语法分析程序和语义处理程序进行部分修改扩充。达到进一步了解程序编译过程的基本原理和基本实现方法的目的。二、实验成要求1.课内实验对PL/0作以下修改扩充:(1)增加单词:保留字ELSE,FOR,TO,DOWNTO,RETURN运算符+=,-=,++,--(2)修改单词:不等号#改为<>(3)增加条件语句的ELSE子句2.课程设计基本内容(成绩范围:“中”、“及格”或“不及格”)(1)扩充赋值运算:+=和-=(2)扩充语句(Pascal

2、的FOR语句):①FOR<变量>:=<表达式>TO<表达式>DO<语句>②FOR<变量>:=<表达式>DOWNTO<表达式>DO<语句>其中,语句①的循环变量的步长为1,语句②的循环变量的步长为-1。选做内容(成绩评定范围扩大到:“优”和“良”)(1)增加运算:++和--。;(2)增加类型:①字符类型;②实数类型。(3)扩充函数:①有返回值和返回语句;②有参数函数。(4)增加一维数组类型(可增加指令)。(5)其他典型语言设施。三、实验环境(1)实现平台:WindowsXP,Visualstudio2005(2)教学

3、型编译程序:PL/0(C语言版)11四、设计方案Error()出错处理,打印出错位置和错误编码GetCh()漏掉空格,读取一个字符GetSym()词法分析,读取一个单词GEN()目标代码生成过程,本过程用于把生成的目标代码写入目标代码数组,供后面的解释器解释执行TEST()测试当前单词是否合法过程testENTER()登陆符号表过程enterPOSITION()在符号表中查找指定符号所在位置的函数position,如果找不到就返回0VARDECLARATION()变量声明LISTCODE()列出目标代码清单;FAC

4、TOR()因子处理过程factorTERM()项处理过程term;EXPRESSION()表达式处理过程CONDITION()条件处理过程STATEMENT()语句处理过程BLOCK()语法分析过程BASE()通过静态链求出数据区基地址的函数,INTERPRET()对目标代码解释运行过程启动置初值调用getsym取单词调用block过程是否为源程序结束符源程序是否有错误调用解释过程interpret解释执行目标执行目标程序结束出错打印错误NNYY程序分程序语句条件表达式项因子PL/0语法调用关系图11五、主要成分描

5、述1.符号表在编译程序中符号表用来存放语言程序中出现的有关标识符的属性信息,符号表中所登记的信息在编译的不同阶段都要用到。在语义分析中,符号表所登记的内容将用于语义检查(如检查一个名字的使用和原先的说明是否一致)和产生中间代码。在目标代码生成阶段,当对符号名进行地址分配时,符号表是地址分配的依据。对一个多遍扫描的编译程序,不同遍所用的符号表也往往各有不同。因为每遍所关心的信息各有差异。一张符号表的每一项(或称入口才包含两大栏(或称区段、字域),即名字栏(NAME)信息栏(INFORMATION) 信息栏包含许多子栏

6、和标志位,用来记录相应名字和种种不同属性,由于查填符号表一般是通过匹配名字来寮现的,因此,名字栏也称主栏。主栏的内容称为关键字(keyword)。2.运行时存储组织和管理由于编译时目标程序运行的数据空间大小已经规定,所以存储组织属于静态存储。源程序的标识符存放在TABLE表中,目标代码存放在CODE中,S是由解释程序定义的一维整型数组,是程序运行时的数据存储空间。解释程序还定义了4个寄存器:1)P:程序地址寄存器:指向下一条要执行的目标程序的地址(相当目标程序CODE数组的下标)。2)I:指令寄存器:存放着当前正在

7、解释的下一条目标指令。3)T:栈顶寄存器:由于每个过程当它被运行时,给它分配的数据空间(下边称数据段)包括静态部分和动态部分,对于动态部分,要注意的是,栈顶寄存器指出了当前栈中最新分配的单元。4)B:基址寄存器:指向每个过程被调用时,在数据区S中给它分配的数据段的起始地址,也称基地址1.中间代码表示对PL/0编译程序的目标代码的指令格式描述如下:fla其中f代表功能码,l表示层次差,a的含意对不同的指令有所区别,见下面对每条指令的解释说明:lit0a将常数值取到栈顶,a为常数值Lodla将变量值取到栈顶,a为偏移量

8、,l为层差11Stola将栈顶内容送入某变量单元中,a为偏移量,l为层差Calla调用过程,a为过程地址,l为层差Int0a在运行栈中为被调用的过程开辟a个单元的数据区jmp0a无条件跳转至a地址Jpc0a条件跳转,当栈顶布尔值非真则跳转至a地址,否则顺序执行opr00过程调用结束后,返回调用点并退栈opr01栈顶元素取反opr02次栈顶与栈顶相加,退两个栈

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

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

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