用到了几个不同变量
按模型,[r=x+y],used_vars 里有几个变量?
贯穿本节的 IR 模型(判题机没 gcc,这是它的确定模型):程序是三地址码元组列表,每条 (dst, op, a, b)——op ∈ const/copy/+/-/*,操作数 a/b 是整数(常量)或字符串(变量名)。
死代码消除 dce(prog, live):只留下「被别处用到」或「是活跃输出 live」的赋值;used_vars 收集被用到的变量,count_dead 数没人用的赋值。
def used_vars(prog):
"""所有被当作操作数用到的变量名。"""
s = set()
for (dst, op, a, b) in prog:
if isinstance(a, str):
s.add(a)
if isinstance(b, str):
s.add(b)
return s
def dce(prog, live):
"""死代码消除:只留下「被别处用到」或「是活跃输出 live」的赋值。"""
keep = used_vars(prog) | set(live)
return [ins for ins in prog if ins[0] in keep]
def count_dead(prog, live):
"""有几条是死代码(赋了值却没人用、也不是输出)。"""
keep = used_vars(prog) | set(live)
return sum(1 for ins in prog if ins[0] not in keep)
print(len(used_vars([("r", "+", "x", "y")])))
全部评论