lunes, 8 de septiembre de 2014

¿Como realizar el análisis en Irony?

Este es un ejemplo muy sencillo, pero indispensable al momento de querer utilizar nuestra gramática definida en Irony. Vamos a considerar las siguientes clases para el ejemplo:
  • Gramatica.cs : es donde se encuentran todas las reglas gramaticales definidas en Irony(ver Ejemplo de gramática en Irony.net).
  • Analizador.cs: es una nueva clase que se crea con el objetivo de realizar el análisis.
  • Formulario.cs: clase de la interfaz gráfica en la cual tendremos un área de texto de la clase RichTextBox y un botón de la clase Button.

Crearemos un método en la clase Analizador.cs llamado "Validar_cadena" el cual necesita dos parámetros para su ejecución que son la cadena a analizar y la gramática que se utilizara para dicho análisis. Retornara un valor booleano dependiendo si es valida o no la cadena. El método podría ser de la siguiente forma:

public bool Validar_cadena(string Cadena, Grammar Mi_gramatica) {
            LanguageData lenguaje = new LanguageData(Mi_gramatica);
            Parser parser = new Parser(lenguaje);          
            try
            {
                ParseTree arbol = parser.Parse(Cadena); // el análisis devuelve un árbol abstracto
                return arbol.Root != null; //si el arbol no tiene raíz significa que la cadena no es valida
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString()); //por errores de programacion en Gramatica.cs
                return false;
            }
         
        }

Nota: es indispensable agregar la librería de Irony a la clase Analizador.cs

using Irony.Parsing;



Para analizar el texto colocado en el RichTextBox estas serian las acciones en el boton:

private void Boton_analizar(object sender, EventArgs e)
        {                      
            if (AreaDeTexto.Text != null)
            {
                Analizador analizador = new Analizador();//creamos instancia de Analizador
                Gramatica mi_gramatica = new Gramatica();//creamos instancia de Gramática
                if (analizador.Validar_cadena(AreaDeTexto.Text, mi_gramatica))//Ejecución
                {
                    MessageBox.Show("Cadena Correcta");
                }
                else
                {
                    MessageBox.Show("Cadena incorrecta");
                }              
             
            }
        }


No hay comentarios:

Publicar un comentario