Exemple #1
0
 def test1(self):
     textCode = "\n".join([
         "x = 0", "i = 0", "while i < 10:", "    i = i + 1",
         "    x = x + i", "print(x)"
     ])
     code = CP.parse(code=textCode)
     engine = Processor16Bits()
     cm = CM(engine, code)
     actionsList = cm.compile()
     asm = engine.getAsm(actionsList, False)
     good = "\n".join([
         "	MOVE r7, #0",
         "	STORE @x, r7",
         "	MOVE r7, #0",
         "	STORE @i, r7",
         "Lab2	LOAD r7, @i",
         "	MOVE r6, #10",
         "	CMP r7, r6",
         "	BLT Lab1",
         "	JMP Lab3",
         "Lab1	LOAD r7, @i",
         "	ADD r7, r7, #1",
         "	STORE @i, r7",
         "	LOAD r7, @x",
         "	LOAD r6, @i",
         "	ADD r7, r7, r6",
         "	STORE @x, r7",
         "	JMP Lab2",
         "Lab3	LOAD r7, @x",
         "	PRINT r7",
         "	HALT",
     ])
     self.assertEqual(asm, good)
Exemple #2
0
    def test2(self):
        varX = Variable('x')
        varY = Variable('y')

        affectationX = TransfertNode(
            4, varX, EP.buildExpression('-3*x+1'))  # mypy: ignore
        affectationY = TransfertNode(5, varY,
                                     EP.buildExpression('y+x'))  # mypy: ignore
        structuredList = [
            TransfertNode(1, varX, EP.buildExpression('0')),
            TransfertNode(2, varY, EP.buildExpression('0')),
            WhileNode(3, EP.buildExpression('x < 10 or y < 100'),
                      [affectationX, affectationY]),
            TransfertNode(6, None, EP.buildExpression('y'))
        ]

        engine = Processor12Bits()
        cm = CM(engine, structuredList)
        actionsList = cm.compile()
        strGlobal = "\n".join([str(item) for item in actionsList])

        good = "\n".join([
            "	@#0 r3 load", "	r3 @x store", "	@#0 r3 load", "	r3 @y store",
            "Lab2	@x r3 load", "	@#10 r2 load", "	r3 r2 <", "	Lab1 goto",
            "	@y r3 load", "	@#100 r2 load", "	r3 r2 <", "	Lab1 goto",
            "	Lab3 goto", "Lab1	@x r3 load", "	@#3 r2 load", "	r3 r2 r3 *",
            "	r3 r3 -", "	@#1 r2 load", "	r3 r2 r3 +", "	r3 @x store",
            "	@y r3 load", "	@x r2 load", "	r3 r2 r3 +", "	r3 @y store",
            "	Lab2 goto", "Lab3	@y r3 load", "	r3 print", "	halt"
        ])
        self.assertEqual(strGlobal, good)
Exemple #3
0
    def test1(self):
        textCode = "\n".join([
            "x = 0", "i = 0", "while i < 10:", "    i = i + 1",
            "    x = x + i", "print(x)"
        ])
        code = CP.parse(code=textCode)
        engine = Processor16Bits()
        cm = CM(engine, code)
        actionsList = cm.compile()
        addressList = engine._getAdresses(actionsList)
        result = "\n".join(
            sorted(["{} : {}".format(it, n) for it, n in addressList.items()]))

        good = "\n".join(
            ["@i : 21", "@x : 20", "Lab1 : 4", "Lab2 : 9", "Lab3 : 17"])
        self.assertEqual(result, good)
Exemple #4
0
 def test2(self):
     textCode = "\n".join([
         "x = 0", "i = 0", "while i < 10:", "    i = i + 1",
         "    x = x + i", "print(x)"
     ])
     code = CP.parse(code=textCode)
     engine = Processor12Bits()
     cm = CM(engine, code)
     fifos = cm.compile()
     binaryCode = "\n".join(engine.getBinary(fifos))
     good = "\n".join([
         "100110010101", "101001011011", "100110010101", "101001011111",
         "100110010111", "100100011000", "111101011110", "001100001001",
         "000100010010", "100110010111", "100100011001", "111110001110",
         "101001011111", "100110010110", "100100010111", "111110001110",
         "101001011011", "000100000100", "100110010110", "010000000011",
         "000000000000", "000000000000", "000000000000", "000000000000",
         "000000001010", "000000000001"
     ])
     self.assertEqual(binaryCode, good)
Exemple #5
0
 def test3(self):
     textCode = "\n".join([
         "x = 0", "i = 0", "while i < 10:", "    i = i + 1",
         "    x = x + i", "print(x)"
     ])
     code = CP.parse(code=textCode)
     engine = Processor12Bits()
     cm = CM(engine, code)
     actionsList = cm.compile()
     asm = engine.getAsm(actionsList, True)
     good = "\n".join([
         "	LOAD r3, @#0", "	STORE @x, r3", "	LOAD r3, @#0", "	STORE @i, r3",
         "Lab2	LOAD r3, @i", "	LOAD r2, @#10", "	CMP r3, r2", "	BLT Lab1",
         "	JMP Lab3", "Lab1	LOAD r3, @i", "	LOAD r2, @#1",
         "	ADD r3, r3, r2", "	STORE @i, r3", "	LOAD r3, @x", "	LOAD r2, @i",
         "	ADD r3, r3, r2", "	STORE @x, r3", "	JMP Lab2",
         "Lab3	LOAD r3, @x", "	PRINT r3", "	HALT", "@#0	0", "@x	0", "@i	0",
         "@#10	10", "@#1	1"
     ])
     self.assertEqual(asm, good)
Exemple #6
0
    def test3(self):
        code = CP.parse(filename="example2.code")
        engine = Processor16Bits()
        cm = CM(engine, code)
        actionsList = cm.compile()
        strGlobal = "\n".join([str(item) for item in actionsList])

        good = "\n".join([
            "	#0 r7 move", "	r7 @s store", "	#0 r7 move", "	r7 @i store",
            "	@m input", "Lab2	@i r7 load", "	@m r6 load", "	r7 r6 <",
            "	Lab1 goto", "	Lab3 goto", "Lab1	@i r7 load", "	r7 #2 r7 %",
            "	#0 r6 move", "	r7 r6 ==", "	Lab4 goto", "	Lab5 goto",
            "Lab4	@s r7 load", "	@i r6 load", "	r7 r6 r7 +", "	r7 @s store",
            "	@s r7 load", "	#10 r6 move", "	r7 r6 <", "	Lab6 goto",
            "	Lab5 goto", "Lab6	@s r7 load", "	r7 #2 r7 *", "	r7 @y store",
            "	@y r7 load", "	r7 print", "Lab5	@i r7 load", "	r7 #3 r7 +",
            "	r7 @i store", "	Lab2 goto", "Lab3	@s r7 load", "	r7 print",
            "	halt"
        ])
        self.assertEqual(strGlobal, good)