Y Compiladores, para que p****?…

… Esto es lo que dice mucha gente en informatica, que estudia o estudió Ingeniería en Sistemas o Informática, o Ciencias de la Computacion, o como quiera llamarle, tiene cierto odio/resentimiento/ahuevamiento con ciertos cursos como Estructuras de Datos, Administracion de Archivos, y en general aquellos que están directamente relacionados con la ciencia computacional.

Sin embargo, de todos estos cursos, los que están a la cabeza son definitavemente los cursos relacionados Teoría de Compiladores, al cual mucha gente califica como  “Inaplicables”, “Inservibles”, “basura”, “m**rda” y va en descenso… Sobre todo en países como los nuestros, con sus problemas económicos, que no  invierten casi nada en Investigación y Desarrollo, haciendo que los cursos de Compiladores queden siempre a la cabeza de los listados de las encuestas de “cursos que se deberían eliminar de la carrera”.

Desafortunadamente, yo soy uno de esos pocos freaks a los que si les gusta esos temas, mi pasíon por ésta teoria de compiladores nació desde que conocí el curso de Lenguajes Formales y Autómatas (en realidad no le pongo el nombre actual que le dan en mi universidad por que suena muy estúpido), el cual se puede decir que es un curso introductorio a compiladores (Compiladores 0 como le suelo decir), y desde ahí me gusto la idea de transformar algo tan natural como el lenguaje humano a una serie de instrucciones capaces de ser interpretadas por el ordenador.

Me pareció bastante interesante,  que en el lugar donde laboro actualmente, se me asignó un proyecto ya hace algunos meses, en donde, se requiere el manejo de ciertas fórmulas para calcular el precio de energía de ciertas cosas segun cierta condicion.  Lo interesante es que estas fórmulas, obviamente, estarán persistidas en una base de datos de dudosa estabilidad (no digo la marca pero ya se imaginarán cual és, y lamentablemente sobre esa trabajamos), en formato varchar, o sea puro texto.

Ahí es donde viene lo bueno, toca crear algún tipo “intérprete” para las mismas, ya que, aunque va a tener un conjunto de sentencias y expresiones bastante sencillas, me niego a hacerlas “a pie” por tres puntos:

  1. Suponiendo que las tenga que hacer a pié, tendría que hacer un analizador tanto léxico como sintáctico “a pié”. algo no factible tanto por cuestion de tiempo como por cuestion de numero de “bugs” lo cual seguramente muchos que estudien en otras universades hubieran hecho “a pie”.
  2. A lo anterior, se agrega que existen muchas herramientas de análisis léxico y sintáctico bastante buenas (no solo la basura de “jlex” y “cup” que tanto alardean actualmente en mi universidad). los cuales con simplemente escribir una gramática y un conjunto de expresiones regulares, así como sus respectivas acciones semánticas para cada una de éstas, se puede desarrollar intérpretes de una manera bastante sencilla y rápida.
  3. Y la mas importante… Si recibí 2 benditos cursos de compiladores en la universidad. por que no poner en práctica lo aprendido?  Seria una gran estupidez no aprovechar la oportunidad de aplicar lo aprendido en los que quizá sean los cursos más dificultosos de la carrera (aunque desde mi punto de vista hay otros cursos peores, pero por culpa de la falta de profesionalismo de quienes las imparten).

