Example #1
0
 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()  
Example #2
0
    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()