コード例 #1
0
 def test_should_create_valid_constant_0(self):
     valid = """
     SUB 0
     """
     assembly = create_constant_number(0)
     formatted_valid = remove_whitespace(valid)
     formatted_assembly = remove_whitespace(assembly)
     assert formatted_assembly == formatted_valid
コード例 #2
0
def execute_and_load_binary_expression(codegen, expr):
    code = ""
    left = expr.left
    right = expr.right
    operator = expr.type
    if left.is_leaf() and right.is_leaf():
        code += compute_and_store_constant_in_memory(left.value, right.value,
                                                     operator)
        return code
    else:
        if left.is_leaf():
            lval = left.value
            code += create_constant_number(lval, storage_addr=4)
            code += store_variable_in_reg(codegen, right.value, storage_addr=5)
        if right.is_leaf():
            rval = right.value
            code += create_constant_number(rval, storage_addr=5)
            code += store_variable_in_reg(codegen, left.value, storage_addr=4)
        if not left.is_leaf() and not right.is_leaf():
            code += store_variable_in_reg(codegen, left.value, 4)
            code += store_variable_in_reg(codegen, right.value, 5)
        code += execute_operation(codegen, operator)
        return code
コード例 #3
0
def compute_and_store_constant_in_memory(l, r, operator):
    result = 0
    if operator == 'PLUS':
        result = l + r
    if operator == 'MINUS':
        result = l - r
    if operator == 'TIMES':
        result = l * r
    if operator == 'DIV':
        if r == 0:
            result = 0
        else:
            result = math.floor(l / r)
    if operator == 'MOD':
        if r == 0:
            result = 0
        else:
            result = l - (r * math.floor(l / r))
    return create_constant_number(result)
コード例 #4
0
 def test_should_create_valid_constant_negative_156(self):
     valid = """
     SUB 0
     DEC
     ADD 0
     ADD 0
     ADD 0
     DEC
     ADD 0
     DEC
     ADD 0
     DEC
     ADD 0
     ADD 0
     """
     assembly = create_constant_number(-156)
     formatted_valid = remove_whitespace(valid)
     formatted_assembly = remove_whitespace(assembly)
     assert formatted_assembly == formatted_valid
コード例 #5
0
def store_array_start_index_addr_in_two(array_start_addr):
    return create_constant_number(array_start_addr, storage_addr=2)
コード例 #6
0
def store_array_start_index_in_one(start_index):
    return create_constant_number(start_index, storage_addr=1)
コード例 #7
0
 def handle_constant_case(node):
     code = ""
     code += create_constant_number(node.value.value)
     code += "PUT\n"
     return code
コード例 #8
0
 def test_should_create_valid_constant_2_to_minus_62(self):
     valid = "SUB 0" + "DEC" + ("ADD 0 " * 62)
     assembly = create_constant_number(-2 ** 62)
     formatted_valid = remove_whitespace(valid)
     formatted_assembly = remove_whitespace(assembly)
     assert formatted_assembly == formatted_valid