jueves, 30 de septiembre de 2010

Manual de Gold Parser



 
Botón “Next

El botón “Next” cambia cada vez que es presionado, representando el siguiente paso en el proceso de compilación.

  1. Ingresar la Gramática

Durante este paso la aplicación verifica la sintaxis de la gramática y prepara la aplicación para generar las tablas de análisis. Si se encuentra algún error, éste es reportado al usuario y el proceso se reinicia.

  1. Ingresar la Gramática

Durante este paso la aplicación verifica la sintaxis de la gramática y prepara la aplicación para generar las tablas de análisis. Si se encuentra algún error, éste es reportado al usuario y el proceso se reinicia.

  1. Generar el analizador
 

Durante este paso la aplicación trata de construir las tablas del análisis sintáctico LALR. La mayoría de los conflictos ocurren durante la creación de estas tablas, por lo cual son construidas antes.

  1. Generar los tokens
Durante este paso la aplicación trata de crear las tablas del automata finito determinístico usando el generador de tokens (scanner).

  1. Guardar la Gramática Compilada
 

Permite almacenar las tablas de la gramática compilada en un archivo (.cgt).

Menú de Gold Parser

File


1.   New
Establece un nuevo documento para crear gramáticas.

2.   New Grammar Wizard
Abre un asistente para crear gramáticas con opciones comunes a establecer en una gramática.

3.   Open
Abre un archivo de GOLD Parser.

4.   Save
Guarda la gramática actual como un archivo de GOLD Parser.

5.   Save As…
Permite guardar la gramática actual con un nombre específico.

6.   Import a YACC/Bison Grammar…
Permite importar a GOLD Parser una gramática creada con la sintaxis de YACC/Bison.

7.   Print
Manda a imprimir la gramática.

8.   Page Setup…
Permite establecer las opciones de impresión.

9.   Lista de Archivos Recientes
Se listan los últimos 5 archivos abiertos en GOLD Parser.

10.  Exit
Sale de la aplicación.

Edit


  1. Undo
Deshace la última acción realizada.

  1. Redo
Rehace la última acción deshecha.

  1. Cut
Corta el texto seleccionado al portapapeles.

  1. Copy
Copia el texto seleccionado al portapapeles.

  1. Paste
Pega el texto contenido en el portapapeles.

  1. Delete
Borra el texto seleccionado.

  1. Select All
Selecciona todo el contenido del documento.

  1. Indent
Establece una sangría al texto seleccionado.

  1. Unindent
Borra la sangría establecida a un texto seleccionado.

10.  Comment
Establece como comentario el texto seleccionado.

11.  Uncomment
Quita como comentario el texto seleccionado.

12.  Auto Align
Estable una alineación automática al texto seleccionado.

