def translateFile(self, filename): """ Translates a single .vm file to a .asm file """ parser = Parser(filename) self.codeWriter.setFileName(os.path.basename(filename).replace('.vm', "")) while parser.hasMoreCommands(): parser.advance() command = parser.commandType() if command == parser.C_ARITHMETIC: self.codeWriter.writeArithmetic(parser.arg1()) elif command == parser.C_PUSH or command == parser.C_POP: self.codeWriter.writePushPop(parser.command[0], parser.arg1(), parser.arg2()) parser.close()
def translateFile(self, filename): """ Translates a single .vm file to a .asm file """ parser = Parser(filename) self.codeWriter.setFileName(os.path.basename(filename).replace(".vm", "")) while parser.hasMoreCommands(): parser.advance() command = parser.commandType() if command == parser.C_ARITHMETIC: self.codeWriter.writeArithmetic(parser.arg1()) elif command == parser.C_PUSH or command == parser.C_POP: self.codeWriter.writePushPop(parser.command[0], parser.arg1(), parser.arg2()) elif command == parser.C_LABEL: self.codeWriter.writeLabel(parser.arg1()) elif command == parser.C_GOTO: self.codeWriter.writeGoTo(parser.arg1()) elif command == parser.C_IF: self.codeWriter.writeIf(parser.arg1()) elif command == parser.C_FUNCTION: self.codeWriter.writeFunction(parser.arg1(), parser.arg2()) elif command == parser.C_CALL: self.codeWriter.writeCall(parser.arg1(), parser.arg2()) elif command == parser.C_RETURN: self.codeWriter.writeReturn() parser.close()