Пример #1
0
 public Token(TokenSQL token, String lexema, int fila, int columna)
 {
     this.token   = token;
     this.lexema  = lexema;
     this.fila    = fila;
     this.columna = columna;
 }
Пример #2
0
        /// <summary>
        /// Actualizar un o variso campos
        /// </summary>
        /// <param name="nombreCol"></param>
        /// <param name="op"></param>
        /// <param name="Valor"></param>
        /// <param name="ColUpdate"></param>
        /// <param name="valorUpdate"></param>
        public void updateDatos(String nombreCol, TokenSQL op, Token valor, List <NodoActualizar> lista)
        {   //Actualiar datos
            List <int> indexs = new List <int>();
            int        indexUpdate;
            int        indexCol = getIdColumna(nombreCol);


            Console.WriteLine("Condición actualizar: [" + indexCol + "] " + nombreCol + " " + op + " " + valor.getLexema());

            if (indexCol >= 0)
            {
                for (int i = 0; i < registros.Count(); i++)
                {
                    if (registros[i].condicion(indexCol, op, valor))
                    {
                        indexs.Add(i);
                    }
                }

                //Actualizar Registro
                foreach (NodoActualizar dato in lista)
                {
                    indexUpdate = getIdColumna(dato.columna);
                    if (indexUpdate >= 0)
                    {
                        foreach (int i in indexs)
                        {
                            Console.WriteLine("Actualizar registro id: " + i);
                            registros[i].actualizar(indexUpdate, dato.valor);
                        }
                    }
                }
            }
        }
Пример #3
0
        /// <summary>
        /// Eliminar una tupla por medio de un condición.
        /// </summary>
        /// <param name="nombreCol"></param>
        /// <param name="op"></param>
        /// <param name="valor"></param>
        public void deleteTupla(String nombreCol, TokenSQL op, Token valor)
        {   //Eliminar tupla por id
            List <int> indexs = new List <int>();

            int indexCol = getIdColumna(nombreCol);

            Console.WriteLine("Eliminar: [" + indexCol + "] " + nombreCol + " " + op + " " + valor.getLexema());

            if (indexCol >= 0)
            {
                for (int i = 0; i < registros.Count(); i++)
                {
                    if (registros[i].condicion(indexCol, op, valor))
                    {
                        indexs.Add(i);
                    }
                }

                //Eliminar registro
                int eliminados = 0;
                foreach (int i in indexs)
                {
                    Console.WriteLine("Eliminando index: " + i);
                    registros.RemoveAt(i - eliminados);
                    eliminados++;
                }
            }
        }
Пример #4
0
        private Color colorPiker(TokenSQL t)
        {
            switch (t)
            {
            case TokenSQL.PR_TABLA:
                return(Color.DarkOrchid);

            case TokenSQL.PR_INSERTAR:
                return(Color.DarkOrchid);

            case TokenSQL.PR_ELIMINAR:
                return(Color.DarkOrchid);

            case TokenSQL.PR_ACTUALIZAR:
                return(Color.DarkOrchid);

            case TokenSQL.FECHA:
                return(Color.Peru);

            case TokenSQL.ENTERO:
                return(Color.SteelBlue);

            case TokenSQL.FLOTANTE:
                return(Color.SteelBlue);

            case TokenSQL.CADENA:
                return(Color.Teal);

            case TokenSQL.COMENTARIO_BLOQUE:
                return(Color.Gray);

            case TokenSQL.COMENTARIO_LINEA:
                return(Color.Gray);

            case TokenSQL.ID:
                return(Color.Sienna);

            case TokenSQL.CL_IGUAL:
                return(Color.Firebrick);

            case TokenSQL.CL_DIFERENTE:
                return(Color.Firebrick);

            case TokenSQL.CL_MAYOR_IGUAL:
                return(Color.Firebrick);

            case TokenSQL.CL_MENOR_IGUAL:
                return(Color.Firebrick);

            case TokenSQL.CL_MAYOR:
                return(Color.Firebrick);

            case TokenSQL.CL_MENOR:
                return(Color.Firebrick);

            default:
                return(Color.White);
            }
        }