Search

 

    1.  Find…
    Permite buscar un texto en el documento.

    1. Replace…
    Permite reemplazar un texto por otro en el documento.

    1. Go To Line
    Permite desplazarse a una línea específica del documento.

    1. Toggle Bookmark
    Establece un marcador a una línea del documento.

    1. Previous Bookmark
    Permite saltar al anterior marcador establecido antes de la posición del cursor en el documento.

    1. Next Bookmark
    Permite saltar al siguiente marcador establecido después de la posición del cursor en el documento.

    1. Clear All Bookmarks
    Borra todos los marcadores establecidos en el documento.

    Project


    1. Analyze the Grammar
    La aplicación verifica la sintaxis de la gramática y prepara la aplicación para generar las tablas de análisis. Si se encuentra algún error, éste es reportado al usuario y el proceso se reinicia.

    1. Create LALR Parse Tables
    La aplicación trata de construir las tablas del análisis sintáctico LALR. La mayoría de los conflictos ocurren durante la creación de estas tablas, por lo cual son construidas antes.

    1. Create DFA Lexer Tables
    La aplicación trata de crear las tablas del automata finito determinístico usando el generador de tokens (scanner).

    1. Save the Tables
    Permite almacenar las tablas de la gramática compilada en un archivo (.cgt).

    1. Create a Skeleton Program…


    Permite seleccionar un lenguaje como salida para usar la gramática. En la imagen está seleccionada la opción para C#, usando el generador Calitha, que genera un archivo “.cs” con todos los símbolos y producciones de la gramática listo para ser importado en un proyecto de este lenguaje de programación.

    1. Reset
    Reinicia el proceso de compilación de la gramática para poder analizarla nuevamente.

     

       1.  Create a Web Page…
      Permite crear una página web conteniendo los resultados del análisis sintáctico realizado por la aplicación.

      1. Export the Tables
      1. Formatted Text Permite guardar los resultados del análisis sintáctico como texto formateado.
        1. XML Permite guardar los resultados del análisis sintáctico como un archivo XML.
        1. YACC/Bison Grammar Permite guardar la gramática con la sintaxis de YACC/Bison.

      1. Save the Log
      Permite guardar el registro de las acciones realizadas por la aplicación durante el análisis.

      1. Options
      Permite establecer opciones de la aplicación como notificaciones, codificación de caracteres y estilos del editor de gramáticas.
      Test
       

      1. Multiple File Test Wizard…
      Permite realizar pruebas a la gramática a través de un asistente con el contenido de varios archivos.

      1. Open a Test File
      Abre un archivo para probar la gramática.

      1. Save the Test File
      Permite guardar el texto de prueba de la gramática en un archivo.

      1. Save the Test File As…
      Permite guardar el texto de prueba de la gramática en un archivo con un nombre específico.

      1. Step
      Realiza un paso a la vez en el análisis del texto de prueba de la gramática.

      1. Parse All
      Realiza todo el análisis del texto de prueba de la gramática.

      1. Pause
      Pausa el análisis realizado del texto de prueba de la gramática.

      1. Stop
      Detiene el análisis realizado del texto de prueba de la gramática.

      1. Test Options
      Permite establecer opciones durante la prueba del texto.

      10.  Trim Reductions

      Determina si se muestran en el registro de las acciones todas las reducciones realizadas durante el análisis sintáctico o sólo las más importantes.

      11.  Export the Parse Tree

      Permite guardar el árbol de análisis sintáctico como un archivo de texto.

       Window

      1. Grammar

      Muestra el editor de la gramática.

       
      2. Parameters
      Muestra todos los atributos que fueron establecidos en la gramática. Entre estos están el nombre de la gramática, versión, autor y si el lenguaje es sensible a mayúsculas.



      3. Character Sets
      Muestra los conjuntos de caracteres definidos en la gramática. Esta información es usada en la construcción del autómata finito determinístico, pero no es almacenada en el archivo de las tablas de la gramática compilada (.cgt).
      4. Symbols
      Muestra los símbolos de la gramática y las palabras reservadas. Todos los símbolos son automáticamente ordenados por su tipo, terminal o no terminal, y luego por su nombre respectivo.


      5. Productions

      Muestra todas las producciones usadas en la gramática. Aquí se pueden revisar las producciones para determinar si hay algún error en la gramática que no había sido aparente. Tambien permite verificar que el analizador léxico de la gramática funciona correctamente.

      6. DFA States

      Un autómata finito determinístico es usado por el generador de tokens para leer la cadena fuente y dividirla en tokens individuales. Cuando la gramática es analizada, los conflictos pueden ocurrir cuando dos o más terminales aceptan el mismo texto.

      a. Controles

      El navegador de los estados del automáta funciona como cualquier navegador web de internet. Si se hace doble clic en cualquier enlace “Goto”, la ventana automáticamente avanzará hacia ese estado. En la parte baja de la ventana, hay unos controles que permiten saltar a cualquier estado en la tabla o regresar al último estado examinado.

      7. LALR States

      La mayoría de los errores que ocurren en las gramáticas son encontrados en la tabla de los estados LALR. Cuando se analiza una gramática y se generan las tablas de análisis sintáctico, a menudo ocurren los conflictos desplazamiento-reducción y reducción-reducción. Estos conflictos son causados por ambigüedades en la gramática que no son obvias al usuario.

      La tabla de los estados LALR permite revisar los estados producidos, en particular el estado que contiene el error.


      El navegador de los estados LALR consiste de tres diferentes pestañas que contienen información acerca el estado actual. La pestaña de Configuraciones muestra el conjunto de configuraciones que el estado representa. Cada estado LALR representa un estado particular durante el análisis sintáctico. Las producciones que son analizadas son llamadas “configuraciones” con un cursor (representando el análisis) representado por un punto (.).

      Cada configuración tiene un conjunto de caracteres siguientes que contienen los posibles terminales que pueden seguirle. Esta información es usada para crear las acciones en el estado actual.

      La tercera pestaña contiene los estados “previos”. Cada uno de estos estados avanzará al estado actual a través de un desplazamiento o un goto (ir a). Esta pestaña permite moverse hacia atrás en el estado actual.

      a. Controles 

      El navegador de los estados LALR funciona como cualquier navegador web de internet. Si se hace doble clic en cualquier enlace “Shift” o “Goto”, la ventana automáticamente avanzará hacia ese estado. Al final de la ventana, hay unos controles que permiten saltar a cualquier estado en la tabla o regresar al último estado examinado.


      8. Log
      Muestra una ventana con diversa información obtenida del análisis. Ésta incluye información general sobre el número de símbolos, cuáles fueron definidos implícitamente, total de tablas y cualquier error que pueda ocurrir.

      9. Test Grammar
      Después de que una gramática ha sido éxitosamente compilada por la aplicación, se puede verificar como el autómata finito determinístico y los algoritmos LALR analizarán cualquier número de casos de prueba.


      La ventana tiene dos distintas pestañas. La primera pestaña permite escribir o cargar un texto de prueba. Los controles de la ventana son similares a los de un reproductor de música. 

      Para empezar la prueba, se hace clic en el botón “Step” (verde). En este punto, se puede hacer clic en el botón de nuevo para analizar el texto y pausar el proceso cada vez que un token es leído. Esto permite ver cómo el texto es interpretado por la gramática paso a paso. El botón “Parse All” analizará el resto del texto sin detenerse hasta que ocurra un error o el texto sea aceptado. El botón “Stop” puede usarse en cualquier momento para terminar la prueba.


      La primera pestaña contiene una lista de las acciones realizadas por el analizador sintáctico LALR.
       

      Si el texto de prueba es éxitosamente analizado, la aplicación dibujará un árbol de análisis sintáctico que es posible revisar.

      10. Predefined Set Table

      Muestra una ventana con el conjunto de caracteres predefinidos por la aplicación.


      11. Cascade Windows

      Organiza todas las ventanas actualmente abiertas en forma de cascada.


      Help
       

      1. GOLD Documentation…
      Abre la página en internet con la documentación de GOLD Parser.

      1. GOLD Homepage…
      Abre la página principal del sitio oficial de GOLD Parser.

      1. Check for Updates…
      Determina si hay nuevas versiones de la aplicación.

      1. Known Issues with this Release…
      Abre la página que contiene los inconvenientes actuales con la versión de la aplicación.

      1. Miscellaneous Links…
      Muestra un listado de sitios relacionados con la apliación.

      1. Revision History…
      Muestra el listado de cambios realizados entre cada versión.

      1. About GOLD Parser Builder…
      Muestra la información de la aplicación.

      Implementación de Gold Parser y Python


      Para utilizar GOLD Parser en Python, lo primero que a realizar es instalar pygold, el programa encargado de instalar las librerías necesarias para poder enlazar los archivos de GOLD Parser a Python.
      Se puede descargar desde aquí: http://pygold.sourceforge.net/. El archivo de instalación a la fecha es la versión 0.9.2: pygold-0.9.2.win32.exe.

      Una vez instalado, vamos a GOLD Parser para generar los archivos necesarios.
      Pasos en GOLD Parse
      Con la gramática ya realizada, procedemos a generar el archivo .cgt:




      Recordar donde se guarda el archivo .cgt, ya que nos servirá posteriormente.
      Luego vamos a Project ? Create a Skeleton Program:

      Para generar el archivo compatible con Python seleccionamos la opción: “Python – Constants Only” y luego hacemos clic en “Create”, donde se nos pedirá donde guardar el archivo que contendrá la identificación de los símbolos y reglas de la gramática. Se deberá guardar ese archivo en la misma ruta de nuestro archivo de python.
      El archivo generado contendrá algo parecido a esto:

      Implementación de Gold Parser y Visual Basic

      Para implementar en Visual Basic se debe hacerse de la siguiente forma:

       

      • En la línea 1 se recibe la cadena que almacena el código que se compilara almacenándolo en este caso en una variable llamada Source.
      • En la línea 2 se carga el compilador.cgt que es el archivo que almacena la tabla de análisis, y se envía al Parser.
      • Luego se le asigna el código al Parser en la línea 3.
      • En la línea 5 se inicia un ciclo que evalué todas las reglas y estados que encuentre para la cadena de entrada.
      • La línea 6 se realiza el parseo.
      • La  línea 7 se ejecuta si encuentra errores léxicos.
      • La línea 10 si hay errores sintácticos.
      • La línea 12 se ejecuta si hay reducciones, a partir de allí se ejecuta cada regla correspondiente.
      • En la línea 20 es el estado de aceptación de las cadenas.
       
      A continuacion se muestra la asociación de cada clase a cada regla de la gramatica:




      En la siguiente imagen observamos la implementación de una clase que nos permitirá realizar el almacenamiento del segmento de código correspondiente a una instrucción IF.
      La instrucción If trabajada en este caso es sencilla pues solo contiene el siguiente formato:
               If (condicion)Then
               ‘Instrucciones a ejecutar
      End If

              If (condicion)Then
               ‘Instrucciones a ejecutar
      Else
                ‘Instrucciones a ejecutar
      End If



      Como vemos se implementa un If en visual basic.
      Se crean 3 variables que contengan la implementación del IContextMethod.
      La función Execute debe verificar cual fragmento es el que debe ejecutar asi que revisara si esta activa como verdadera la condición del If y si no pasara a verificar si esta activa la implementación del else.
      Se debe crear un formulario con un area de texto que reciba el código a ser analizado y un botón; en el método ejecutado al activar el evento clic del botón se debe colocar el siguiente codigo:
      Parser.DoParse(New StringReader(txtCodigo.Text))

      De esta forma se obtendra el codigo escrito en el text en este caso llamado “txtCodigo” y se enviara al parser a travez del método “DoParse(txtCodigo.text)” que fue analizado anteriormente.