private void iniciarAnalisisLexicoToolStripMenuItem_Click(object sender, EventArgs e) { try { DataTable dt = new DataTable(); TablaTransiciones.DataSource = dt; TablaTransiciones.Update(); String text = ""; TabPage tp = tabControl1.SelectedTab; foreach (Control o in tp.Controls) { if (o is RichTextBox) { text = o.Text; RichTextBox r = (RichTextBox)o; Analizador lexico = new Analizador(); lg.vaciarLista(); lexico.analizadorLexico(text, lg); inicio = lg.InicioLista; final = lg.FinalLista; temporal = lg.FinalLista; iniciarGaleria(); Probar_Lexemas pl = new Probar_Lexemas(); Consola.Text = pl.prueba(inicio, lexico.getListaLexemas(), lexico.getListaConjunto()); errores = pl.Errores; } } MessageBox.Show("Anlizado Correcamente"); } catch (Exception ex) { MessageBox.Show("Error: " + ex); } }
public void iniciarGaleria() { Galeria aux = temporal; String ruta = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); String afn = ruta + "\\" + aux.Nombre + ".png "; String afd = ruta + "\\" + aux.Nombre + "_AFD.png "; mostrarImagen(afd, afn, aux.Nombre); DataTable dt = new DataTable(); dt.Columns.Add("Estados"); for (int i = 0; i < aux.Simbolos.Count; i++) { dt.Columns.Add(aux.Simbolos.ElementAt(i).ToString()); } for (int i = 0; i < aux.Estados.Count; i++) { DataRow dr = dt.NewRow(); String estado = "" + aux.Estados.ElementAt(i).EstadoInicial; if (aux.Estados.ElementAt(i).Aceptacion) { estado += "*"; } dr["Estados"] = estado; for (int j = 0; j < aux.Estados.ElementAt(i).Transiciones.Count; j++) { dr[aux.Estados.ElementAt(i).Transiciones.ElementAt(j).Simbolo] = aux.Estados.ElementAt(i).Transiciones.ElementAt(j).Estado; } dt.Rows.Add(dr); } TablaTransiciones.DataSource = dt; TablaTransiciones.Update(); }
private void button2_Click(object sender, EventArgs e) { try { temporal = temporal.Siguiente; DataTable dt = new DataTable(); TablaTransiciones.DataSource = dt; TablaTransiciones.Update(); iniciarGaleria(); } catch (Exception ex) { } }
public void generarTabla(List <NodoExpresion> listaNodos, List <int> numeros, List <Object> simbolos, String nombre, NodoExpresion final, ListaCircularGaleria lg, Galeria nuevoGaleria) { listaNodo = listaNodos; name = nombre; listaSimbolos = simbolos; ultimo = final; List <int> estadosCerradura = new List <int>(); for (int i = 0; i < numeros.Count; i++) { NodoExpresion paraCerradura = buscarNodo(numeros.ElementAt(i)); if (paraCerradura != null) { cerradura(paraCerradura, estadosCerradura); } } mostrarCerradura(estadosCerradura); Estado nuevoEstado = new Estado(); nuevoEstado.EstadoInicial = j; j++; nuevoEstado.Numeros = numeros; bool has = estadosCerradura.Any(x => x == ultimo.Id); if (has == true) { nuevoEstado.Aceptacion = true; } transiciones.Add(nuevoEstado); List <Transicion> trancisionesEstado = new List <Transicion>(); for (int i = 0; i < listaSimbolos.Count; i++) { List <int> estadosMueve = new List <int>(); for (int l = 0; l < estadosCerradura.Count; l++) { NodoExpresion paraMove = buscarNodo(estadosCerradura.ElementAt(l)); if (paraMove != null) { move(paraMove, listaSimbolos.ElementAt(i), estadosMueve); } } if (estadosMueve.Count > 0) { bool sn = existeCerradura(estadosMueve); if (sn) { int id = devolverId(estadosMueve); Transicion nuevaTransicion = new Transicion(); nuevaTransicion.Estado = id; nuevaTransicion.Simbolo = listaSimbolos.ElementAt(i).ToString(); trancisionesEstado.Add(nuevaTransicion); } else { Estado apuntar = new Estado(); apuntar.EstadoInicial = j; j++; apuntar.Numeros = estadosMueve; transiciones.Add(apuntar); Transicion nuevaTransicion = new Transicion(); nuevaTransicion.Estado = apuntar.EstadoInicial; nuevaTransicion.Simbolo = listaSimbolos.ElementAt(i).ToString(); trancisionesEstado.Add(nuevaTransicion); siguientes(estadosMueve, apuntar); } } } nuevoEstado.Transiciones = trancisionesEstado; nuevoGaleria.Estados = transiciones; lg.insertar(nuevoGaleria); }
public void separarNodos(List <Expresion> listaExpresiones, ListaCircularGaleria lg) { for (int h = 0; h < listaExpresiones.Count; h++) { String expresion = listaExpresiones.ElementAt(h).ExpresionRegular; String nombreGrafica = listaExpresiones.ElementAt(h).Identificador; int estado = 0; string lexema = ""; Char c; grafica += "digraph " + nombreGrafica + " { \n"; grafica += "rankdir = \u0022LR\u0022; \n"; grafica += "node [shape = circle, height=.1]; \n"; expresion = expresion + " "; for (int i = 0; i < expresion.Length; i++) { c = expresion[i]; switch (estado) { case 0: if (c == '|') { nodos.Add(c); } else if (c == '.') { nodos.Add(c); } else if (c == '+') { nodos.Add(c); } else if (c == '*') { nodos.Add(c); } else if (c == '?') { nodos.Add(c); } else if (c == '{') { estado = 1; } else if (c == '\u0022') { lexema += c; estado = 2; } break; case 1: if (c == '}') { nodos.Add(lexema); lexema = ""; estado = 0; } else { lexema += c; } break; case 2: if (c == '\u0022') { lexema += c; nodos.Add(lexema); lexema = ""; estado = 0; } else { lexema += c; } break; } } j = 0; Object nodo = nodos.ElementAt(j); NodoExpresion nuevo = new NodoExpresion(); nuevo.Id = j; listaNodos.Add(nuevo); generarAFN(nodo, 0, nuevo); raiz = nuevo; grafica += "}"; Graficador gr = new Graficador(); gr.graficar(grafica, nombreGrafica); MetodoSubconjuntos ms = new MetodoSubconjuntos(); List <int> numeros = new List <int>(); numeros.Add(0); Galeria nuevoGaleria = new Galeria(); nuevoGaleria.Nombre = nombreGrafica; nuevoGaleria.Simbolos = simbolos; ms.generarTabla(listaNodos, numeros, simbolos, nombreGrafica, ultimo, lg, nuevoGaleria); ms.GraficarAFD(); nodos = new List <object>(); listaNodos = new List <NodoExpresion>(); simbolos = new List <object>(); j = 0; k = 0; grafica = ""; } }