Пример #5
0
        /// <summary>
        /// Evaluea condición
        /// </summary>
        /// <param name="indexCol"></param>
        /// <param name="op"></param>
        /// <param name="valor"></param>
        /// <returns>True = condición correcta | False = condición incorrecta</returns>
        public bool condicion(int indexCol, TokenSQL op, Token valor)
        {
            Token dato = datos[indexCol];

            if (dato.getToken() == TokenSQL.ENTERO || dato.getToken() == TokenSQL.FLOTANTE)
            {
                double x = 0;
                double y = 0;
                try
                {
                    x = Convert.ToDouble(dato.getLexema());
                    y = Convert.ToDouble(valor.getLexema());
                }
                catch (Exception e)
                {
                    Console.WriteLine("Error: " + e);
                }

                switch (op)
                {
                case TokenSQL.CL_IGUAL:     // =
                    return(x == y);

                case TokenSQL.CL_DIFERENTE:     //!=
                    return(x != y);

                case TokenSQL.CL_MAYOR:
                    return(x > y);

                case TokenSQL.CL_MAYOR_IGUAL:
                    return(x >= y);

                case TokenSQL.CL_MENOR:
                    return(x < y);

                case TokenSQL.CL_MENOR_IGUAL:
                    return(x <= y);

                default:
                    return(false);
                }
            }
            else
            {
                String x = dato.getLexema();
                String y = valor.getLexema();
                switch (op)
                {
                case TokenSQL.CL_IGUAL:     // =
                    return(x.Equals(y));

                case TokenSQL.CL_DIFERENTE:     //!=
                    return(!(x.Equals(y)));

                default:
                    return(false);
                }
            }
        }
Пример #6
0
        public NodoAST(int id, String noTerminal)
        {
            this.tipo  = TokenSQL.NO_TERMINAL;
            this.valor = noTerminal;
            hijos      = new List <NodoAST>();

            setId(id, noTerminal);
        }
Пример #7
0
        public NodoAST(Token token)
        {
            this.token = token;
            this.tipo  = token.getToken();
            this.valor = token.getLexema();
            hijos      = new List <NodoAST>();

            setId(token);
        }
Пример #8
0
 private void agregarToken(TokenSQL token, String lexema, int fila, int columna)
 {
     if (token == TokenSQL.ID)
     {
         //Verificar si es una palabra reservada
         tokens.Add(new Token(validarToken(lexema), lexema, fila, columna));
     }
     else
     {
         tokens.Add(new Token(token, lexema, fila, columna));
     }
     Console.WriteLine("TempFila: " + tempFila + ", TempColumna: " + tempColumna);
 }
Пример #9
0
        private void match(TokenSQL terminal, NodoAST raiz)
        {
            /* si preanalisis = terminal
             * entonces preanalisis = siguiente toekn
             * sino error sintactico
             */
            Console.WriteLine("Match: " + terminal + " == " + preanalisis.getToken());
            if (preanalisis.getToken() == terminal)
            {
                raiz.insertarHijo(new NodoAST(preanalisis)); // Insertamos token en el árbol AST
                preanalisis = getToken();
                index++;
            }
            else
            {
                //Error

                insertarError("un token[" + terminal.ToString() + "]", preanalisis);
                panico();
            }
        }
Пример #10
0
 public void setTipo(TokenSQL tipo)
 {
     this.tipo = tipo;
 }
