private void evaluarLexema(string cadena, RichTextBox consola, ArrayList Afd, er expresion, int conteo, ArrayList list) { nodoCabecera estadoActual = (nodoCabecera)Afd[0]; string concatenado = ""; bool siNo = true; //Console.WriteLine("--------------------------------------------------------------"); //Console.WriteLine("cadena:\"" + cadena+"\" de la expresion "+expresion.getId()); ArrayList reporteCadena = new ArrayList(); //Analizar cada caracter for (int i = 0; i < cadena.Length; i++) { string caracter = Char.ToString(cadena[i]); concatenado += caracter; string estadoSiguiente = estadoActual.permitirPaso(caracter, estadoActual.getIdEstado(), concatenado, reporteCadena); //Console.WriteLine("i" + i + ": " + estadoActual.getIdEstado() + "->" + caracter + "->" + estadoSiguiente); if (!estadoSiguiente.Equals("Error")) { if (!estadoSiguiente.Equals(estadoActual.getIdEstado())) { concatenado = ""; } estadoActual = expresion.getEstadoActual(estadoSiguiente); } else { siNo = false; } } if (siNo) { if (!estadoActual.getAceptacion()) { siNo = false; } } //Mostrar el reporte en consola de la interfaz if (siNo) { consola.Text += "VALIDA: El lexema \"" + cadena + "\" SI ES VALIDO con la expresion regular " + expresion.getId() + "\n"; } else { consola.Text += "INVALIDA: El lexema \"" + cadena + "\" NO ES VALIDO con la expresion regular " + expresion.getId() + "\n"; } list.Add(new reporteLexema(cadena, expresion.getId(), siNo)); //Generar xml del analisis generarXML(reporteCadena, expresion, conteo); }
private void generarXML(ArrayList reporte, er expresion, int lexemaCount) { string pathDesktop = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); string pathFolder = pathDesktop + "\\ER_Analisis\\" + Program.conteoAnalisis + "\\ReporteLexemas"; try { if (!Directory.Exists(pathFolder)) { DirectoryInfo dir = Directory.CreateDirectory(pathFolder); } string pathRep = pathFolder + "\\ReporteLexema" + lexemaCount + "_" + expresion.getId() + ".xml"; XmlDocument doc = new XmlDocument(); XmlDeclaration xmlDeclarar = doc.CreateXmlDeclaration("1.0", "UTF-8", null); XmlElement root = doc.DocumentElement; doc.InsertBefore(xmlDeclarar, root); //Crear el primer contenedor XmlElement analisisLexico = doc.CreateElement(string.Empty, "Analisis_Lexico", string.Empty); doc.AppendChild(analisisLexico); // XmlElement errores = doc.CreateElement(string.Empty, "Error_Lexico", string.Empty); //doc.AppendChild(errores); int conteo = 0; //Crear todo el reporte de tokens foreach (nodoReporte item in reporte) { XmlElement elemento = doc.CreateElement(string.Empty, "Token", string.Empty); // if (!item.getTipo().Equals("Error Lexico")) //{ analisisLexico.AppendChild(elemento); //} //else // { // errores.AppendChild(elemento); // } //Agregar el tipo del token XmlElement tipoToken = doc.CreateElement(string.Empty, "Tipo_Token", string.Empty); XmlText tipoString = doc.CreateTextNode(item.getTipo()); tipoToken.AppendChild(tipoString); elemento.AppendChild(tipoToken); //Agregar el lexema XmlElement lexemaToken = doc.CreateElement(string.Empty, "Lexema", string.Empty); XmlText lexemaString = doc.CreateTextNode("\"" + item.getToken() + "\""); lexemaToken.AppendChild(lexemaString); elemento.AppendChild(lexemaToken); //Agregar Transicion XmlElement transicionToken = doc.CreateElement(string.Empty, "Transicion", string.Empty); XmlText transicionString = doc.CreateTextNode(item.getTransicion()); transicionToken.AppendChild(transicionString); elemento.AppendChild(transicionToken); conteo++; } doc.Save(pathRep); } catch (Exception e) { } }