用到了几个不同变量

👁️ 3 人浏览 💬 0 人评论 ❤️ 添加收藏

按模型,[r=x+y]used_vars 里有几个变量?

贯穿本节的 IR 模型(判题机没 gcc,这是它的确定模型):程序是三地址码元组列表,每条 (dst, op, a, b)——opconst/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")])))
提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论