Está en la página 1de 3

ANALISIS DE HERRAMIENTAS

PARA LA CONSTRUCCION DE COMPILADORES

En la actualidad no es posible pensar en la realizacin computacional de un


procesador de lenguajes, como por ejemplo, compiladores, intrpretes, etc.,
sin utilizar una herramienta instrumental, tal como un generador de
compiladores. Este tipo de herramientas existe desde hace aos, y han ido
evolucionando junto con la propia evolucin de la Ciencia de la
Computacin, encontrndonos en la actualidad muchos y diferentes tipos de
generadores de compiladores, que en general se corresponden con los
entornos de desarrollo de aplicaciones y con los paradigmas de la
programacin.

Uno de los generadores ms conocidos y uno de los ms utilizados en


nuestro pas es YACC, sin embargo, aquel que ha hecho uso de ambientes
de desarrollo modernos para lenguajes de programacin con
representaciones grficas para las jerarquas de instancias de conceptos del
lenguaje de programacin, puede sentirse incmodo al usar una
herramientas al estilo de YACC.

Caracterizacin de los generadores estudiados


Al sopesar varias herramientas para el desarrollo de procesadores de
lenguajes, los aspectos ms relevantes y definitorios en la decisin de cual
escoger son:
Modelos tericos:
De ellos dependern las clases de lenguajes que podrn ser definidas en las
especificaciones, y reconocerse con el procesador generado. Estos modelos
pertenecen a una de las dos categoras siguientes:
1. modelos para definir el lenguaje.
2. modelos para el reconocimiento de las cadenas del lenguaje.
Lenguaje de especificacin:
Dicta el modo de expresar y/o representar los conceptos de los modelos
soportados por la herramienta, y por tanto, influye en la forma en que
puede editarse una especificacin. Un factor de menor relevancia, pero de
alguna influencia, son las convenciones notacionales incluidas en el
lenguaje de especificacin, pues algunas personas prefieren
A ::=
Y otros prefieren
A
YACC, BISON y ZYACC
Creado en 1974, YACC casi lleg a dominar la escena de los generadores de
compiladores, de manera tal que muchas herramientas usan un lenguaje de
especificacin parecido al suyo, y otras son clones de YACC para la
generacin de compiladores con otros lenguajes de programacin.
Uno de los clones ms conocidos de YACC es el GNU bison, [GNU98 a,b;
GNU99 a,b] diseado con el objetivo de reemplazar a YACC en las
distribuciones del sistema operativo libre desarrollado por el Proyecto GNU.
Una herramienta compatible con YACC, pero que hace extensiones muy
interesantes, es el ZYACC. Estas mejoras son el soporte de una forma
reducida de atributos heredados, referencias a los atributos por nombre,
"lookahead" semntico (que los llama pruebas semnticas).

PARSER GENERATOR
Parser Generator[BUM99] es un pequeo ambiente integrado para el trabajo
con YACC y LEX bajo Windows. Incluye sendas implementaciones
("flavours") de ambas herramientas hechas por el mismo autor, a las cuales
llama AYACC y ALEX, y que adicionan ciertas caractersticas atractivas al
producto, pero por lo dems padece de las mismas deficiencias de YACC y
LEX.

VISUAL PARSE++
Para el anlisis sintctico se usan expresiones regulares con una pila, dando
la posibilidad de definir smbolos terminales a ignorar. El anlisis sintctico
se especifica mediante gramticas libres del contexto de la clase LALR (1)
.La implementacin del reconocimiento permite que pueda hacerse evento
a evento (la funcin de anlisis retorna el evento sucedido); o de una vez,
retornando xito o fracaso. El resto de las fases de procesamiento del
lenguaje se deben implementar en el lenguaje destino insertndolas en el
cdigo generado. El lenguaje de destino de la generacin puede ser C, C++,
Java, Delphi y Visual Basic. En los lenguajes que soportan el concepto de
clase, la implementacin consiste en un conjunto de clases especializadas.
Aquella que implementa el anlisis sintctico contiene una funcin "reduce"
en la cual se inserta el cdigo correspondiente a las acciones semnticas, y
el objeto que retorna se inserta en la pila del autmata.

PAISLEI IDE y LPM


LPM es un lenguaje de especificacin de reconocimiento de patrones que es
inmerso, interpretado y declarativo. Inmerso porque slo existe dentro de un
lenguaje de programacin anfitrin. Declarativo porque los patrones se
aplican y coinciden (se reconocen) o fallan, no tiene la nocin de ejecucin,
aunque s permite el accionamiento de cdigo del lenguaje anfitrin en
puntos claves del reconocimiento. En beneficio de la eficiencia de la
traduccin de la especificacin su notacin es post-fija, la cual puede llegar
a ser engorrosa. Todo lo que tiene LPM son clusulas, reglas, macros y
clases.

MJLNER
"Mjlner BETA System" es un ambiente de programacin dirigido
primariamente al soporte de la programacin orientada a objetos, e integra
alrededor del compilador para el lenguaje de programacin orientado a
objetos BETA, un navegador y un editor de programas, un depurador de
errores, un constructor de interfaces grficas, una herramienta CASE que
usa UML, y un generador de analizadores (el sistema de
metaprogramacin).

JAVACC
JavaCC es una herramienta creada por Sun Microsystems. Sigue el estilo de
herramientas independientes, cuya interaccin es por la lnea de comandos.
Usa expresiones regulares para el anlisis lexicogrfico y gramticas LL(k) L-
atributadas para el anlisis sintctico. Las gramticas incluyen la operacin
de clausura y la estructura opcional, pudindose insertar las acciones
semnticas en cualquier lugar de la produccin. Para el reconocimiento usa
"lookahead" local, que puede ser combinado con "lookahead" sintctico y
"lookahead" semntico. definido en la gramtica.