La tarea no iba a ser facil, pues la plataforma sobre la que debería correr era .NET, y aunque existen diversas opciones para generación de compiladores bajo esta plataforma, en mi evaluación me dí cuenta que ninguna se ajustaba mejor que ANTLR.  Por qué tome esta decisión?

  1. Es software libre, con lo cual estoy seguro, que gracias a su licencia, lo generado lo voy a poder redistribuir en la implementación de mi intérprete para el producto que se va a vender.
  2. Es portable, el generador está desarrollado en Java, por lo cual se puede generar código desde cualquier plataforma compatible con la JVM.
  3. Es multilenguaje y orientado a objetos. Es decir, puede generar código para una gran cantidad de lenguajes orientados a objetos (Java, Python, Ruby, C++, C#, etc) y como la plataforma “destino” iba a ser .net, era necesario una herramienta que respetase este paradigma.
  4. es sencillo. Pues en el mismo archivo se define tanto el lexer como el parser, enlazándolos de una manera transparente. Eliminando aquella necesidad que con herramientas como Yacc y Lex de tener que interfazar ambos analizadores.
  5. Es eficiente. Gracias a que las gramáticas que escribimos en éste deben ser LLk compatibles, permite generar codigo bastante eficiente por su naturaleza descendente.
  6. Incluye un IDE para el desarrollo de gramáticas bastante bueno.
  7. Y algo mas avanzado, Genera Arboles de Sintaxis Abstracta (AST por sus siglas en ingles) on the fly.

En conclusión este post es para demostrar que, quien haya pensado que toda la teoría de compiladores que le fue impartida en la Universidad no iba a tener aplicación, esta equivocado, eventualmente pueden venir proyectos en donde se requiera el uso de lo aprendido en éstos. Esto es uno de los detalles que nos aventajan de los demás.

9 comentarios

  1. A mi punto de vista Compiladores2 es importante en la parte de generación de codigo 3 direcciónes porque conociéndolo es muy fácil luego pensar en el algorítmo inverso; osea decompilar.

    Porque decompilar?

    – Solucionar bugs
    – Crear keygens
    – Crear nuevas versiones

    Eso

  2. Me gusto tu post y el punto de vista de ver las cosas, sobre todo por el comentario de que hay cursos peores, pero por la falta de profesionalismo de los catedraticos! tenes toda la razon,
    salu2

  3. Muy buenos puntos a favor que diste, en especial eso de que somos mejores que las demás “universidades” privadas de Guatemala… buenooo, no lo dijiste así, pero eso quisiste decir, yo lo se, y lo acepto, jajaja

  4. @ppedrodom: Hay una onda vos, yo he conocido infinidad de gente en la USAC que no merece estar hasta donde va en la carrera, simplemente estan en sistemas porque un dia escucharon que daba pisto y llevan la carrera como un requisito sin tener la pasion, muchas de esas personas odian los cursos de ciencias de la computacion o se quejan cuando se les asignan tareas en las cuales tendran que hacer más de 10 clicks, por eso no estoy de acuerdo que digas que somos mejores que otras universidades, yo considero a la USAC y muchos cursos de sistemas como basuras, podes encontrar infinidad de problemas, como los que pone el profe en su blog, y mucha gente que estudia en otras universidades que he conocido tienen esa pasion por informatica que hace que estudien e investiguen por su cuenta, al final como dijo un amigo ex-estudiante de la san carlos que conoci hace poco, ” . . . yo no se porque tanto se peleean si al final a la calle todos salimos a comer mierda y depende que tanto lograste estudiar o aprendes por tu cuenta si llegas a ser mejor que los demas”

  5. Puta mano, hoy si me dejaste mula, de pensar que asi es la vida laboral pues mejor a estudiar mas y pelarsela menos, jaja, lo que si tenes razon es que lenguajes es un muy buen curso introductorio, aparentemente es dificil pero media ves le agarras la onda lo logras descifrar, de compi2 todavia no opino porque no lo he llevado

  6. Pues yo creo que cuando alguien habla mal de los compiladores, es mas por viejos rencores, jajaja…

    En fin, me parece interesante el post, pero no deja de llamarme la atencion el hecho de que califiques a jlex y cup de “basura”. Que haya otras herramientas que hagan mejor las cosas, no quiere decir que estas sean basura…

    Saludos

  7. pienso que el propósito de este artìculo no tiene nada que ver con que si somos mejores o no. Conocí un lic. en farmacia genio en software libre. El conocimiento no depende de donde estudiés, sino de cuánto querás aprender.

    Por otro lado, no voy a decir que las progras fueron fáciles, pero lenguajes fue mi primer gran cuentazo en la carrera. Al final, no hay conocimiento que no sirva en algún momento. Sin embargo, a veces a uno le cuesta recordar eso. Por eso me gustò mucho el artículo, una y punto de vista de alguien mas adelante que uno nunca cae mal…

  8. yo estoy emocinado de hacer uno,

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: