def eval(self, st): ass_mode = True if not ass_mode: print(self.children[0].eval(st)) else: self.children[0].eval(st) Assembly.write_program(["PUSH EBX"]) Assembly.write_program(["CALL print"])
def eval(self, st): ass_mode = True if ass_mode: Assembly.write_program([f"LOOP_{self.identifier}:"]) self.children[0].eval(st) Assembly.write_program([f"CMP EBX, False"]) Assembly.write_program([f"JE EXIT_{self.identifier}"]) self.children[1].eval(st) Assembly.write_program([f"JMP LOOP_{self.identifier}"]) Assembly.write_program([f"EXIT_{self.identifier}:"]) else: while self.children[0].eval(st) == True: self.children[1].eval(st)
def eval(self, st): res = st.get_var(self.value) Assembly.write_program([f"MOV EBX, [{self.value}_{res[1]}]"]) return res[0]
def eval(self, st): res = st.set_var(self.value, self.children[0].eval(st)) Assembly.write_program([f"MOV [{self.value}_{res}], EBX"])
def eval(self, st): ass_mode = True if not ass_mode: if self.children[0].eval(st) == True: self.children[1].eval(st) else: if len(self.children) > 2: self.children[2].eval(st) else: if len(self.children) > 2: self.children[0].eval(st) Assembly.write_program([f"CMP EBX, False"]) Assembly.write_program([f"JE ELSE_{self.identifier}"]) self.children[1].eval(st) Assembly.write_program([f"JMP EXIT_{self.identifier}"]) Assembly.write_program([f"ELSE_{self.identifier}:"]) self.children[2].eval(st) Assembly.write_program([f"EXIT_{self.identifier}:"]) else: self.children[0].eval(st) Assembly.write_program([f"CMP EBX, False"]) Assembly.write_program([f"JE EXIT_{self.identifier}"]) self.children[1].eval(st) Assembly.write_program([f"EXIT_{self.identifier}:"])
def eval(self, st): Assembly.write_program([f"MOV EBX, {self.value}"]) return self.value