public void analizarLexico()
        {   //Lista temporal donde se guardaran los resultados por linea
            List <PalabraEncontrada> listaPalabrasEncontradaTemporal = new List <PalabraEncontrada>();
            //Lista temporal donde se guardaran los resultados por linea ya ordenadas
            List <PalabraEncontrada> listaPalabrasEncontradaPorLineaOrdenada;
            //Lista temporal donde se guardaran los resultados por linea ya ordenadas
            List <PalabraError> listaErroresTemporal;

            //Tomar cadena de texto
            cadenaTexto = txtEditor.Text;
            //Descomponer cadena en saltos de linea
            String[] arregloLineas = cadenaTexto.Split('\n');
            //Inicializar el arreglo de lineas de texto
            arreglolineasTexto = new String[arregloLineas.Length, 2];
            //Agregar cada linea a un arreglo multidimensional
            for (int i = 0; i < arregloLineas.Length; i++)
            {
                string lineaActual = arregloLineas[i];
                //DisplayAlert("Aviso",lineaActual, "Si", "No");
                int numeroLinea = i + 1;
                arreglolineasTexto[i, 0] = numeroLinea.ToString();
                arreglolineasTexto[i, 1] = " " + lineaActual + " ";
            }
            //Por cada linea someterla a todas las palabras reservadas
            for (int i = 0; i < arreglolineasTexto.GetLength(0); i++)
            {
                String cadenaTexto = arreglolineasTexto[i, 1];
                //DisplayAlert("Aviso", cadenaTexto,"si","no");
                for (int j = 0; j < arregloPalabrasReservadas.GetLength(0); j++)
                {
                    //tomo su expresion regular
                    Regex rx = new Regex(arregloPalabrasReservadas[j, 3]);

                    //ciclo foreach para recorrer la cadena en busca de 1 o mas coincidencias

                    foreach (Match validacionregex in rx.Matches(cadenaTexto))
                    {
                        //DisplayAlert("Aviso", validacionregex.Value+" INDICE:"+validacionregex.Index, "si", "no");
                        //Cada que encuentre una pasarla a comprobar
                        if (comprobarToken(j, validacionregex, i))
                        {
                            //Por cada palabra encontrada crear un objeto temporal
                            PalabraEncontrada palabraReservada = new PalabraEncontrada();
                            palabraReservada.palabra     = arregloPalabrasReservadas[j, 0];
                            palabraReservada.tipo        = arregloPalabrasReservadas[j, 2];
                            palabraReservada.descripcion = arregloPalabrasReservadas[j, 2];
                            palabraReservada.indice      = validacionregex.Index;
                            palabraReservada.nLinea      = int.Parse(arreglolineasTexto[i, 0]);

                            //Y agregarlo a listaPalabrasEncontradaTemporal
                            listaPalabrasEncontradaTemporal.Add(palabraReservada);
                        }
                    }
                }
                //Cada que termina de someter una linea de texto a las palabras reservadas
                //Si encontro algunas hay que ordenarlas
                listaPalabrasEncontradaPorLineaOrdenada = ordenarPalabrasEncontradasPorLinea(listaPalabrasEncontradaTemporal);
                //Una vez ordenada la lista encontrar las palabras que no correspondieron a ninguna palabra reservada
                listaErroresTemporal = encontrarErroresPorLinea(listaPalabrasEncontradaPorLineaOrdenada, arreglolineasTexto[i, 1], i + 1);

                //Agregar palabras encontradas y errores a sus respectivas listas
                listaPalabrasEncontradas.AddRange(listaPalabrasEncontradaPorLineaOrdenada);
                listaErroresEncontrados.AddRange(listaErroresTemporal);
            }

            //Por ultimo mostrar los resultados
            //mostrarPalabrasEncontradasEnTabla();
            mostrarPalabrasEncontradas(listaPalabrasEncontradas);
            mostrarErroresEncontrados(listaErroresEncontrados);
            //mostrarErroresEcontradosEnLinea();
        }
