Exemple #1
0
        /// <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");
            }
        }