jueves, 1 de mayo de 2008

Gramática que reconoce el lenguaje Java


Sígo con el bendito dolor de cabeza de compiladores 2, espero seá la última vez, pues nos han pedido de que leamos código en lenguaje Java, y pues lo optimicemos por el método de mirilla, y luego lo pasemos a tres direcciones de C++, y luego optimizarlo y........... todo esto utilizando JLex y Cup.

Bueno, el primer paso pues es tener la grámatica que pueda reconocer el código de Java, la cuál por medio de un amigo llego a mi manos( buena onda Yylex), ahora pues teniendo esa grámatica y traduciendola a mi antojo he logrado reconocer el código de Java.

Los archivos necesarios están disponibles aca-> DIRECCION que pertenece a la página de CUP que esta dirección -> CUP.

Lo único que tuve que crear fue el método sintáctico, el cual con un buen rato sale, bueno otra cosa recomendable es que vean la especifiación del lenguaje java, la cual esta disponible ACA .
Así se puede estudiar las partes en las que esta compuesta la gramática..

Éxitos.............y que Dios se apiede de nuestro código

miércoles, 9 de abril de 2008

Usando Janino para crear un FastScriptEvaluator (Ejecutar código de java en tiempo real)

Bueno, estos días angustiado programando mi proyecto de compiladores me tope que una parte debía generar reglas, o mejor dicho procedimientos que se resuelven en tiempo en real, pueden pertenecer a una clase o algo asi, digamos,l lo que venía es:

Duelo { Definir total_vida=vida+resistencia; vida=total_vida-daño; }
lo que logre convertir a java con mi parseador
public nodo_personaje duelo(nodo_personaje primero,nodo_personaje segundo)
{ int total_vida; primero.vida=total_vida-segundo.daño; return primero; }

Tengo eso en una cadena, y no que hacer con ello, es por eso que utilizo una clase llamada Janino, la cual permite ejecutar Script en tiempo real, entonces logre meter esto es una cadena la cual ejecutaría con el janino el cual pueden encontrar ACA , bueno el ejemplo que mas sirve es el
de CreateFastScriptEvaluator que está en la documentación de janino, áca esta el ejemplo:

 Foo f = (Foo) ScriptEvaluator.createFastScriptEvaluator(
new Scanner(null, new StringReader("return a + b;")),
Foo.class,
new String[] { "a", "b" },
(ClassLoader) null
);
System.out.println("1 + 2 = " + f.bar(1, 2));

Ahora podemos mandar a llamarla con este bloque, las líneas mas importante son las de new Scanner, ahi pueden meter código java, al menos yo le metí if, while y funciono de maravilla.
bueno, yo cambie mi interface de ejemplo y la hice de esta manera:

nodo es esta clase:
public class nodo { public String cadena="";
public nodo() {
}
}


La interface la deje asi

public interface fox { nodo bar(nodo a,nodo b); }

Y para ejecutar:
nodo un_nodo=new nodo(); nodo dos_nodo=new nodo();
un_nodo.cadena="beta";
dos_nodo.cadena="gama";

fox fx = (fox) ScriptEvaluator.createFastScriptEvaluator(

new Scanner(null, new StringReader(""+this.jTextField1.getText())),
fox.class,
new String[] { "a", "b" },
(ClassLoader) null // Use current thread's context class loader );

System.out.println("" + fx.bar(un_nodo,dos_nodo).cadena); //ejecutando



NOTA: ahi puse un jTextField para meter código de java, puse en jtextfield:
a.cadena=a.cadena+"$"+b.cadena; return a; y me ejecuto esa línea y dieron los resultado, de ahí varié el JtextField con if, con else while y funcióno, la verdad me sorprendí que cuando meti otro código, me lo ejecuto a la perfección(siempre y cuando metan código de java correctamente).

Y gracias a Dios funciono, recuerden que aunque sea un día antes todo llega a la luz, me costo un cacho usarla pero heme aquí, no quiero rendirme ahora seguiremos programando....

hasta llegar a ser ....

sábado, 5 de abril de 2008

Atributos Sintetizados en JLex y Cup

Llevando mi curso de compiladores 2, en laUSAC con el ingeniero Byron me di cuenta que el usaba mucho los atributos sintetizados de una manera libre, como de esta manera:

E -> T + F { E.valor= T.valor+ F.valor}

  • El no terminal “E” recibe valores de atributos de “T” y “F”, todos son el mismo tipo de no terminal, entonces me dije, como puedo lograr eso, ya que solo he usado como si fuera String o Integer, decidí lograrlo de alguna manera. Logre crear mis propios atributos sintetizados a mi manera, este es uno de los métodos:En el archivo que usen para el análisis léxico despues de agregar los import y todas las librerías y paquetes pueden declarar una clase de esta manera:

import java_cup.runtime.Symbol;

class cadena
{
public String cad;

public cadena(String cad_){
cad=new String(cad_);
}
public cadena(String cad1_,String cad2_)
{
cad=new String(cad1_+”,”+cad2_);
}
}

  • Ahora como vemos tenemos esta clase en el archivo léxico, nos disponemos ahora a ir al archivo donde hagan el análisis sintáctico , y en la definicions de no terminales declaran de esta manera:

non terminal cadena expr_list, expr_part;

  • Ahora pasaremos a usarlo, esta es la parte que a todos nos llama la atención, como usar los atributos


expr ::= expr_list:a {:System.out.println(a.cad);:};

expr_list::= expr_list:a COMA expr_part:b {:RESULT=new cadena(a.cad,b.cad);:}
| expr_part:a {:RESULT=new cadena(a.cad);:}
;

expr_part ::= id:a {:RESULT=new cadena(a);:};

Nota: id devuelva una cadena de letras y COMA es lo que indica el nombre, este ejemplo reconoce una cadena de palabras separadas por COMA, pero pueden ser creativo, en su clase creada pueden meter lo que quieran, Arrays,Vector etc, todo lo que Java les permita.

Además, si tenemos la clase que deseamos sintetizar en un paquete, fácilmente se puede usar igual, en el archivo que utilicen para el análisis sintáctico declaren ese paquete o la clase a usar import package.clases_a_usar; y en el área de no terminales pueden declararlo libremente, non terminal clase_a_usar E; y listo.

Acá les dejo el ejemplo si desean compilarlo y probarlo, recuerden que en lexico.lex esta la clase y en sintacticup.cup en el área de no terminales esta declarado.

Ejemplo: Atributos sintetizados

sábado, 6 de octubre de 2007

Kurikinton fox, un prodigioso de la guitarra

Bueno, a mi me gusta tocar la guitarra y siempre he admirado a los chavos que suben sus interpretaciones de rock a youtube, tocando magistralmente como se debe, algunos tocan exítos famosos, otros juegos de video y anime. Pero hasta hoy vi a un maestro para interpretar la música de los videojuegos: "Kurikinton Fox", interpréta música de videos y anime, no pude creerlo al escuchar un viejo exito de ninja gaiden, recuerdos nostálgicos del juego de Final Fantasy VI, y para terminar una interpretación del anime Suzumiya Haruhi. puede entrar a su sitio y bajar las tablaturas y partituras. Enlace: http://kurikinton-fox.com/

Una particularidad de este artista es que su cubre con una máscara de zorro, motivos no se, talvez es algo tímido. Empecemos con la demostración:

- Final Fantasy VII The Decisive Battle:
La música de los enemigos mas fuertes de este juego


- F. Chopin Ninja Gaiden
La nostálgica música de Ninja Gaiden


-God Knows Suzumiya Haruhi
Kurikinton fox al ver los covers de muchas personas, decídio hacer el suyo, que en mi opinión es el mejor...



Porfavor disfrutenlo como yo..... ; )