Example #2
0
        public void analizarLexico()
        {
            //Limpiar las listas de errores y palabras encontradas
            listaPalabrasEncontradas.Clear();
            listaErroresEncontrados.Clear();
            //Lista temporal donde se guardaran los resultados por linea
            List <PalabraEncontrada> listaPalabrasEncontradaTemporal = new List <PalabraEncontrada>();
            //Lista temporal donde se guardaran los resultados por linea ya ordenadas
            List <PalabraEncontrada> listaPalabrasEncontradaPorLineaOrdenada;
            //Lista temporal donde se guardaran los resultados por linea ya ordenadas
            List <PalabraError> listaErroresTemporal;

            //Tomar cadena de texto
            cadenaTexto = txtEditor.Text;
            //Descomponer cadena en saltos de linea
            String[] arregloLineas = cadenaTexto.Split(new[] { "\r\n", "\r", "\n" },
                                                       StringSplitOptions.None);
            //Inicializar el arreglo de lineas de texto
            arreglolineasTexto = new String[arregloLineas.Length, 2];
            //Agregar cada linea a un arreglo multidimensional
            for (int i = 0; i < arregloLineas.Length; i++)
            {
                //cambio mas reciente
                string lineaActual = arregloLineas[i].TrimStart();
                //DisplayAlert("Aviso",lineaActual, "Si", "No");
                int numeroLinea = i + 1;
                arreglolineasTexto[i, 0] = numeroLinea.ToString();
                arreglolineasTexto[i, 1] = " " + lineaActual + " ";
            }

            //Por cada linea someterla a todas las palabras reservadas
            for (int i = 0; i < arreglolineasTexto.GetLength(0); i++)
            {
                //Limpiar la lista de palabras temporales
                listaPalabrasEncontradaTemporal.Clear();

                String cadenaTexto = arreglolineasTexto[i, 1];
                //DisplayAlert("Aviso","Evaluando"+cadenaTexto,"si","no");
                //DisplayAlert("Aviso", cadenaTexto,"si","no");
                for (int j = 0; j < arregloPalabrasReservadas.GetLength(0); j++)
                {
                    //tomo su expresion regular
                    Regex rx = new Regex(arregloPalabrasReservadas[j, 3]);
                    //DisplayAlert("Aviso", "Evaluando "+cadenaTexto+" con " + rx, "si", "no");
                    //ciclo foreach para recorrer la cadena en busca de 1 o mas coincidencias

                    //SI DESPUES DE HABER RECORRIDO TODAS LAS PALABRAS Y NO HIZO MATCH
                    //LA LINEA SE TOMA COMO ERROR

                    if (rx.IsMatch(cadenaTexto) == false)
                    {
                        contadorNoMatch++;
                    }
                    if (contadorNoMatch == arregloPalabrasReservadas.GetLength(0))
                    {
                        agregarError(cadenaTexto, i + 1);
                    }
                    foreach (Match validacionregex in rx.Matches(cadenaTexto))
                    {
                        //DisplayAlert("Aviso", validacionregex.Value+" TIPO:"+ arregloPalabrasReservadas[j, 0], "si", "no");
                        //Cada que encuentre una pasarla a comprobar
                        if (comprobarToken(j, validacionregex, i))
                        {
                            //Por cada palabra encontrada crear un objeto temporal
                            PalabraEncontrada palabraReservada = new PalabraEncontrada();
                            palabraReservada.palabra = validacionregex.Value;
                            //palabraReservada.palabra = arregloPalabrasReservadas[j, 0];
                            palabraReservada.tipo        = arregloPalabrasReservadas[j, 1];
                            palabraReservada.descripcion = arregloPalabrasReservadas[j, 2];
                            palabraReservada.indice      = validacionregex.Index;
                            palabraReservada.nLinea      = int.Parse(arreglolineasTexto[i, 0]);

                            //Y agregarlo a listaPalabrasEncontradaTemporal
                            listaPalabrasEncontradaTemporal.Add(palabraReservada);
                        }
                    }
                }
                //Cada que termina de someter una linea de texto a las palabras reservadas
                //Si encontro algunas hay que ordenarlas
                listaPalabrasEncontradaPorLineaOrdenada = ordenarPalabrasEncontradasPorLinea(listaPalabrasEncontradaTemporal);
                //Una vez ordenada la lista encontrar las palabras que no correspondieron a ninguna palabra reservada
                listaErroresTemporal = encontrarErroresPorLinea(listaPalabrasEncontradaPorLineaOrdenada, arreglolineasTexto[i, 1], i + 1);

                //Agregar palabras encontradas y errores a sus respectivas listas
                listaPalabrasEncontradas.AddRange(listaPalabrasEncontradaPorLineaOrdenada);
                listaErroresEncontrados.AddRange(listaErroresTemporal);
            }

            //Por ultimo mostrar los resultados
            mostrarPalabrasEncontradas(listaPalabrasEncontradas);
            mostrarErroresEncontradas(listaErroresEncontrados);
        }