コード例 #1
0
ファイル: execute.py プロジェクト: pirxus/VUT-FIT-IPP-project
    def process_instruction(self):
        opcode = self.instr.attrib['opcode']
        try:
            if opcode == 'CREATEFRAME':
                op.CREATEFRAME(self)
            elif opcode == 'PUSHFRAME':
                op.PUSHFRAME(self)
            elif opcode == 'POPFRAME':
                op.POPFRAME(self)
            elif opcode == 'DEFVAR':
                op.DEFVAR(self)
            elif opcode == 'MOVE':
                op.MOVE(self)
            elif opcode == 'CALL':
                op.CALL(self); return
            elif opcode == 'RETURN':
                op.RETURN(self); return
            #####################
            elif opcode == 'PUSHS':
                op.PUSHS(self)
            elif opcode == 'POPS':
                op.POPS(self)
            elif opcode == 'CLEARS':
                op.CLEARS(self)
            #####################
            elif opcode == 'ADD':
                op.ADD(self)
            elif opcode == 'ADDS':
                op.ADDS(self)
            elif opcode == 'SUB':
                op.SUB(self)
            elif opcode == 'SUBS':
                op.SUBS(self)
            elif opcode == 'MUL':
                op.MUL(self)
            elif opcode == 'MULS':
                op.MULS(self)
            elif opcode == 'IDIV':
                op.IDIV(self)
            elif opcode == 'IDIVS':
                op.IDIVS(self)
            elif opcode == 'DIV':
                op.DIV(self)
            elif opcode == 'DIVS':
                op.DIV(self)
            elif opcode == 'LT':
                op.LT(self)
            elif opcode == 'LTS':
                op.LTS(self)
            elif opcode == 'GT':
                op.GT(self)
            elif opcode == 'GTS':
                op.GTS(self)
            elif opcode == 'EQ':
                op.EQ(self)
            elif opcode == 'EQS':
                op.EQS(self)
            elif opcode == 'AND':
                op.AND(self)
            elif opcode == 'ANDS':
                op.ANDS(self)
            elif opcode == 'OR':
                op.OR(self)
            elif opcode == 'ORS':
                op.ORS(self)
            elif opcode == 'NOT':
                op.NOT(self)
            elif opcode == 'NOTS':
                op.NOTS(self)
            elif opcode == 'INT2CHAR':
                op.INT2CHAR(self)
            elif opcode == 'INT2CHARS':
                op.INT2CHARS(self)
            elif opcode == 'STRI2INT':
                op.STRI2INT(self)
            elif opcode == 'STRI2INTS':
                op.STRI2INTS(self)
            elif opcode == 'INT2FLOAT':
                op.INT2FLOAT(self)
            elif opcode == 'FLOAT2INT':
                op.FLOAT2INT(self)
            elif opcode == 'INT2FLOATS':
                op.INT2FLOAT(self)
            elif opcode == 'FLOAT2INTS':
                op.FLOAT2INT(self)
            #####################
            elif opcode == 'READ':
                op.READ(self)
            elif opcode == 'WRITE':
                op.WRITE(self)
            #####################
            elif opcode == 'CONCAT':
                op.CONCAT(self)
            elif opcode == 'STRLEN':
                op.STRLEN(self)
            elif opcode == 'GETCHAR':
                op.GETCHAR(self)
            elif opcode == 'SETCHAR':
                op.SETCHAR(self)
            #####################
            elif opcode == 'TYPE':
                op.TYPE(self)
            #####################
            elif opcode == 'LABEL':
                op.LABEL()
            elif opcode == 'JUMP':
                op.JUMP(self); return
            elif opcode == 'JUMPIFEQ':
                if op.JUMPIFEQ(self): return
            elif opcode == 'JUMPIFEQS':
                if op.JUMPIFEQS(self): return
            elif opcode == 'JUMPIFNEQ':
                if op.JUMPIFNEQ(self): return
            elif opcode == 'JUMPIFNEQS':
                if op.JUMPIFNEQS(self): return
            elif opcode == 'EXIT':
                retcode = op.EXIT(self); sys.exit(retcode)
            #####################
            elif opcode == 'DPRINT':
                op.DPRINT(self)
            elif opcode == 'BREAK':
                op.BREAK(self)

            else:
                raise Exception(32, 'Unknown opcode') # this should not happen...

        except Exception as e:
            raise e
        self.ip += 1 # increment the instruction pointer