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.

sábado, 20 de octubre de 2012

On 18:31 by Unknown in ,    No comments
Algunas sugerencias para trabajar de forma mas fácil con cup o la discusión de algunos errores se trataran a continuación:

1. Un consejo útil para distinguir a la hora de trabajar en la gramática es tener todos los no terminales con mayúsculas y los terminales con minúsculas o viceversa para tener una fácil distinción entre ambos.

2. Podemos tomar el valor de un no terminal y guardarla en una variable colocando dos puntos y luego la variable en donde almacenaremos el valor. Ejemplo:

PORTADA ::= abretag portada PROPORTADA:xxx cierretag PARRAFO

se guarda en la variable xxx el valor de lo que tiene PROPORTADA.


3. "RESULT" es una palabra reservada de cup que lo que hace es ir almacenando valores en ella, es como un string que va concatenado cadenas y puede ser bastante util si se realiza un compilador que haga la tarea de traductor. Por ejemplo en un proyecto había que leer un lenguaje html pero en español y con palabras propias, es decir un lenguaje inventado y eso pasarlo a html 5 y la solucion fue utilizar RESULT para ir traduciendo y formar una gran cadena con código html.
Ej:

lo que hace la produccion anterior es que la variable  xxx toma el valor de PROPORTADA y luego ese valor se imprime y se le asigna a la variable RESULT junto con los demas parametros html5 que se necesitan.



como se puede el no terminal PROPORTADA trae el valor de FONDO y el no terminal FONDO toma su valor de:



por lo tanto en no terminal PROPORTADA utilizado en la primera produccion mostrada tendria un valor de:
" background-color: blue "
y el result mostrado de la primera produccion seria:

<body style="background-color: blue ">

y asi sucesivamente se puede ir creando un gran string que tenga como resultado lo que hemos compilado y todo almacenado en la variable RESULT y tomando lo valores ascendentemente como se vio en el ejemplo anterior.

4. La mejor herramienta para trabajar con jflex y Cup es definitivamente notepad++ un gran editor de texto bastante sencillo y que puede ser util para trabajar con estas herramientas con las cuales necesitamos un editor de texto y notepad o wordpad son demasiado sencillos.

5. Errores comunes:
   
    5.1 syntax error:  Lo mas común es que se nos olvide colocar punto y coma al final de una producción.

    5.2 El famoso y dolor de cabeza "Shirt/reduce conflict, que nos muestra algo así:


Este error sucede cuando tenemos producciones que van a terminar a los mismos estados es decir van a derivar a los mismos terminales siguiendo una producción diferente pero al reducir siempre dan lo mismo; son bastantes difíciles de encontrar porque revisamos las producciones vemos que no son iguales y nos preguntamos que pasa?  La solución es analizar o reducir manualmente las producciones en la que nos tira los errores y ver como quedan ya reducidas ahí nos daremos cuenta del error y habrá que cambiar alguna de las dos producciones para que se pueda tomar una única ruta para la reducción.

   5.3 mas que ser errores son los "warning' que nos muestra cuando declaramos no terminales y nunca los usamos en las producciones, son indefensos pero si tenemos otro tipo de errores ya son molestos verlos en consola por lo que solamente debemos quitar los no terminales que no usamos y listo.

Estos son los errores mas comunes que se dan en cup, claro que hay mas pero estos son con los que comúnmente me enfrente.

Por ultimo hay una presentación muy buena de la cual yo saque un post sobre utilizar una clase java para compilar archivos de jflex, en la presentación se muestra también como utilizar una clase para compilar desde un ide archivos de cup y esta muy bien detallada, en enlace es:



0 comentarios:

Publicar un comentario