Почему мой код вызывается внутри блока if, независимо от условия?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему мой код вызывается внутри блока if, независимо от условия?

Сообщение Anonymous »

Я создал язык программирования, но не могу исправить выполнение кода yacc внутри блока if:

Код: Выделить всё

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]

def p_expression_binop(p):
'''
expression : expression ADD expression
| expression SUB expression
| expression MUL expression
| expression DIV expression
'''
if p[2] == "+":
p[0] = p[1] + p[3]
elif p[2] == "-":
p[0] = p[1] - p[3]
elif p[2] == "*":
p[0] = p[1] * p[3]
elif p[2] == "/":
p[0] = p[1] / p[3]

def p_expression_group(p):
'''
expression : LP expression RP
| LP statement RP
'''
p[0] = p[2]

def p_scope_block(p):
'''
block : LCB statements RCB
'''
p[0] = p[2]
def c_print(arg):
arg = str(arg)
arg = arg.lstrip('"')
arg = arg.rstrip('"')
print(arg)
def p_print(p):
'''
statement : PRINT LP expression RP
'''
c_print(p[3])

def p_if_statement(p):
'''
statement : IF expression block
| IF expression block ELSE block
'''
if p[2]:
p[0] = p[3]
elif len(p) == 6:  # for 'else' part
p[0] = p[5]

def p_error(p):
print("Syntax error at '%s'" % p.value)

parser = yacc.yacc()
parser.parse(code)
Когда я выполняю оператор if, блок вызывается независимо от условия.


Подробнее здесь: https://stackoverflow.com/questions/791 ... -condition
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»