编译实验报告.pdf
文本预览下载声明
编译实验报告
姓名:程战战
学号
班级:计算机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 步,否则表示所有等价语句已处理完毕。
地址分配算法:
分配时先分配公用块,分配完共用区后符号表中所有未分配的数据名郡应分配在现行程
序的局部数据区中。在局部数据区中先分配局部等价元再分配局部简单变量。临时变量的分
配:若有两个临时变量的作用于不相交则他们可分配在同一个单元中;若新临时变量的作用
域和
显示全部