Sunteți pe pagina 1din 2

ANALISIS DE HERRAMIENTAS

PARA LA CONSTRUCCION DE COMPILADORES

En la actualidad no es posible pensar en la realización computacional de un procesador


de lenguajes, como por ejemplo, compiladores, intérpretes, etc., sin utilizar una
herramienta instrumental, tal como un generador de compiladores. Este tipo de
herramientas existe desde hace años, y han ido evolucionando junto con la propia
evolución de la Ciencia de la Computación, encontrándonos 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 programación.

Uno de los generadores más conocidos y uno de los más utilizados en nuestro país es
YACC, sin embargo, aquel que ha hecho uso de ambientes de desarrollo modernos para
lenguajes de programación con representaciones gráficas para las jerarquías de
instancias de conceptos del lenguaje de programación, puede sentirse incómodo al usar
una herramientas al estilo de YACC.

Caracterización de los generadores estudiados


Al sopesar varias herramientas para el desarrollo de procesadores de lenguajes, los
aspectos más relevantes y definitorios en la decisión de cual escoger son:
• Modelos teóricos:
De ellos dependerán las clases de lenguajes que podrán ser definidas en las
especificaciones, y reconocerse con el procesador generado. Estos modelos
pertenecen a una de las dos categorías siguientes:
1. modelos para definir el lenguaje.
2. modelos para el reconocimiento de las cadenas del lenguaje.
• Lenguaje de especificación:
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 especificación.
Un factor de menor relevancia, pero de alguna influencia, son las convenciones
notacionales incluidas en el lenguaje de especificación, 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
especificación parecido al suyo, y otras son clones de YACC para la generación de
compiladores con otros lenguajes de programación.
Uno de los clones más conocidos de YACC es el GNU bison, [GNU98 a,b; GNU99 a,b]
diseñado 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" semántico (que los llama pruebas semánticas).

PARSER GENERATOR
Parser Generator[BUM99] es un pequeño 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 características atractivas al producto, pero por lo demás padece de las
mismas deficiencias de YACC y LEX.

VISUAL PARSE++
Para el análisis sintáctico se usan expresiones regulares con una pila, dando la
posibilidad de definir símbolos terminales a ignorar. El análisis sintáctico se especifica
mediante gramáticas libres del contexto de la clase LALR (1) .La implementación del
reconocimiento permite que pueda hacerse evento a evento (la función de análisis
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
insertándolas en el código generado. El lenguaje de destino de la generación puede ser
C, C++, Java, Delphi y Visual Basic. En los lenguajes que soportan el concepto de clase,
la implementación consiste en un conjunto de clases especializadas. Aquella que
implementa el análisis sintáctico contiene una función "reduce" en la cual se inserta el
código correspondiente a las acciones semánticas, y el objeto que retorna se inserta en
la pila del autómata.

PAISLEI IDE y LPM


LPM es un lenguaje de especificación de reconocimiento de patrones que es inmerso,
interpretado y declarativo. Inmerso porque sólo existe dentro de un lenguaje de
programación anfitrión. Declarativo porque los patrones se aplican y coinciden (se
reconocen) o fallan, no tiene la noción de ejecución, aunque sí permite el accionamiento
de código del lenguaje anfitrión en puntos claves del reconocimiento. En beneficio de la
eficiencia de la traducción de la especificación su notación es post-fija, la cual puede
llegar a ser engorrosa. Todo lo que tiene LPM son cláusulas, reglas, macros y clases.

MJØLNER
"Mjølner BETA System" es un ambiente de programación dirigido primariamente al
soporte de la programación orientada a objetos, e integra alrededor del compilador para
el lenguaje de programación orientado a objetos BETA, un navegador y un editor de
programas, un depurador de errores, un constructor de interfaces gráficas, una
herramienta CASE que usa UML, y un generador de analizadores (el sistema de
metaprogramación).

JAVACC
JavaCC es una herramienta creada por Sun Microsystems. Sigue el estilo de
herramientas independientes, cuya interacción es por la línea de comandos.
Usa expresiones regulares para el análisis lexicográfico y gramáticas LL(k) L-atributadas
para el análisis sintáctico. Las gramáticas incluyen la operación de clausura y la
estructura opcional, pudiéndose insertar las acciones semánticas en cualquier lugar de
la producción. Para el reconocimiento usa "lookahead" local, que puede ser combinado
con "lookahead" sintáctico y "lookahead" semántico. definido en la gramática.

S-ar putea să vă placă și