编译原理实验报告

编译原理实验报告

ID:18162431

大小:173.00 KB

页数:10页

时间:2018-09-14

编译原理实验报告_第1页
编译原理实验报告_第2页
编译原理实验报告_第3页
编译原理实验报告_第4页
编译原理实验报告_第5页
资源描述:

《编译原理实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、<<编译原理>>实验报告项目名称PL0编译器学院____计算机学院_______专业_计算机科学与技术_年级班别____2004级7班______学号3104006730学生姓名___陈明华_____辅导教师_______刘添添_________成绩_____________2006年12月编译原理上机实验报告一、实验目的与要求目的:在分析理解一个教学型编译程序(如PL/0)的基础上,对其词法分析程序、语法分析程序和语义处理程序进行部分修改扩充。达到进一步了解程序编译过程的基本原理和基本实现方法的目的。要求:对

2、PL/0作以下修改扩充:基本内容:(1)增加单词:保留字ELSE,FOR,TO,DOWNTO;运算符+=,-=(2)修改单词:不等号#改为<>(3)增加条件语句的ELSE子句选做内容:(4)扩充赋值运算:+=和-=(5)扩充语句(Pascal的FOR语句):①FOR<变量>:=<表达式>TO<表达式>DO<语句>②FOR<变量>:=<表达式>DOWNTO<表达式>DO<语句>其中,语句①的循环变量的步长为1,语句②的循环变量的步长为-1。二、实验环境与工具(1)计算机及操作系统:PC机及WindowsXP(2)

3、程序设计语言:BorlandC++Builder6(3)教学型编译程序:PL/0三、设计方案(1)概述:源、目标语言,实现工具(平台),运行平台源语言:PL/0目标语言:目标代码(生成的文件后缀为*.COD)实现平台:BorlandC++Builder6运行平台:WindowsXP(2)结构设计说明:各功能模块描述ERROR()出错处理,打印出错位置和错误编码;GETCH()漏掉空格,读取一个字符;GETSYM()词法分析,读取一个单词;GEN()目标代码生成过程,本过程用于把生成的目标代码写入目标代码数组,供

4、后面的解释器解释执行;TEST()测试当前单词是否合法过程test;ENTER()登陆符号表过程enter;POSITION()在符号表中查找指定符号所在位置的函数position,如果找不到就返回0;VARDECLARATION()变量声明;LISTCODE()列出目标代码清单;FACTOR()因子处理过程factor;TERM()项处理过程term;EXPRESSION()表达式处理过程;CONDITION()条件处理过程;STATEMENT()语句处理过程;BLOCK()语法分析过程;BASE()通过静态

5、链求出数据区基地址的函数;INTERPRET()对目标代码解释运行过程;(3)主要成分描述a)符号表为了组成一条指令,编译程序必须知道其操作码及其参数(数或地址)。这些值是由编译程序本身联系到相应标识符上去的。这种联系是在处理常数、变量和过程说明完成的。为此符号表应包含每一标识符所联系的属性;如果标识符被说明为常数,其属性值为常数值;若被说明成变量,其属性就是由层次和偏移量组成的地址;若被说明为过程,其属性就是过程的入口地址及层次。常数的值由程序提供,编译的任务就是确定存放该值的地址。struct{ALFANA

6、ME;OBJECTSKIND;union{intVAL;/*CONSTANT*/struct{intLEVEL,ADR,SIZE;}vp;/*VARIABLE,PROCEDUR:*/};}TABLE[TXMAX];如上:NAME域为常数、变量或过程的名称;KIND域为种类,包括常量,整型变量,和过程;union域的作用就是,当KIND为常数时,VAL存放常数的值,当KIND为变量或过程时,union中的结构体又存放它们的层次、地址和大小。符号表中的名字是按字符代码串的值从小到大排列的,符号表查找用二分查找法。a

7、)运行时存储组织和管理由于编译时目标程序运行的数据空间大小已经规定,所以存储组织属于静态存储。源程序的标识符存放在TABLE表中,目标代码存放在CODE中,S是由解释程序定义的一维整型数组,是程序运行时的数据存储空间。解释程序还定义了4个寄存器:1)P:程序地址寄存器:指向下一条要执行的目标程序的地址(相当目标程序CODE数组的下标)。2)I:指令寄存器:存放着当前正在解释的下一条目标指令。3)T:栈顶寄存器:由于每个过程当它被运行时,给它分配的数据空间(下边称数据段)包括静态部分和动态部分,对于动态部分,要注

8、意的是,栈顶寄存器指出了当前栈中最新分配的单元。4)B:基址寄存器:指向每个过程被调用时,在数据区S中给它分配的数据段的起始地址,也称基地址。b)语法分析方法语法分析子程序采用了自顶向下的递归子程序法,逐句语句分析,对于正确的语法分析做相应的语义翻译,得出目标程序,并提供了出错处理的机制。c)中间代码表示对PL/0编译程序的目标代码的指令格式描述如下:fla其中f代表功能码,l表示层次

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

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

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