2020暑期牛客多校训练营第七场(J)Pointer Analysis(模拟,指针,向量)

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(1N200),代表程序中的语句数。 等号前后只有一个空格。
接下来的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:

样例好长…</

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值