自定义编程语言中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
相关产品推荐
相关产品推荐

