Pointer Analysis
题目描述:
指针分析旨在确定在执行过程中可以通过程序中的特定指针变量访问哪些对象,这是静态程序分析的基本部分之一。现在,我们希望您对测试数据执行上下文无关的指针分析。
一个程序包含26个用小写字母表示的对象,每个对象也有26个用小写字母表示的成员变量(又称字段,它们可能指向某些对象的指针)。同时,在用大写字母指定的程序中有26个全局指针。
程序中有四种语句。我们使用[Variable]表示指针的名称,[Field]表示成员变量的名称,[Object]表示对象。
格式 | 例子 | 描述 | |
---|---|---|---|
分配 | [Variable] = [Object] | A = x | 指针A指向对象x(即x可通过A访问) |
分派 | [Variable] = [Variable] | A = B | 指针A可以指向可通过B访问的每个对象 |
储存 | [Variable].[Field] = [Variable] | A.f = B | 对于通过A可访问的每个对象o,o的成员变量f可以指向通过B可访问的每个对象 |
装入 | [Variable] = [Variable].[Field] | A = B.f | 对于通过B可访问的每个对象o,A可以指向通过o的成员变量f可访问的每个对象 |
操作顺序与输入顺序无关。 例如,在以下两个程序中,A和B都可以指向对象x和对象o。 这是因为,在现实世界中,很难准确预测语句的执行顺序和执行时间。
第一程序 | 第二程序 |
---|---|
A = o | B = A |
A = x | A = x |
B = A | A = o |
现在,要求您在由N个语句组成的给定程序上执行上下文无关的指针分析,并为每个指针输出它可以指向的对象。
输入描述:
输入的第一行包含一个整数 N ( 1 ≤ N ≤ 200 ) N(1 \le N \le 200) N(1≤N≤200),代表程序中的语句数。 等号前后只有一个空格。
接下来的N行中的每一行都包含一个语句。
输出描述:
输出应包含26行。
在第i行中,输出第i个指针的名称(第i个大写字母),后跟冒号“:”和一个空格,然后按字母顺序列出可通过该指针访问的对象。
样例:
样例输入1:
5
B.f = A
C = B.f
C = x
A = o
B = o
样例输出1:
A: o
B: o
C: ox
D:
E:
F:
G:
H:
I:
J:
K:
L:
M:
N:
O:
P:
Q:
R:
S:
T:
U:
V:
W:
X:
Y:
Z:
样例输入2:
4
A = o
B.f = A
C = B.f
C = g
样例输出2:
A: o
B:
C: g
D:
E:
F:
G:
H:
I:
J:
K:
L:
M:
N:
O:
P:
Q:
R:
S:
T:
U:
V:
W:
X:
Y:
Z:
样例输入3:
3
A = o
B = A
A = x
样例输出3:
A: ox
B: ox
C:
D:
E:
F:
G:
H:
I:
J:
K:
L:
M:
N:
O:
P:
Q:
R:
S:
T:
U:
V:
W:
X:
Y:
Z:
样例好长…</