文档详情

编译实验报告.pdf

发布:2017-08-15约2.61千字共4页下载文档
文本预览下载声明
编译实验报告 姓名:程战战 学号 班级:计算机91 学院:电信学院 一、实验题目: 1、写一程序,可以处理公共等价语句; 2、写一程序,做地址分配处理公共等价语句,填写符号表地址栏; 3、用课堂上例子 COMMON A1,B,C,A,D; DIMENSION A(10,10); INTEGER I,J,K,X,A1,A(10,10),B,C,D; EQUIVALENCE (I,J,A(1,2),K),(X, A(2,3)); 验证。 二、实验目的: 1、熟悉编译原理各章节的知识内容; 2、学会运行时空间组织方法掌握; 3、重点掌握符号表创建及分配和公共等价语句处理问题。 三、 实验原理: 程序要处理填写符号表、做地址分配、处理公共等价语句,涉及编译原理中词法分析、 语法分析、以及符号表、运行时存储空间组织等内容。 实验中包含COMMON、DIMENSION 、COMPLEX、EQUIVALENCE 四个基本语句, 变量类型包括简单变量和数组变量。 符号表包括Name,Attr,Cmp,Offset,Eq,Da,Addr ;COMLIST 表包括Name,FT,LT ,LENGTH ; 而信息表用来记录数组名、数组维数、数组下标、数组入口地址、数组等价元等信息。 程序首先根据有限自动机进行词法分析、语法分析,创建符号表,然后通过hash 函数 分配地址,最后用书上给出的公共等价元处理函数处理公共等价语句。 具体算法如下: Hash 函数算法: 首先计算出H (sym)的值h ,置P :=Hash[h] ;然后置Hash[h] :=available ,然后把 新名sym 及其连接指示器的值p 填进available 所指的符号表位置,并累增available 值使它 指向下一个空项的位置。 COMMON 语句处理算法: 首先根据common 有限自动机表判断字符位什么,在中新建一项,并用name 初始化 离出的标示符,并在COMLIST 中新建一项,name 初始化为无名块并改变COMLIST 表中 的LT 同时利用前项和当前指针设置符号表cmp 表项值。重复操作直到结束。 DEMENSIONPROCESS 语句处理算法: 首先根据demension 有限自动机提取变量标识符,然后根据变量标示符查找符号表,同 时在数组信息表中新建一项,确定数组维数,计算数组大小并将其分别填入相应项中,重复 以上步骤直至结束。 公共等价语句处理算法: 1)置现行程序段符号表中所有的EQ 栏均为null ; 2 )准备开始处理一个等价片 ,置P :=null ;BASE :=0 ; 3 )从等价片中取出一个等价元X ,令其符号表入口为N ,求出N 的下标j 。如果X 为 复型或双实型,并置L=2 ,否则置L=1 。变量L 的值指现行等价元X 所需占用的字数。置X 的相对数z 为z :=BASE-j*L 4 )若X 已出现在等价链中即转第6 步。否则 5 )把X 加紧现行环链中,即 If P=null then P :=n else eq[n] :=eq[p] ; Eq[p] :=n ; offset[n] :=z ;转第7 步 6 )X 已在某一个等价环链中,准备把现行环和X 原来所在的那个环合并为一。这时必 须根据X 懂得老相对数offset[n]和现行相对数z 的差数D 来调整现行环中各等价元的相对 数,同时调整BASE :=BASE+D ;然后把两环合并为一。 7 )如果现行片中还有等价元转第3 步 8 )若还有其他未处理的等价片则转第2 步,否则表示所有等价语句已处理完毕。 地址分配算法: 分配时先分配公用块,分配完共用区后符号表中所有未分配的数据名郡应分配在现行程 序的局部数据区中。在局部数据区中先分配局部等价元再分配局部简单变量。临时变量的分 配:若有两个临时变量的作用于不相交则他们可分配在同一个单元中;若新临时变量的作用 域和
显示全部
相似文档