Skip to content

Latest commit

 

History

History
41 lines (38 loc) · 1.37 KB

log.md

File metadata and controls

41 lines (38 loc) · 1.37 KB

time: 2021/11/22
短路原则有感而发

    # 致,因前期的工程导致无法实现的《短路原则》
    # Expr : Expr OR Expr
    #      | Expr AND Expr
    # 在归约逻辑运算语句时,产生体中的两个Expr已经打印了中间代码,无法进行短路
    # 要想短路,要将几乎全部Expr运算语句改写
def p_Expr_3(p):   
    # 逻辑运算:短路原则
    '''
        Expr : Expr OR Expr
             | Expr AND Expr
    '''
    global temp, l_or_and
    temp_ = 'temp_' + str(temp)
    temp += 1
    ic = [temp_, int]
    if p[2] == '||':
        print('if ' + p[1][2][0] + ' == 0 Goto label_' + str(l_or_and))
        print(temp_ + ' = ' + p[1][2][0])
        print('Goto label_' + str(l_or_and + 1)) # 短路原则的体现

        print('label_' + str(l_or_and) + ':')
        l_or_and += 1
        print(temp_ + ' = ' + p[3][2][0])

        print('label_' + str(l_or_and) + ':')
        l_or_and += 1

    else:
        print('if ' + p[1][2][0] + ' != 0 Goto label_' + str(l_or_and))
        print(temp_ + ' = 0')  # 短路原则的体现
        print('Goto label_' + str(l_or_and + 1))
        print('label_' + str(l_or_and) + ':')
        l_or_and += 1
        print(temp_ + ' = ' + p[3][2][0] + ' != 0')  # 短路原则的体现
        print('label_' + str(l_or_and) + ':')
        l_or_and += 1
    p[0] = ['Expr', p[1:], ic]