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(); }
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); }