python ply как сделать оператор if?

#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. Ваш код-это калькулятор, а не компилятор. Для компиляции вам нужно построить какое-то синтаксическое дерево, которое вы сможете обработать после завершения синтаксического анализа. Это не будет страдать от возникшей у вас проблемы, которая является результатом попытки немедленно выполнить программу. Немедленное выполнение работает для простого калькулятора, но он не может справиться с условными обозначениями, циклами, вызовами функций и т. Д. Если то, что вы используете в качестве руководства, недостаточно хорошо объясняет это, вам следует поискать более полный учебный ресурс.