实验要求
考虑下面的三地址码的文法,其中<>括起来的为非终结符,粗体为终结符。
id = | id =
id | num
+ | – | * | /
goto label | if goto label
> | < | >= | <= | == | !=
halt
要求:生成给定的C语言程序中间代码,输出得到的三地址语句。
输入样例:
sum = 0;
x = 9;
while (sum <= 100) sum = sum + x;
if (sum > 101) sum = sum - 100;
输出样例:
100: sum = 0
101: x = 9
102: if sum <= 100 goto 104
103: goto 107
104: T1 = sum + x
105: sum = T1
106: goto 102
107: if sum > 101 goto 109
108: goto 111
109: T1 = sum - 100
110: sum = T1
111: halt
本实验将用一个解释器TACVM执行生成的中间代码。该解释器执行每一条三地址语句后输出变量的值。例如,执行上述中间代码的输出为:
D:\Teaching\Compiler\2021\TACVM\Debug>TACVM.exe d:\Teaching\Compiler\2021\TACVM\hello.tac
sum = 0
x = 9
T1 = 9
sum = 9
T1 = 18
sum = 18
T1 = 27
sum = 27
T1 = 36
sum = 36
T1 = 45
sum = 45
T1 = 54
sum = 54
T1 = 63
sum = 63
T1 = 72
sum = 72
T1 = 81
sum = 81
T1 = 90
sum = 90
T1 = 99
sum = 99
T1 = 108
sum = 108
T1 = 8
sum = 8
实验报告截图
运行截图
中间代码:
测试样例2(代码有错误):
下载地址
https://download.csdn.net/download/qq_45823731/86847962