Ejemplo n.º 1
0
def p_seen_operand_1(p):
    """Seen_Operand1 : """
    if sem.is_declared(p[-2]):
        var = sem.get_variable(p[-2])
        if state.arr_current_dim == 0 or "[]" not in var[1][0]:
            expr.add_operand(sem.get_variable(p[-2]))
            state.assign_list.append(var[1][0])
Ejemplo n.º 2
0
def p_seen_operand(p):
    """Seen_Operand : """
    if sem.is_declared(p[-1]):
        var = sem.get_variable(p[-1])
        if state.arr_current_dim == 0 or "[]" not in var[1][0]:
            expr.add_operand(var)
            if not state.arr_parsing and not state.func_parsing:
                state.assign_list.append(var[1][0])
Ejemplo n.º 3
0
def p_update_offset(p):
    """Update_Offset : """
    var = sem.get_variable(p[-2])
    type = var[1][0]
    expr.add_operator("#")
    for x in range(state.arr_current_dim - 1):
        expr.add_operator("+")
        expr.generate_quad(2)  # Generates quads to sum all the indices
    if type[0] == "i" or type[0] == "f":
        sem.fill_symbol_table_constant(4, "int", 4)
        expr.add_operand(sem.get_variable(4))
        expr.add_operator("*")
        expr.generate_quad(1)
    expr.pop_operator()
Ejemplo n.º 4
0
def p_seen_char_operand(p):
    """Seen_Char_Operand :"""
    expr.add_operand(p[-2])