Пример #11
0
        private void ejecutar(int e, TokenSQL tipo, Token token)
        {
            switch (e)
            {
            case 0:     //Estado Raiz
                break;

            case 10:     //CREAR TABLA ID ( L_CAMPOS ) ;
                switch (tipo)
                {
                case TokenSQL.ID:         //Nombre de la tabla
                    Console.WriteLine("Nombre tabla: " + token.getLexema());
                    tabla = new TablaSQL(token.getLexema());
                    break;

                case TokenSQL.CL_FL:         //Fin de linea (;)
                    Console.WriteLine("Agregando tabla " + tabla.getNombre() + " a la memoria...");
                    listaTablas.Add(tabla);
                    break;

                case TokenSQL.CL_PARENTESIS_1:         //Parentesis (
                    estado = 11;
                    break;

                default:
                    Console.WriteLine("[" + e + "] Token: " + token.getLexema());
                    break;
                }
                break;

            case 11:     //ID TIPO_DATO
                switch (tipo)
                {
                case TokenSQL.ID:         //Nombre de columna
                    Console.WriteLine("Nombre columna: " + token.getLexema());
                    tabla.addColumna(token.getLexema());
                    break;

                case TokenSQL.CL_PARENTESIS_2:         //Parentesis )
                    estado = 10;
                    break;

                default:
                    Console.WriteLine("[" + e + "] Token: " + token.getLexema());
                    break;
                }
                break;

            case 20:     //INSERTAR EN ID VALORES ( L_VALORES ) ;
                switch (tipo)
                {
                case TokenSQL.ID:         //Nombre tabla
                    nombreTabla = token.getLexema();
                    Console.WriteLine("Insertar en: " + nombreTabla);
                    break;

                case TokenSQL.CL_PARENTESIS_1:         //Parentesis (
                    tupla  = new List <Token>();
                    estado = 22;
                    break;

                case TokenSQL.CL_FL:         //Fin de linea (;)
                    indexTabla = buscarTabla(nombreTabla);
                    if (encontrado)
                    {
                        listaTablas[indexTabla].addTupla(tupla);
                    }
                    Console.WriteLine("Index de tabla: " + indexTabla);
                    break;

                default:
                    Console.WriteLine("[" + e + "] Token: " + token.getLexema());
                    break;
                }
                break;

            case 22:     //VALOR COMA
                switch (tipo)
                {
                case TokenSQL.ENTERO:
                    Console.WriteLine("Dato: " + token.getLexema());
                    tupla.Add(token);
                    break;

                case TokenSQL.CADENA:
                    Console.WriteLine("Dato: " + token.getLexema());
                    tupla.Add(token);
                    break;

                case TokenSQL.FECHA:
                    Console.WriteLine("Dato: " + token.getLexema());
                    tupla.Add(token);
                    break;

                case TokenSQL.FLOTANTE:
                    Console.WriteLine("Dato: " + token.getLexema());
                    tupla.Add(token);
                    break;

                case TokenSQL.CL_PARENTESIS_2:         //Parentesis )
                    estado = 20;
                    break;

                default:
                    Console.WriteLine("[" + e + "] Token: " + token.getLexema());
                    break;
                }
                break;

            case 30:    // ELIMINAR DE ID;| ELIMINAR DE ID DONDE ID = VALOR;
                switch (tipo)
                {
                case TokenSQL.ID:         //Nombre tabla
                    nombreTabla    = token.getLexema();
                    condicionDonde = false;
                    break;

                case TokenSQL.PR_DONDE:         //PR DONDE
                    estado         = 31;
                    condicionDonde = true;
                    break;

                case TokenSQL.CL_FL:         //Fin de linea (;)
                    //Ejecutar acción a eliminar
                    Console.WriteLine("Eliminar de: " + nombreTabla);
                    eliminarEnTabla();
                    break;

                default:
                    Console.WriteLine("[" + e + "] Token: " + token.getLexema());
                    break;
                }
                break;

            case 31:     // Condicion DONDE - ELIMINAR: DONDE ID OP VALOR
                switch (tipo)
                {
                case TokenSQL.ID:
                    condicionColumna1 = token.getLexema();
                    Console.WriteLine("Columna condición: " + condicionColumna1);
                    break;

                case TokenSQL.CL_IGUAL:         // =
                    condicionComparador1 = tipo;
                    break;

                case TokenSQL.CL_DIFERENTE:         // !=
                    condicionComparador1 = tipo;
                    break;

                case TokenSQL.CL_MAYOR:         // >
                    condicionComparador1 = tipo;
                    break;

                case TokenSQL.CL_MAYOR_IGUAL:         // >=
                    condicionComparador1 = tipo;
                    break;

                case TokenSQL.CL_MENOR:         // <
                    condicionComparador1 = tipo;
                    break;

                case TokenSQL.CL_MENOR_IGUAL:         // <=
                    condicionComparador1 = tipo;
                    break;

                case TokenSQL.ENTERO:         // entero
                    condicionValor1 = token;
                    estado          = 30;
                    break;

                case TokenSQL.CADENA:         // cadena
                    condicionValor1 = token;
                    estado          = 30;
                    break;

                case TokenSQL.FLOTANTE:         // flotante
                    condicionValor1 = token;
                    estado          = 30;
                    break;

                case TokenSQL.FECHA:         // fecha
                    condicionValor1 = token;
                    estado          = 30;
                    break;

                default:

                    break;
                }
                break;

            case 40:     // ACTUALIZAR ID ESTABLCER ( L_ESTABLECER ) DONDE L_LISTA ;
                switch (tipo)
                {
                case TokenSQL.ID:
                    nombreTabla    = token.getLexema();
                    listaUpdate    = new List <NodoActualizar>();
                    condicionDonde = false;
                    break;

                case TokenSQL.CL_PARENTESIS_1:
                    estado = 41;
                    break;

                case TokenSQL.PR_DONDE:
                    condicionDonde = true;
                    estado         = 42;
                    break;

                case TokenSQL.CL_FL:
                    actualizarDato();
                    break;
                }
                break;

            case 41:     //L_ESTABLECER = ID = VALOR , ID = VALOR
                switch (tipo)
                {
                case TokenSQL.ID:
                    nombreColumna = token.getLexema();
                    break;

                case TokenSQL.CADENA:
                    listaUpdate.Add(new NodoActualizar(nombreColumna, token));
                    break;

                case TokenSQL.FECHA:
                    listaUpdate.Add(new NodoActualizar(nombreColumna, token));
                    break;

                case TokenSQL.ENTERO:
                    listaUpdate.Add(new NodoActualizar(nombreColumna, token));
                    break;

                case TokenSQL.FLOTANTE:
                    listaUpdate.Add(new NodoActualizar(nombreColumna, token));
                    break;

                case TokenSQL.CL_PARENTESIS_2:
                    estado = 40;
                    break;
                }
                break;

            case 42:
                switch (tipo)
                {
                case TokenSQL.ID:
                    condicionColumna1 = token.getLexema();
                    Console.WriteLine("Columna condición: " + condicionColumna1);
                    break;

                case TokenSQL.CL_IGUAL:         // =
                    condicionComparador1 = tipo;
                    break;

                case TokenSQL.CL_DIFERENTE:         // !=
                    condicionComparador1 = tipo;
                    break;

                case TokenSQL.CL_MAYOR:         // >
                    condicionComparador1 = tipo;
                    break;

                case TokenSQL.CL_MAYOR_IGUAL:         // >=
                    condicionComparador1 = tipo;
                    break;

                case TokenSQL.CL_MENOR:         // <
                    condicionComparador1 = tipo;
                    break;

                case TokenSQL.CL_MENOR_IGUAL:         // <=
                    condicionComparador1 = tipo;
                    break;

                case TokenSQL.ENTERO:         // entero
                    condicionValor1 = token;
                    estado          = 40;
                    break;

                case TokenSQL.CADENA:         // cadena
                    condicionValor1 = token;
                    estado          = 40;
                    break;

                case TokenSQL.FLOTANTE:         // flotante
                    condicionValor1 = token;
                    estado          = 40;
                    break;

                case TokenSQL.FECHA:         // fecha
                    condicionValor1 = token;
                    estado          = 40;
                    break;

                default:

                    break;
                }
                break;

            case 50:

                break;

            default:
                Console.WriteLine("[" + e + "] Token: " + token.getLexema());
                break;
            }
        }