AST if-операторы оцениваются перед ply - PullRequest
0 голосов
/ 29 апреля 2020

Это продолжение предыдущего вопроса, который я написал. В настоящее время я пытаюсь реализовать 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])

оценивает заявления. Есть причина?

...