编译原理上机报告 targetblankWord文档下载推荐.docx
《编译原理上机报告 targetblankWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《编译原理上机报告 targetblankWord文档下载推荐.docx(8页珍藏版)》请在冰豆网上搜索。
![编译原理上机报告 targetblankWord文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-10/24/2598e11d-4493-4fd2-b9c0-e9ffe48d1dad/2598e11d-4493-4fd2-b9c0-e9ffe48d1dad1.gif)
为了测试所有可能的代码,我编写了下面的测试PL程序。
这个程序可以编译,但是运行起来是没有意义的,它仅仅是为了包括常量,变量,数组等类型,并且包括比较复杂的表达式处理和几乎所有支持的语句,以便对编译程序进行测试。
programpp;
constPI=3testconst='
z'
testconst1=TRUE
typetesttype=BOOLEANtestarray=array[2..20,0..50]ofboolean
varn,p:
integercr:
char
procedurep1(n:
integer;
varp:
integer);
varin_proc:
charcr1:
testarray
begin
cr1(2,3):
=cr1(n,cr1(n,p))+p;
in_proc:
=2+p*(testconst+1);
ifn<
=1then
whiletestconst1don:
=PI
else
ifp>
1then
begin
p:
=n*p;
n:
=p/n;
end;
callp1(n,cr1(2,5));
end;
callread(n);
callp1(n,p);
callwrite(p)
end.
为了测试运行的情况,我们编写一个稍稍简单的例子,这是参考教材中求阶乘的源程序:
integer
=1thenp:
=1
else
callp1(n-1,p);
p:
=n*p
end
四.编译结果
采用编译程序对这两个PL源程序进行编译。
第一个程序的结果如下:
0ENTP1,9;
进入过程
1JMP0,83;
无条件跳转
2ENTP2,978;
3JMP0,4;
4LIT0,2;
装入常量
5LIT0,2;
6SUB
7LIT0,19;
8MULT
9LIT0,3;
10ADD
11LODA2,9;
装入变量地址
12ADD
13LOD2,0;
装入变量值
14LIT0,2;
15SUB
16LIT0,19;
17MULT
18LOD2,0;
19LIT0,2;
20SUB
21LIT0,19;
22MULT
23LOD2,4;
24ADD
25LODA2,9;
26ADD
27LODT;
装入栈顶值为地址的内容
28ADD
29LODA2,9;
30ADD
31LODT;
32LOD2,4;
33ADD
34STO;
将栈顶值存入栈顶次值所指单元
35LODA2,8;
36LIT0,2;
37LOD2,4;
38LIT0,122;
39LIT0,1;
40ADD
41MULT
42ADD
43STO;
44LOD2,0;
45LIT0,1;
46LEQ;
<
=
47JPC0,55;
栈顶值为0时跳转
48LIT0,1;
49JPC0,54;
50LODA2,0;
51LIT0,3;
52STO;
53JMP0,48;
54JMP0,69;
55LOD2,4;
56LIT0,1;
57GTR;
>
58JPC0,69;
59LODA2,4;
60LOD2,0;
61LOD2,4;
62MULT
63STO;
64LODA2,0;
65LOD2,4;
66LOD2,0;
67IDIV
68STO;
69OPAC;
打开活动记录
70LOD2,0;
71LIT0,2;
72LIT0,2;
73SUB
74LIT0,19;
75MULT
76LIT0,5;
77ADD
78LODA2,9;
79ADD
80CALL1,2;
转子
81UDIS1,2;
调整Display
82RETP;
过程返回
83LODA1,0;
84READ0,0;
读指令
85OPAC;
86LOD1,0;
87LODA1,4;
88CALL1,2;
89LODA1,4;
90WRITE0,0;
写指令
91ENDP;
程序结束
第二个程序编译结果:
0ENTP1,8;
1JMP0,25;
2ENTP2,9;
4LOD2,0;
5LIT0,1;
6LEQ;
7JPC0,12;
8LOD2,4;
9LIT0,1;
10STO;
11JMP0,24;
12OPAC;
14LIT0,1;
16LOD2,4;
17CALL1,2;
18UDIS1,2;
19LOD2,4;
20LOD2,0;
21ILOD2,4;
间接装入
23STO;
24RETP;
25LODA1,0;
26READ0,0;
27OPAC;
28LOD1,0;
29LODA1,4;
30CALL1,2;
31LODA1,4;
32WRITE0,0;
33ENDP;
五.运行结果:
我们用interpret.exe执行生成的obj文件,结果如下所示:
Input:
5
120
5!
=120,说明程序运行完全正确。