正在加载图片...
版权所有南京大学计算机科学与技术系许畅等2022春季版 6 else if (n 0)write (-1); 7 else write(0); 8 return 0; 91 输出: 这段程序读入一个整数n,然后计算并输出符号函数sg(n)。它所对应的中间代码可以是 这样的: 1 FUNCTION main 2 READ t1 31:=t1 4 t2:=#0 5 IF v1 t2 GOTO label1 6 GOTO label2 7 LABEL labell 8t3:=#1 9 WRITE t3 10 GOTO label3 11 LABEL label2 12t4:=#0 13 IF v1 t4 GOTO label4 14 GOTO label5 15 LABEL label4 16 t5:=#1 17t6:=#0-t5 18 WRITE t6 19 GOTO label6 20 LABEL label5 21 t7:=#0 22 WRITE t7 23 LABEL label6: 24 LABEL label3 25七8:=#0 26 RETURN t8 需要注意的是,虽然样例输出中使用的变量遵循着字母后跟一个数字(如t1、V1等)的方 式,标号也遵循着label)后跟一个数字的方式,但这并不是强制要求的。也就是说,你的程序 输出完全可以使用其它符合变量名定义的方式而不会影响虚拟机小程序的运行。 可以发现,这段中间代码中存在很多可以优化的地方。首先,0这个常数我们将其赋给了 t2、4、t7、8这四个临时变量,实际上赋值一次就可以了。其次,对于t6的赋值我们可以直 接写成t6=#-1而不必多进行一次减法运算。另外,程序中的标号也有些冗余。如果你的程序 足够“聪明”,可能会将上述中间代码优化成这样: 1 FUNCTION main 2 READ t1 3v1:=t1 4 t2:=#0 5 IF v1 t2 GOTO labell 6 IF v1 t2 GOTO label2 7 WRITE t2 8 GOTO label3 9 LABEL labell 10t3:=#1 11 WRITE t3 12 GOTO label3 74版权所有 南京大学计算机科学与技术系 许畅等 2022春季版 74 6 else if (n < 0) write (-1); 7 else write(0); 8 return 0; 9 } 输出: 这段程序读入一个整数n,然后计算并输出符号函数sgn(n)。它所对应的中间代码可以是 这样的: 1 FUNCTION main : 2 READ t1 3 v1 := t1 4 t2 := #0 5 IF v1 > t2 GOTO label1 6 GOTO label2 7 LABEL label1 : 8 t3 := #1 9 WRITE t3 10 GOTO label3 11 LABEL label2 : 12 t4 := #0 13 IF v1 < t4 GOTO label4 14 GOTO label5 15 LABEL label4 : 16 t5 := #1 17 t6 := #0 - t5 18 WRITE t6 19 GOTO label6 20 LABEL label5 : 21 t7 := #0 22 WRITE t7 23 LABEL label6 : 24 LABEL label3 : 25 t8 := #0 26 RETURN t8 需要注意的是,虽然样例输出中使用的变量遵循着字母后跟一个数字(如t1、v1等)的方 式,标号也遵循着label后跟一个数字的方式,但这并不是强制要求的。也就是说,你的程序 输出完全可以使用其它符合变量名定义的方式而不会影响虚拟机小程序的运行。 可以发现,这段中间代码中存在很多可以优化的地方。首先,0这个常数我们将其赋给了 t2、t4、t7、t8这四个临时变量,实际上赋值一次就可以了。其次,对于t6的赋值我们可以直 接写成t6 := #−1而不必多进行一次减法运算。另外,程序中的标号也有些冗余。如果你的程序 足够“聪明”,可能会将上述中间代码优化成这样: 1 FUNCTION main : 2 READ t1 3 v1 := t1 4 t2 := #0 5 IF v1 > t2 GOTO label1 6 IF v1 < t2 GOTO label2 7 WRITE t2 8 GOTO label3 9 LABEL label1 : 10 t3 := #1 11 WRITE t3 12 GOTO label3
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有