Un poco de todo lo relacionado al area de la informatica... programacion, ocio, configuraciones, en fin herramientas que pueden ser utiles para un estudiante de ingenieria en ciencias y sistemas.

viernes, 19 de octubre de 2012

On 11:47 by Unknown in ,    No comments

CUP es una herramienta utilizada para la generación de analizadores sintácticos para java y una de las mas usadas y comunes.
Para conocer a fondo que es cup pueden ir a CUP.

A continuación voy a explicar la estructura de un archivo de cup así como su sintaxis, hay una buena cantidad de manuales en internet acerca de esto pero el objetivo del blog es hacerlo de la manera mas resumida y entendible posible ya que muchas veces (casi siempre) estamos escasos de tiempo y no podemos ponernos a leer un manual de 20 o más paginas.

Archivo de entrada para Cup:
Consta de 5 partes las cuales son:
1- definición de paquetes y librerías
2- Código de usuario
3- Declaración de terminales y no terminales
4- Declaración de precedencia
5- Definición de símbolo inicial y reglas de producción

Se podría decir que esa es la estructura general y lleva ese orden a excepción del código de usuario el cual puede ser usado entre las producciones.

1-     La definición de paquetes y librerías se refiere a los "package" e "imports" en java, los cuales serán útiles cuando se agreguen los archivos generados por cup a nuestro proyecto en java.
2-     Código de usuario:  Lo utilizamos para escribir código java dentro de el parser, puede ser action code o parser code.
La sintaxis que utiliza es:
parser code {: //código java :}  o  action code {://código java:}

3-     Terminales y No terminales: La declaración de los símbolos terminales de la gramática y de los no terminales.
4-     La declaración de precedencia se realiza si es necesaria, algunas veces no es necesaria pero otras si.
5-     En la ultima parte se inicia con el símbolo inicial de la gramática y se escribe toda la gramática con notación bnf.

Al final de cada producción podemos incluir código java si queremos que se ejecute una acción al llegar a dicha producción, por ejemplo:

BEGIN ::= COMPLETO {:System.out.println(“Se llego a la produccion inicial”);:};

Aquí se tiene la producción BEGIN::= COMPLETO y lo que se hará es imprimir un string cuando se llegue a tal producción, el código se coloca dentro llaves así ------>  {://código aquí:}.

A continuación un pequeño ejemplo de un archivo de cup el cual contiene la sintaxis comentada y muestra de forma mas clara como se utiliza.
Nota: la sintaxis genera un parser para reconocer sentencias if anidadas.


0 comentarios:

Publicar un comentario