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])
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])
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()
def p_seen_char_operand(p): """Seen_Char_Operand :""" expr.add_operand(p[-2])