如何使用ply建立if条件?

2024-04-20 08:31:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用ply构建一个简单的编译器。我正确地构建了算术和逻辑表达式,但在运行if条件时出现了一些错误。例如,当我输入if(5>;2)作为程序的输入时,我得到了AttributeError: 'str' object has no attribute 'type' 我的代码示例:

def t_IF(t):
    r'if'
    return t.value
def p_statement_expr(t):
    '''statement : expression
                | comparison
                | if_statement'''
    print(t[1])
def p_IF(t):
    '''if_statement : IF LPARENTHESES comparison RPARENTHESES'''
    t[0] = t[3]
def p_expression_comparison(t):
    '''comparison : expression GTH expression
                | expression LTH expression
                | expression GTHOREQUAL expression
                | expression LTHOREQUAL expression
                | expression EQUALEQUAL expression
                | expression NOTEQUAL expression'''

    if t[2] == '>':
        if t[1] > t[3]:
            t[0] = True
        else:
            t[0] = False

    elif t[2] == '<':
        if t[1] < t[3]:
            t[0] = True
        else:
            t[0] = False

    elif t[2] == '>=':
        if t[1] >= t[3]:
            t[0] = True
        else:
            t[0] = False

    elif t[2] == '<=':
        if t[1] <= t[3]:
            t[0] = True
        else:
            t[0] = False

    elif t[2] == '==':
        if t[1] == t[3]:
            t[0] = True
        else:
            t[0] = False

    elif t[2] == '!=':
        if t[1] != t[3]:
            t[0] = True
        else:
            t[0] = False

任何帮助都是有价值的。多谢各位


Tags: falsetrueif编译器表达式def算术逻辑
1条回答
网友
1楼 · 发布于 2024-04-20 08:31:30

在Ply中,lexer函数必须始终返回令牌对象

但在这里,您将返回一个字符串:

def t_IF(t):
    r'if'
    return t.value

应该是:

def t_IF(t):
    r'if'
    return t

尽管您最好按照第4.3节末尾的Ply manual中的建议处理关键字

相关问题 更多 >