El documento describe las herramientas computacionales para el diseño de lenguajes de programación y compiladores, incluyendo generadores de analizadores sintácticos y léxicos, motores de traducción orientados a la sintaxis, generadores de código, motores de análisis de flujos de datos y kits de herramientas para la construcción de compiladores. También introduce los metacompiladores como compiladores de compiladores y ejemplos como Lex, YACC, Flex y Bison.
Original Description:
Investigación Documental Sobre Las Herramientas Computacionales Que Existen Para El Diseño de Un Lenguaje de Programación y de Un Compilador
Original Title
Investigación Documental Sobre Las Herramientas Computacionales Que Existen Para El Diseño de Un Lenguaje de Programación y de Un Compilador
El documento describe las herramientas computacionales para el diseño de lenguajes de programación y compiladores, incluyendo generadores de analizadores sintácticos y léxicos, motores de traducción orientados a la sintaxis, generadores de código, motores de análisis de flujos de datos y kits de herramientas para la construcción de compiladores. También introduce los metacompiladores como compiladores de compiladores y ejemplos como Lex, YACC, Flex y Bison.
El documento describe las herramientas computacionales para el diseño de lenguajes de programación y compiladores, incluyendo generadores de analizadores sintácticos y léxicos, motores de traducción orientados a la sintaxis, generadores de código, motores de análisis de flujos de datos y kits de herramientas para la construcción de compiladores. También introduce los metacompiladores como compiladores de compiladores y ejemplos como Lex, YACC, Flex y Bison.
Realizar una investigacin documental sobre las herramientas computacionales que existen
para el diseo de un lenguaje de programacin y de un compilador. Posteriormente, elaborar
una reflexin sobre dicha informacin con la finalidad de participar en este foro. Recuerde que siempre debe indicar las citas y las referencias correspondientes de donde se obtuvo esta informacin.
Previo a abordar el tema de las herramientas para el diseo de un lenguaje de
programacin y un compilador hay que comprender el significado de ambos. Jess Rodrguez (2003) en su libro de Introduccin a la Programacin nos da una muy buena explicacin del significado de un lenguaje de programacin y lo que lo compone. Cada ordenador entiende un cierto conjunto de instrucciones elementales (el lenguaje maquina), no obstante para facilitar la tarea del programador se dispone tambin de lenguajes de alto nivel ms fciles de manejar y que no dependen del diseo especifico del ordenador. Para definir un lenguaje de programacin es necesario especificar:
Conjunto de smbolos y palabras clave utilizables
Reglas gramaticales para construir sentencias (instrucciones, ordenes) sintctica y semnticamente correctas. a) Sintaxis. Conjunto de normas que determinan como escribir las sentencias del lenguaje. b) Semntica. Interpretacin de las sentencias. Indica el significado de las mismas. (p. 4)
Las reglas gramaticales que se necesitan seguir para la construccin de
sentencias computacionales como se nos mencion previamente son muy importantes a la hora de indicar instrucciones a una computadora ya que sta trabaja bajo ciertas normas previamente establecidas, es por ello de que se deben respetar las reglas sintcticas y semnticas. Para facilitar el anlisis de stas reglas y que el compilador definido segn Sergio Rojas (2005) como aquel traductor que tiene como entrada una sentencia en lenguaje formal y como salida tiene un fichero ejecutable, es decir, realiza una traduccin de un cdigo de alto nivel a cdigo no tenga problemas para ejecutar las ordenes y sean efectivas de realizar para el procesador. Las herramientas que podemos utilizar para que estas reglas se respeten y que el lenguaje de programacin se convierta en lenguaje maquina por medio del compilador, Alfred Aho, Monica Lam, Rivi Sethi & Jeffrey Ullman (2008) nos las clasifican en su libro Compiladores de manera general de la siguiente forma: Al igual que el desarrolladores de software, el desarrollador de compiladores puede utilizar para su beneficio entornos de desarrollo de
software modernos que contienen herramientas como editores de
lenguaje, depuradores, administradores de versiones, profilers, ambientes seguros de pruebas, etctera. Adems de estas herramientas generales se han creado herramientas ms especializadas para ayudar a implementar las diversas fases de un compilador, algunas de uso comn son: 1. Generadores de analizadores sintcticos (parsers), que producen de manera automtica analizadores sintcticos a partir de una descripcin gramatical de un lenguaje de programacin. 2. Generadores de escneres, que producen analizadores de lxicos a partir de una descripcin de los tokens de un lenguaje utilizando expresiones regulares. 3. Motores de traduccin orientados a la sintaxis, que producen colecciones de rutinas para recorrer un rbol de anlisis sintctico y generar cdigo intermedio. 4. Generadores de generadores cdigo, que producen un generador de cdigo a partir de una coleccin de reglas para traducir cada operacin del lenguaje intermedio en el lenguaje mquina para una mquina destino. 5. Motores de anlisis de flujos de datos, que facilitan la recopilacin de informacin de cmo se transmiten los valores de una parte de un programa a cada una de las otras partes. 6. Kits (conjuntos), de herramientas para la construccin de compiladores, que proporcionan un conjunto integrado de rutinas para construir varias fases de un compilador. (p. 12)
Por otra parte, Sergio Glvez (2005) en Traductores y Compiladores nos
introduce otra herramienta a la que denomina meta compiladores y las define de la siguiente manera. Un meta compilador es un compilador de compiladores. Se trata de un programa que acepta como entrada la descripcin de un lenguaje y produce el compilador de dicho lenguaje. Hoy por hoy no existen meta compiladores completos, pero si parciales en los que se acepta como entrada una gramtica de lenguaje y se genera un autmata que reconoce cualquier sentencia de lenguaje. A este autmata podemos aadirle cdigo para completar el resto del compilador. Ejemplos de meta compiladores son Lex, YACC, Flex, BISON, JavaCC, JLex, Cup, PCCTS, Medise, etc. Los meta compiladores se suelen dividir entre los que pueden trabajar con gramticas de contexto libre y los que trabajan con gramticas regulares. Los primeros se dedican a reconocer la sintis del lenguaje y
los segundos trocean los ficheros fuente y lo dividen en palabras. (p.
10). Este tipo de herramientas son muy tiles en cuando es necesario el diseo y la construccin de un lenguaje de programacin, es por ello que Sergio tambin explica la funcionalidad de manera general de algunas de las herramientas mencionadas previamente. PCLex es un meta compilador que genera la parte del compilador destinada a reconocer las palabras reservadas. PCYACC es otro meta compilador que genera la parte del compilador que informa sobre si una sentencia del lenguaje es vlida o no. JAVACC es un meta compilador que ana el reconocimiento de palabras reservadas y la aceptacin o rechazo de sentencias de un lenguaje. PCLex y PCYACC generan cdigo C y admiten descripciones de un lenguaje mediante gramticas formales, mientras que JAVACC Produce cdigo java y admite descripciones de lenguajes expresadas en notacin BNF (Backus Naur Form). (p. 10). Estas herramientas han sido bastante utilizadas para la construccin de lenguajes de programacin, sobre todo aquellos que son especializados en lenguajes especficos para hardware especfico como sistemas embebidos, aunque pueden ser utilizadas para lenguajes ms robustos con mucha mayor capacidad de desarrollo. Es indispensable conocer sobre la finalidad de estas herramientas y el entorno en que desempean debido a que ser til para el uso posterior en el curso. Referencias. Introduccin a la programacin. Teora y Prctica. Jess Javier rodrguez Sala 2003. Pgina 4. Alfred Aho, Monica Lam, Rivi Sethi & Jeffrey Ullman (2008). Compiladores: Principios, tcnicas y herramientas. (2da Ed.) Pearson. Pgina 19. Traductores y Compiladores Con Lex/Yacc, JFlex/Cup Y Javacc. Sergio Glvez Rojas 2005. Pgina 3, 10.