You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义编程语言中if块代码无视条件始终执行的问题排查求助

自定义编程语言中if块代码无视条件始终执行的问题排查求助

各位大佬好!我最近自己捣鼓了一门自定义编程语言,用lex和yacc做语法分析器,但碰到了一个棘手的问题——if块里的代码不管条件是真还是假,都会直接执行,完全不判断条件的结果。我翻来覆去检查了好多次,还是没找到问题所在,想请大家帮忙看看我的语法解析代码哪里出了差错。

目前我已经实现了基本的变量赋值、表达式比较,还有语句块的基础结构,但if语句的逻辑明显不对。比如测试时输入类似if (a == 5) { print("hello") }的代码,不管变量a的值是不是5,都会直接打印"hello",完全跳过了条件判断的步骤。我怀疑是语法规则的定义或者语义动作的处理有问题,但实在没头绪。

以下是我目前写的部分语法解析代码:

def t_error(t):
    print(f"unexpected token: {t.value}")
    sys.exit()

lexer = lex.lex()
variables = {}

def p_program(p):
    '''
    program : statements
    '''
    p[0] = p[1]

def p_statements(p):
    '''
    statements : statement
               | statement statements
    '''
    if len(p) == 2:
        p[0] = p[1]
    else:
        p[0] = p[1]

def p_expression_literals(p):
    '''
    expression : ID
              | INT
              | FLOAT
              | BOOL
              | STRING
    '''
    if p[1] in variables and isinstance(p[1], str):
        p[0] = variables[p[1]]
    else:
        p[0] = p[1]

def p_expression_cmp(p):
    '''
    expression : expression CMP expression
    '''
    if p[2] == "==":
        p[0] = p[1] == p[3]

def p_statement_assign(p):
    '''
    statement : ID EQ expression
    '''
    variables[p[1]] = p[3]

注:原代码中p_statement_assign的部分是截断的,我根据上下文补全了赋值的语义动作,应该是把表达式结果存入变量字典里。

麻烦各位帮忙看看,是不是哪里的逻辑没处理对,导致if条件被忽略了?

备注:内容来源于stack exchange,提问作者H1387XD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 12:48:06