1、为了测试所有可能的代码,我编写了下面的测试PL程序。这个程序可以编译,但是运行起来是没有意义的,它仅仅是为了包括常量,变量,数组等类型,并且包括比较复杂的表达式处理和几乎所有支持的语句,以便对编译程序进行测试。program pp; const PI=3 testconst=z testconst1=TRUE type testtype=BOOLEAN testarray=array2.20,0.50 of boolean var n,p:integer cr:char procedure p1(n:integer;var p:integer); var in_proc:char cr1:te
2、starray begin cr1(2,3):=cr1(n,cr1(n,p)+ p; in_proc:=2+p*(testconst+1); if n1 then begin p:=n*p; n:=p/n; end; call p1(n,cr1(2,5); end; call read(n); call p1(n,p); call write(p) end.为了测试运行的情况,我们编写一个稍稍简单的例子,这是参考教材中求阶乘的源程序:integer=1 then p:=1 else call p1(n-1,p); p:=n*p end四 编译结果采用编译程序对这两个PL源程序进行编译。第一个程
3、序的结果如下:0 ENTP 1 , 9 ;进入过程1 JMP 0 , 83 ;无条件跳转2 ENTP 2 , 978 ;3 JMP 0 , 4 ;4 LIT 0 , 2 ;装入常量5 LIT 0 , 2 ;6 SUB7 LIT 0 , 19 ;8 MULT9 LIT 0 , 3 ;10 ADD11 LODA 2 , 9 ;装入变量地址12 ADD13 LOD 2 , 0 ;装入变量值14 LIT 0 , 2 ;15 SUB16 LIT 0 , 19 ;17 MULT18 LOD 2 , 0 ;19 LIT 0 , 2 ;20 SUB21 LIT 0 , 19 ;22 MULT23 LOD 2
4、, 4 ;24 ADD25 LODA 2 , 9 ;26 ADD27 LODT ;装入栈顶值为地址的内容28 ADD29 LODA 2 , 9 ;30 ADD31 LODT ;32 LOD 2 , 4 ;33 ADD34 STO ;将栈顶值存入栈顶次值所指单元35 LODA 2 , 8 ;36 LIT 0 , 2 ;37 LOD 2 , 4 ;38 LIT 0 , 122 ;39 LIT 0 , 1 ;40 ADD41 MULT42 ADD43 STO ;44 LOD 2 , 0 ;45 LIT 0 , 1 ;46 LEQ ;58 JPC 0 , 69 ;59 LODA 2 , 4 ;60 L
5、OD 2 , 0 ;61 LOD 2 , 4 ;62 MULT63 STO ;64 LODA 2 , 0 ;65 LOD 2 , 4 ;66 LOD 2 , 0 ;67 IDIV68 STO ;69 OPAC ;打开活动记录70 LOD 2 , 0 ;71 LIT 0 , 2 ;72 LIT 0 , 2 ;73 SUB74 LIT 0 , 19 ;75 MULT76 LIT 0 , 5 ;77 ADD78 LODA 2 , 9 ;79 ADD80 CALL 1 , 2 ;转子81 UDIS 1 , 2 ;调整Display82 RETP ;过程返回83 LODA 1 , 0 ;84 READ
6、0 , 0 ;读指令85 OPAC ;86 LOD 1 , 0 ;87 LODA 1 , 4 ;88 CALL 1 , 2 ;89 LODA 1 , 4 ;90 WRITE 0 , 0 ;写指令91 ENDP ;程序结束第二个程序编译结果:0 ENTP 1 , 8 ;1 JMP 0 , 25 ;2 ENTP 2 , 9 ;4 LOD 2 , 0 ;5 LIT 0 , 1 ;6 LEQ ;7 JPC 0 , 12 ;8 LOD 2 , 4 ;9 LIT 0 , 1 ;10 STO ;11 JMP 0 , 24 ;12 OPAC ;14 LIT 0 , 1 ;16 LOD 2 , 4 ;17 CALL 1 , 2 ;18 UDIS 1 , 2 ;19 LOD 2 , 4 ;20 LOD 2 , 0 ;21 ILOD 2 , 4 ;间接装入23 STO ;24 RETP ;25 LODA 1 , 0 ;26 READ 0 , 0 ;27 OPAC ;28 LOD 1 , 0 ;29 LODA 1 , 4 ;30 CALL 1 , 2 ;31 LODA 1 , 4 ;32 WRITE 0 , 0 ;33 ENDP ;五 运行结果:我们用interpret.exe执行生成的obj文件,结果如下所示: Input : 51205! =120,说明程序运行完全正确。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1