def Parse(self, line): self.newAddress = None self.newTarget = None self.newCommand = None self.newJump = None self.newLabel = None parsed = self.oneline.parseString(line) if self.newAddress is not None: result = Assembler.AddressInstruction(self.newAddress) return result elif self.newCommand is not None: #print(self.newCommand.Expression) if self.newTarget is None: self.newTarget = Assembler.DestinationBits() if self.newJump is None: self.newJump = Assembler.JumpBits() result = Assembler.ControlInstruction(self.newCommand, self.newTarget, self.newJump) return result elif self.newTarget is not None: cmd = self.newTarget.ToPlainStr() self.newCommand = Assembler.InstructionBits(cmd) self.newTarget = Assembler.DestinationBits() if self.newJump is None: self.newJump = Assembler.JumpBits() result = Assembler.ControlInstruction(self.newCommand, self.newTarget, self.newJump) elif self.newLabel is not None: result = self.newLabel return result else: return None
def GotCommand(self, cmd): self.newCommand = cmd[0] #print(cmd) if self.newCommand not in Tables.comp_table: raise Exception("wrong compute expression") self.newCommand = Assembler.InstructionBits(self.newCommand)