我想将连词(与析取词相同)翻译为 TAC。
int a;
int b;
bool c = a > 1 && b < 5;
帖子如何用三地址代码表示二进制逻辑回答了我问题的前半部分。但它没有回答如何处理结果。我的解决方案如下:
if a <= 1 goto L1
_t1 = b < 5
goto L2
L1: _t1 = 0
L2: c = _t1
问题是,我读到(因为后来的优化问题),临时对象应仅限于基本块。 我的解决方案将违反此规则。
这是一个问题吗? 如何创建 TAC 而不发生此违规?
注: 我想独立处理 AST 分支。 因此,结果分配是在逻辑运算之后处理的,因此直接将结果分配给
c
是不可行的。
非常感谢。
是否可以在条件之外使用逻辑运算符? 如果是,那么你可以这样做:
_t0 = b < 5
_t1 = a > 1
c = _t0 & _t1
否则,如果不允许在条件之外使用逻辑运算符:
if a <= 1 goto False
if b > 5 goto False
c = 1
goto True
False:
c = 0
True: