《湖北民族学院编译原理》由会员分享,可在线阅读,更多相关《湖北民族学院编译原理(19页珍藏版)》请在金锄头文库上搜索。
1、编译原理实验报告编译原理实验报告班 级 _学 号 _姓 名 _ 指导老师 李 艳实验一实验一 编译程序的分析与验证编译程序的分析与验证一:实验目的一:实验目的了解编译程序中 LR 的分析表的作用以及语义加工程序的功能二:二: 实验要求实验要求对编译程序实例进行分析,通过编译程序的运行,检验编译程序输出结果的正确性。三:实验知识三:实验知识了解关于高级语言的规定即顺序结构,循环结构,选择结构和过程。了解语法分析的构造尤其是 LR 分析器。通过自行设计一程序进行正确性验证。四:实验内容四:实验内容验证下述程序输出结果的正确性;while (ab) dobeginif m=n then a:=a+1
2、elsewhile k=h do x:=x+2;m:=n+x*(m+y)end#五:实验结果以及分析五:实验结果以及分析结果:enter the file name:1a.txt*词法分析结果词法分析结果*3 048 056 042 356 149 05 04 00 056 242 256 31 056 038 056 034 057 12 03 056 4press any key to continue.42 556 55 056 638 056 634 057 28 056 238 056 334 056 636 048 056 234 056 749 06 010 0程序总共 7 行,
3、产生了 43 个二元式!*变量名表*0 a1 b2 m3 n4 k5 h6 x7 y*状态栈加工过程及归约顺序*stack0=0 n=3 lr=3stack1=3 n=9 lr=7stack2=7 n=5 lr=11stack3=11 n=4 lr=4stack4=4 n=0 lr=2stack5=2 n=9 lr=6stack6=6 n=1 lr=10stack7=10 n=7 lr=5stack8=5 n=2 lr=104S-a 归约归约stack7=10 n=11 lr=14stack8=14 n=2 lr=17stack9=17 n=3 lr=3stack10=3 n=9 lr=7st
4、ack11=7 n=5 lr=11stack12=11 n=7 lr=5stack13=5 n=8 lr=104S-a 归约归约stack12=11 n=11 lr=15stack13=15 n=8 lr=102S-while e do s 归约归约stack9=17 n=11 lr=18stack10=18 n=8 lr=101S-if e then s else s 归约归约stack4=4 n=11 lr=9stack5=9 n=8 lr=13stack6=13 n=7 lr=5stack7=5 n=6 lr=104S-a 归约归约stack6=13 n=11 lr=9stack7=9
5、n=6 lr=105L-S 归约归约stack6=13 n=12 lr=16stack7=16 n=6 lr=106L-S;L 归约归约stack4=4 n=12 lr=8stack5=8 n=6 lr=12stack6=12 n=10 lr=103S-begin L end 归约归约stack3=11 n=11 lr=15stack4=15 n=10 lr=102S-while e do s 归约归约stack0=0 n=11 lr=1stack1=1 n=10 lr=-2*四元式分析结果*100 j ,a ,b ,102 )101 j , , ,117 )102 j= ,m ,n ,104
6、 )103 j , , ,107 )104 + ,a ,1 ,T1 )105 :+ ,T1 , ,a )106 j , , ,112 )107 j= ,k ,h ,109 )108 j , , ,112 )109 + ,x ,2 ,T2 )110 :+ ,T2 , ,x )111 j , , ,107 )112 + ,m ,y ,T3 )113 * ,x ,T3 ,T4 )114 + ,n ,T4 ,T5 )115 :+ ,T5 , ,m )116 j , , ,100 )程序运行结束!分析:由于在编译程序中的/*算术表达式的 LR 分析表*/static int action1107=3,-
7、1,-1,2,-1,-1,1,-1,4,5,-1,-1,ACC,-1,3,-1,-1,2,-1,-1,6,-1,104,104,-1,104,104,-1,3,-1,-1,2,-1,-1,7,3,-1,-1,2,-1,-1,8,-1,4,5,-1,9,-1,-1,-1,101,5,-1,101,101,-1,-1,102,102,-1,102,102,-1,-1,103,103,-1,103,103,-1;是对:所进行的分析因此该编译程序可以将上面的的那个还有+,8, ()的 C 语言正确翻译。6、实验心得实验心得D.Knuth 在 1965 年提出了 LR(K)文法及 LR(K)分析技术。L
8、R 分析方法是最普遍的自底向上的分析方法。L 代表从左向右扫描单词符号,R 代表产生的是最右推导。通过实验,加深了对 LR 分析方法流程的理解。明白了 LR 分析表的构造。理解了编译程序中 LR 的分析表的作用以及语义加工程序的功能。夯实了理论基础。实验二实验二 算术表达式的扩充算术表达式的扩充一、实验目的一、实验目的掌握 LR 的分析方法和语义加工程序的扩充二、实验要求二、实验要求参照算术表达式 LR 分析表的设计方法,设计扩充后的算术表达式 LR 分析表,并对原语义加工程序进行修改,加入新添加的内容。三三 、实验内容、实验内容设计的程序如下:while (ab) dobeginif m=n
9、 then a:=a+1elsewhile k=h do x:=x+2;m:=n/x+x*(m-y)end#在前面已经知道的编译程序中,是不可以识别 / ,还有 号的,因此我们需要构造可以识别 / ,还有 号的算术表达式的 LR 分析表通过分析表的构造得到分析表为:/*算术表达式的 LR 分析表*/static int action1149= 3,-1,-1,-1,-1,2,-1,-1,1,-1,4,5,6,7,-1,-1,ACC,-1,3,-1,-1,-1,-1,2,-1,-1,8,-1,106,106,106,106,-1,106,106,-1,3,-1,-1,-1,-1,2,-1,-1,
10、9,3,-1,-1,-1,-1,2,-1,-1,10,3,-1,-1,-1,-1,2,-1,-1,11,3,-1,-1,-1,-1,2,-1,-1,12,-1,4,5,6,7,-1,13,-1,-1,-1,101,101,6,7,-1,101,101,-1,-1,102,102,6,7,-1,102,102,-1,-1,103,103,103,103,-1,103,103,-1,-1,104,104,104,104,-1,104,104,-1,-1,105,105,105,105,-1,105,105,-1;除了修改原不可以识别/ 和的编译程序的 LR 分析表之外,我们还要在适当的地方增加下列几项#define minus 35 /added#define div 37 /addedcase /: /