Ejemplo n.º 1
0
def compiler():
    text = request.POST.get("text")
    
    interpreter = Interpreter(text)
    interpreter.compile()
    result = str(interpreter)
    return {'result':result}
Ejemplo n.º 2
0
    def test_if_example(self):
        example = """addi R1,R0,3
                     addi R2,R0,2
                     beq R1,R2,EQ
                     jmp NE
                     EQ:
                     addi R1,R0,5
                     jmp END
                     NE:
                     addi R1,R0,7
                     END:"""

        text = [
            "00100000000000010000000000000011 ; I1: addi R1,R0,3",
            "00100000000000100000000000000010 ; I2: addi R2,R0,2",
            "00010100001000100000000000001000 ; I3: beq R1,R2,8",
            "00001000000000000000000000011000 ; I4: jmp 24",
            "00100000000000010000000000000101 ; I5: addi R1,R0,5",
            "00001000000000000000000000011100 ; I6: jmp 28",
            "00100000000000010000000000000111 ; I7: addi R1,R0,7",
        ]

        interpreter = Interpreter(example)
        interpreter.compile()

        for compiled, correct in zip(interpreter.instructions, text):
            self.assertEqual(compiled, correct)
Ejemplo n.º 3
0
    def test_example(self):
        example = """addi R10,R0,100
                     sw R0,24(R0)
                     sw R0,28(R0)
                     LOOP:
                     lw R6,28(R0)
                     mul R7,R6,R6
                     lw R1,24(R0)
                     add R9,R1,R7
                     sw R9,24(R0)
                     addi R6,R6,1
                     sw R6,28(R0)
                     ble R6,R10,LOOP"""

        text = [
            "00100000000010100000000001100100 ; I1: addi R10,R0,100",
            "10101100000000000000000000011000 ; I2: sw R0,24(R0)",
            "10101100000000000000000000011100 ; I3: sw R0,28(R0)",
            "10001100000001100000000000011100 ; I4: lw R6,28(R0)",
            "00000000110001100011100000011000 ; I5: mul R7,R6,R6",
            "10001100000000010000000000011000 ; I6: lw R1,24(R0)",
            "00000000001001110100100000100000 ; I7: add R9,R1,R7",
            "10101100000010010000000000011000 ; I8: sw R9,24(R0)",
            "00100000110001100000000000000001 ; I9: addi R6,R6,1",
            "10101100000001100000000000011100 ; I10: sw R6,28(R0)",
            "00011100110010100000000000001100 ; I11: ble R6,R10,12",
        ]
        interpreter = Interpreter(example)
        interpreter.compile()

        for compiled, correct in zip(interpreter.instructions, text):
            self.assertEqual(compiled, correct)
Ejemplo n.º 4
0
 def test_jmp_forward(self):
     code = """jmp label
               label:"""
     interpreter = Interpreter(code)
     interpreter.compile()
     self.assertEqual(len(interpreter.instructions), 1)
     self.assertEqual(interpreter.instructions[0], "00001000000000000000000000000100 ; I1: jmp 4")
     self.assertEqual(interpreter.labels.get("label"), 4)
Ejemplo n.º 5
0
 def test_jmp_back(self):
     code = """label:
               jmp label"""
     interpreter = Interpreter(code)
     interpreter.compile()
     self.assertEqual(len(interpreter.instructions), 1)
     self.assertEqual(interpreter.instructions[0], "00001000000000000000000000000000 ; I1: jmp 0")
     self.assertEqual(interpreter.labels.get("label"), 0)
Ejemplo n.º 6
0
 def test_bne(self):
     code = """nop
               LOOP:
               bne R1,R2,LOOP"""
     interpreter = Interpreter(code)
     interpreter.compile()
     self.assertEqual(len(interpreter.instructions), 2)
     self.assertEqual(interpreter.instructions[1], "00010000001000100000000000000000 ; I2: bne R1,R2,0")
Ejemplo n.º 7
0
 def test_ignoring_label_to_string(self):
     """ Bytecode should not have label names."""
     code = """nop
               label:
               nop"""
     interpreter = Interpreter(code)
     interpreter.compile()
     self.assertFalse("label" in str(interpreter))
Ejemplo n.º 8
0
 def test_ble(self):
     code = """nop
               LOOP:
               nop
               ble R1,R2,LOOP"""
     interpreter = Interpreter(code)
     interpreter.compile()
     self.assertEqual(len(interpreter.instructions), 3)
     self.assertEqual(interpreter.instructions[2], "00011100001000100000000000000100 ; I3: ble R1,R2,4")
Ejemplo n.º 9
0
 def test_label(self):
     """A label is just to mark a point, it is ignored in bytecode generation."""
     code = "label:"
     interpreter = Interpreter(code)
     interpreter.compile()
     self.assertEqual(len(interpreter.instructions), 0)
Ejemplo n.º 10
0
 def test_sw(self):
     code = "sw R1,24(R0)"
     interpreter = Interpreter(code)
     interpreter.compile()
     self.assertEqual(interpreter.instructions[0], "10101100000000010000000000011000 ; I1: sw R1,24(R0)")
Ejemplo n.º 11
0
 def test_sub(self):
     code = "sub R9,R1,R7"
     interpreter = Interpreter(code)
     interpreter.compile()
     self.assertEqual(len(interpreter.instructions), 1)
     self.assertEqual(interpreter.instructions[0], "00000000001001110100100000100010 ; I1: sub R9,R1,R7")
Ejemplo n.º 12
0
 def test_nop(self):
     code = "nop"
     interpreter = Interpreter(code)
     interpreter.compile()
     self.assertEqual(interpreter.instructions[0], "00000000000000000000000000000000 ; I1: nop")
Ejemplo n.º 13
0
 def test_addi(self):
     code = "addi R6,R5,1"
     interpreter = Interpreter(code)
     interpreter.compile()
     self.assertEqual(len(interpreter.instructions), 1)
     self.assertEqual(interpreter.instructions[0], "00100000101001100000000000000001 ; I1: addi R6,R5,1")
Ejemplo n.º 14
0
 def test_uppercase_instruction(self):
     code = "ADD R9,R1,R7"
     interpreter = Interpreter(code)
     interpreter.compile()
     self.assertEqual(interpreter.instructions[0], "00000000001001110100100000100000 ; I1: add R9,R1,R7")