viernes, 5 de octubre de 2007

Ubuntu por internet

Desde hace por lo menos 10 meses he utilizado ubunto con mi conección ASDL, todo estaba de lujo, cualquier cosas que necesitára podia conseguirla buscando en google, y luego el famoso "sudo apt-get install"; hasta que llego mi desgracia, mi aparato de internet se estropeo, y debido a que no tenía reparación, habia que conseguir uno nuevo.
Pero el nuevo aparato no tenia salida ASDL, era USB tipo moden telefónico, y para variar solo tenia el instalador para window$; me dije, "puede ser que funcione con wine" pero no funcionó, luego intente ver en google como instalar el controlador, y la resolución propuesta no me ha funcionado, no tienen idea que frustación ya que ahora debo buscar los paquetes mientras navego en window$, y cuando intento instalar en ubuntu hay problemas con las dependencias........

Bueno he visto soluciones, dentro de unos días instalaré el OpenSuse más reciente, puesto que varios foros y blogs mencionan que ellos puedan reconocer este USB moden telefónico que preferiría no decir la marca, pero los usuarios de telefónica movistar creo que sabrán a que me refiero.........

domingo, 27 de mayo de 2007

MEGATOKYO Manga/Comic


Este manga de Megatokyo, es uno de las historiestas hechos por un americano, que en verdad me ha dejado impactado, su historia los personajes, todo me ha fascinado.
Una pequeña sinópsis:
Megatokyo narra la historia de dos amigos Piro y Largo que se encaminan a un viaje espirítual a tokyo (en verdad iban a buscar juegos de videos y aparatos electrónicos), pero cuando se han dado cuenta, se han quedado sin ningún centavo, para poder volver a América.
Al principio se hospedan donde el buen amigo de Piro: Tsubasa, los acoge pero económicamente no puede mantener la situacíon de los huespedes debido a que el también es un comprador compulsivo de anime y juegos de videos.
Con el tiempo Piro y Largo se hacen de amigos y algun tipo de trabajo pero con su obsesión por juegos y aparatos electrónicos les es muy díficil regresar, dado que el dinero lo usan ya sea en juegos o cerveza.
Al principio talvez creerán que esta historia es una burla de los otakus(super aficionados al manga, juego, anime y utiliza la mayor parte de su tiempo en esto), pero en mi opinión es mas una forma fresca de ver como hay que cosas que nos apasionan.

La historia presenta una variedad de personajes muy interesantes y muy misteriosos, extensiones de play station 2.

!!Y lo mejor de todo, es en línea.....no hay que descargarlo(si te gusta puedes guardarla en tu pc, en lo personal lo hice)!!

Para verla en inglés: MEGATOKYO INGLES
nota: El autor continúa haciendola, asi que no esperen ver el final todavía, ahorita(lleva por lo menos 1004 páginas dibujadas)

Se que a algunos nos cuesta el inglés, pero no hay que limitarnos, en este mundo del internet y la comunicación debemos estar listo para todos, por cierto saludos al creador de MegaTokyo Fred Gallagher.

Anime + Metal

Estos días vagaba por youtube, y encontré algo que me lleno demasiado la atención y es que encontre openings de retro-anime(anime viejo), pero para mi sorpresa la banda que tocaba el opening, era Animetal, gran banda que se dedica a hacer covers con un buen ritmo metal, bueno, escuchen por ustedes mismo.