public override TypeReturn CheckSemantics(List <Scope> scope_list, List <Error> errors)
        {
            //chequeamos si el tipo del array ya se definio anteriormente
            TypeReturn typeOfArray = Utils.FindType(scope_list, Name);

            if (typeOfArray == null)
            {
                errors.Add(new Error(line, column, "El tipo " + this.Name + "no se ha delcarado todavia"));
            }

            //verificamos que la expresion de inicializacion devuelva algun valor(puede ser nil)
            TypeReturn typeOfInitial = Initial.CheckSemantics(scope_list, errors);

            if (typeOfInitial is ReturnNotValue || typeOfInitial == null) //pregunto por null porque si hubo un error devuelvo null
            {
                errors.Add(new Error(line, column, "La expresion de la inicializacion del array debe devolver algun valor"));
            }

            if (!(typeOfArray is ReturnArray)) //el tipo no es un array
            {
                errors.Add(new Error(line, column, "El tipo " + "'" + this.Name + "'" + " no es de tipo array"));
            }

            else
            {
                if (typeOfInitial is ReturnNil) //si es nil no pueden ser int los valores del array
                {
                    if ((typeOfArray as ReturnArray).Type_Of_Elements is ReturnInt)
                    {
                        errors.Add(new Error(line, column, "El array no permite 'nil' porque los valores del array son 'int'"));
                    }
                }
                else if (((ReturnArray)typeOfArray).Type_Of_Elements.ToString() != typeOfInitial.ToString())
                {
                    errors.Add(new Error(line, column, "Los elementos del array son de tipo '" + ((ReturnArray)typeOfArray).Type_Of_Elements.ToString() + "' y no de tipo '" + typeOfInitial.ToString() + "'"));
                }
            }

            //verificamos que el size es un entero
            TypeReturn typeOfSize = Size.CheckSemantics(scope_list, errors);

            if (!(typeOfSize is ReturnInt))
            {
                errors.Add(new Error(line, column, "La expresion del tamaƱo del array no devuelve un entero"));
            }
            Array = typeOfArray as ReturnArray;                                                      //para usarlo en la generacion de codigo
            return((typeOfArray != null) ? typeOfArray : new ReturnArray(this.Name, typeOfInitial)); //retorno el array
        }