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 GotTarget(self, trg): self.newTarget = trg[0] #print(trg) if self.newTarget not in Tables.dest_table: raise Exception("wrong target expression") self.newTarget = Assembler.DestinationBits("A" in trg[0], "D" in trg[0], "M" in trg[0])