예제 #1
0
        Tipo variable_array(Tipo tipoArreglo)
        {
            if (peek("["))
            {
                match("[");
                //Expr sizeExpr = expr();
                int ind;

                bool parseo = Int32.TryParse(currentToken.Lexema,out ind);
                if (parseo == false)
                    throw new Exception("Error al parsear la cadena a entero currentToken:\"" + currentToken.Lexema + "\".");

                int sizeExpr = ind;
                match(TokenType.INTEGER_LITERAL);
                match("]");

                Tipo tipoArreglo2 = variable_array(tipoArreglo);

                Arreglo array_t = new Arreglo(tipoArreglo2, sizeExpr);
                //array_t.isReference = true;
                return array_t;
            } else
                return tipoArreglo;//null
        }
예제 #2
0
        private static ValorArreglo getValorArreglo(Arreglo array)
        {
            ValorArreglo v_array = new ValorArreglo();
            v_array.valor = new List<Valor>();

            if (array.tipoArreglo is Arreglo)
            {
                for (int x = 0; x < array.size; x++)
                {
                    ValorArreglo v_subarray = getValorArreglo((Arreglo)array.tipoArreglo);
                    v_array.valor.Add(v_subarray);
                }
            }
            else
            {
                for (int x = 0; x < array.size; x++)
                {
                    Valor v = getDefaultValue(array.tipoArreglo);
                    v_array.valor.Add(v);
                }
            }
            return v_array;
        }