#python #if-statement #ply
#питон #если-заявление #курсировать
Вопрос:
Я создаю язык программирования, используя слой Python. Но я не знаю, как сделать заявление «ЕСЛИ». Как мне это сделать?
Я попробовал это, но состояние выполняется, даже если выражение ложно:
def p_if_stmt(p): """stmt : IF expr THEN stmt elifs else_or_empty END""" if is_true(p[2]): p[0] = p[4] else: if p[5] != [None]: for i in p[5]: if i[0] == True: p[0] = i[1] return if p[6] != [None]: p[0] = p[6][1] return p[0] = '' def p_empty(p): """empty : """ def p_if_elifs(p): """elifs : elifs elif | empty""" if len(p) == 3: p[0] = p[1] [p[2]] else: p[0] = [None] def p_if_elif(p): """elif : ELIF expr THEN stmt | ELSE IF expr THEN stmt""" if(is_true(p[-3])): p[0] = [True, p[-1]] else: p[0] = [None] def p_if_else_or_empty(p): '''else_or_empty : ELSE stmt | empty''' if len(p) == 2: p[0] = [None] else: p[0] = [True, p[2]]
Комментарии:
1. Ваш код-это калькулятор, а не компилятор. Для компиляции вам нужно построить какое-то синтаксическое дерево, которое вы сможете обработать после завершения синтаксического анализа. Это не будет страдать от возникшей у вас проблемы, которая является результатом попытки немедленно выполнить программу. Немедленное выполнение работает для простого калькулятора, но он не может справиться с условными обозначениями, циклами, вызовами функций и т. Д. Если то, что вы используете в качестве руководства, недостаточно хорошо объясняет это, вам следует поискать более полный учебный ресурс.