def p_main(p): 
    '''main : MAIN firstmain '(' ')' firstfuncquad block ''' 
    global paramsTemp
    global actualFunc
    if func_is_repeated(p[3]):
        print errors['REPEATED_DECLARATION_FUNC']
        exit(1)
    else:
        actualFunc=p[1]
        add_to_func(p[1], 'None', paramsTemp, -1)
        paramsTemp = []
def p_firstfuncquad(p):
    '''firstfuncquad : '''
    global funcquad
    funcquad= len(quadruplo)
    if firstMain!= 1:
        global paramsTemp
        global tipoActualReturn
        global actualFunc
        #global funcquad
        if func_is_repeated(p[-4]):
            print errors['REPEATED_DECLARATION_FUNC']
            exit(1)
        else:
            actualFunc=p[-4]
            tipo=tipoActualReturn.pop()
            add_to_func(p[-4], tipo, paramsTemp,funcquad)
            paramsTemp = []
def p_idp(p): 
    '''idp : '[' sexp ']' 
            | '(' idpp ')'
            | empty''' 
    global pilao
    global funcParams 
    elmt= p[1]
    if elmt == '[':
        aux=pilao.pop()
        if(aux[1] != 'int'): #validar si la superexp es id para marcar error
            print errors['TYPE_MISMATCH']
            exit(-1)
        res1=validate_arr(p[-1]) #por ser sexp se hace pop
        quadruplo.append(['ver', aux[0],0,int(res1[2])-1])
        res =mem_temps.add_type('int',1)
        quadruplo.append(['+', aux[0],res1[0],res])
        pilao.append([[res], res1[1]]) # el quadruplo cuando es arreglo lo ponemos diferente para identificar que hay que checar onruntime
    elif elmt == '(':
        if func_is_repeated(p[-1]):
            tempparams=[]
            for x in range(0,funcParams):
                tempparams.append(pilao.pop())
            if validate_func_params(p[-1],deepcopy(tempparams)):
                quadruplo.append(['era', get_func_vars(p[-1]),p[-1],'-1'])
                for x in tempparams:
                    quadruplo.append(['param',x[0],'-1', funcParams ])
                    funcParams= funcParams-1
                quadruplo.append(['gosub', get_func_quad(p[-1]),p[-1],'-1'])
                if get_func_return_type(p[-1]) != 'void':
                    res =mem_temps.add_type(get_func_return_type(p[-1]),1)
                    quadruplo.append(['=', p[-1],'-1',res])
                    pilao.append([res, get_func_return_type(p[-1]) ])
                pp.pprint(pilao)
                pp.pprint(constant_dict)
            else:
                print errors['PARAMS_FUNC_BADQUANT']
                exit(-1)

        else: 
            print errors['NOT_DECLARED_FUNCTION']
            exit(-1)
    else:
        res=get_var(p[-1])
        pilao.append([res[0], res[1]])