Это продолжение предыдущего вопроса, который я написал. В настоящее время я пытаюсь реализовать If-заявления. По-прежнему кажется, что «операторы» оцениваются до выполнения условия. В настоящее время у меня есть:
class AssignStatement(Statement):
...
def eval(self,env):
value = self.aexp.eval(env)
env[self.name] = value
class IfStatement(Statement):
...
def eval(self, env):
condition_value = self.condition.eval(env)
if condition_value:
self.true_stmt.eval(env)
else:
if self.false_stmt:
self.false_stmt.eval(env)
...
def p_if_statement(p):
'if_statement : IF LPAREN condition RPAREN LCURLY statements RCURLY'
print(p[0:10])
def p_statements(p):
'''statements : statement
| statements statement'''
...
Я знаю, что оно незакончено, но у меня проблемы с поиском, что делать, если условие if ложно. Пример:
if(False){
a = 5;
}
Есть ли в любом случае код, который должен выполнить «условие», прежде чем решать «операторы». Заранее спасибо
Редактировать: Я обнаружил,
def p_if_statement(p):
'if_statement : IF LPAREN condition RPAREN LCURLY statement RCURLY'
print(p[0:10])
работает, но
def p_if_statement(p):
'if_statement : IF LPAREN condition RPAREN LCURLY statements RCURLY'
print(p[0:10])
оценивает заявления. Есть причина?