/// <summary> /// Convierte todas las producciones en producciones binarias /// </summary> /// <param name="g"> /// Referencia al Objeto Gramatica al cual pertenece este objeto Regla /// </param> public void obtenerProduccionesBinarias(Gramatica g) { List <string> nuevas = new List <string>(); for (int i = 0; i < producciones.Count(); i++) { string produccion = producciones.ElementAt(i); int tamanio = produccion.Count(); if (tamanio > 2) //produccion no binaria { char caracter1 = produccion.ElementAt(tamanio - 1); char caracter2 = produccion.ElementAt(tamanio - 2); string nuevaProduccion = caracter2.ToString() + caracter1.ToString(); Regla regla = g.reglaUnitariaConProduccion(nuevaProduccion); if (regla != null) { //Reemplazo esos caracteres por la variable que los genera produccion = produccion.RemoveAt(produccion.Count() - 1); produccion = produccion.RemoveAt(produccion.Count() - 1); produccion = produccion + regla.generador.ToString(); nuevas.Add(produccion); } else { //creo la produccion nueva char variable = g.variablesPosibles.ElementAt(0); g.variablesPosibles.RemoveAt(0); //menos variables g.variables.Add(variable); //agrego regla Regla nueva = new Regla(variable, new List <string> { nuevaProduccion }); g.nuevasReglas.Add(nueva); //modifico produccion produccion = produccion.RemoveAt(produccion.Count() - 1); produccion = produccion.RemoveAt(produccion.Count() - 1); produccion = produccion + variable.ToString(); nuevas.Add(produccion); } } else { nuevas.Add(produccion); } } producciones = nuevas; }
public void limpiar() { g = null; txtSalida.Clear(); txtEntrada.Clear(); butPaso1.Enabled = true; butPaso2.Enabled = false; butPaso3.Enabled = false; butPaso4.Enabled = false; butPaso5.Enabled = false; butPaso6.Enabled = false; txtNoTerminables.Clear(); txtNoAlcanzables.Clear(); txtAnulables.Clear(); txtConjUnitario.Clear(); comboBoxConjunto.Enabled = true; comboBoxConjunto.Items.Clear(); }
/* * Al presionar este boton se carga la gramatica */ private void butPaso1_Click(object sender, EventArgs e) { if (txtEntrada.Text.Trim().Count() > 0) { try { g = new Gramatica(txtEntrada.Text); List <char> noTerminables = g.darNoTerminables(); string cadena = "ninguna"; if (noTerminables.Count() > 0) { cadena = ""; for (int i = 0; i < noTerminables.Count(); i++) { char noTerminable = noTerminables.ElementAt(i); cadena = cadena + noTerminable + " "; } } txtNoTerminables.Text = cadena; g.eliminarNoTerminables(); txtSalida.Text = g.ToString(); butPaso1.Enabled = false; butPaso2.Enabled = true; } catch (Exception ex) { MessageBox.Show(ex.Message); } } else { MessageBox.Show("Debe insertar una gramatica"); } }