Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Materia: Compiladores
Nombre: Luis Estuardo Patzán López
Carnet: 7690-20-370
Sección: A
Introducción
Un traductor de idiomas es un programa que traduce programas escritos en una fuente lenguaje a
un programa equivalente en un lenguaje objeto. El idioma de origen suele ser un lenguaje de
programación de alto nivel y el lenguaje objeto suele ser el lenguaje máquina de una computadora
real. Desde el punto de vista pragmático, el traductor define la semántica del lenguaje de
programación, transforma operaciones especificadas por la sintaxis en operaciones del modelo
computacional para alguna maquina real o virtual
Objetivos
Nuestro objetivo con esta investigación es enseñar y aprender de como que es y como funciona un
compilador, que tipo de herramientas se usan con los mismos y dar unos pequeños ejemplos, con
las IDE’s, Netbeans, Eclipse e IntelliJ Idea, para el mejor entendimiento, lo haremos de una manera
resumida, extrayendo lo mas importante de dicho tema.
• ANTLR
Características principales:
JAVACC
Características principales:
JavaCC es un generador de léxico y analizador para gramáticas LL(k). Usted especifica la descripción
léxica y sintáctica de un idioma en un archivo JJ, luego ejecuta javacc en el archivo JJ. Un breve
ejemplo a continuación en C++
Para el análisis léxico, JavaCC permite otras
secciones además de TOKENy SKIP. También hay
formas de crear tokens "privados" y escribir
expresiones regulares complejas.
Uso de esta herramienta para compiladores:
Características principales:
Mediante el uso de las herramientas lex y yacc, puede crear un motor de análisis que procese el
texto de acuerdo con reglas específicas. Luego puede incorporarlo a sus aplicaciones para todo,
desde el análisis de configuración hasta la creación de su propio lenguaje de programación.
Lex es una herramienta de análisis léxico que se puede utilizar para identificar cadenas de texto
específicas de forma estructurada a partir del texto de origen. Yacc es un analizador de
gramática; lee texto y se puede utilizar para convertir una secuencia de palabras en un formato
estructurado para su procesamiento.
Lex: Esta herramienta es un componente estándar en la mayoría de los sistemas operativos UNIX.
La herramienta GNU flex proporciona la misma
funcionalidad.
C++ Ejemplo!
• BISON & FLEX (Fast Lexical Analyzer Generator)
Características principales:
Lex y Flex son herramientas para generar escáneres: programas que reconocen patrones léxicos
en el texto. Flex es una versión más rápida de Lex. En este capítulo
Lex/Flex se refiere a cualquiera de las herramientas. El apéndice sobre Lex/Flex es un
condensación de la página del manual “flexdoc” de Vern Paxon.
Lex and Flex are tools for generating scanners: programs which recognize lexical patterns in text.
Flex is a faster version of Lex. In this chapter
Lex/Flex refers to either of the tools. The appendix on Lex/Flex is a
condensation of the manual page “flexdoc” by Vern Paxon
Bison para analizar un idioma, el idioma debe ser descrito por una gramática libre de contexto.
Flex versus Bison Flex reconoce expresiones regulares, y Bison reconoce gramáticas. Flex divide
el programa fuente en tokens y Bison agrupa esos tokens. Es habitual utilizar Flex y Bison
conjuntamente para desarrollar un compilador. Con Flex se construye el analizador léxico
(morfológico).
Cada vez que la función yylex() devuelve un token al analizador sintáctico, si el token tiene
un valor asociado, éste se guarda en la variable yylval antes de terminar. Por ejemplo, un
identificador de una variable, además de tener un número de token que lo identifica y
distingue de otros tipos de tokens, también tiene asociado como valor o atributo, el lexema
del identificador. Sin embargo, un paréntesis no tiene asociado ningún valor o atributo.
Posteriormente se estudiará cómo la función yyparse() utiliza los valores asociados a los
tokens y cómo definir el tipo de la variable yylval (por defecto es de tipo int)
esta sección contiene sentencias C y funciones adicionales. También podemos compilar estas
funciones por separado y cargarlas con el analizador léxico.
• JFLEX
Características principales:
JFlex lexers se basan en autómatas finitos deterministas (DFA). Son rápidos, sin costosos
retrocesos.
JFlex está diseñado para funcionar junto con el generador de analizadores sintácticos LALR CUP de
Scott Hudson y la modificación de Java de Berkeley Yacc BYacc/J de Bob Jamison. También se
puede usar junto con otros generadores de analizadores como ANTLR o como una herramienta
independiente
Forma de utilizar estas herramientas en los siguientes IDE's de desarrollo (por medio
de plugins o similar)
Netbeans
ATNLR: descargar la herramienta ANTLR y luego elegir un objetivo de tiempo de ejecución a
continuación
JAVACC: Se puede descargar el zip o con con API
LEX AND YACC: Descargando e instalando el complemento
BISON AND FLEX: Con dependencia, codigo o instalada directamente al descargarla
JAVACC: Se puede descargar el zip o con con API
JFLEX: Descargando e instalando el paquete.
Eclipse
ATNLR: org.eclipse.ui/ SHOW_PROGRESS_ON_STARTUP = verdadero
JAVACC: Descargando e instalando el complemento
LEX AND YACC: Descargando e instalando el complemento
BISON AND FLEX: Con dependencia, codigo o instalada directamente al descargarla
JAVACC: Se puede descargar el zip o con con API
JFLEX: Descargandolo desde eclipseMarketplace.
IntelliJ Idea
ATNLR: Java en su archivo pom.xml . La última versión es 4.11.1:<dependencia>
<groupId>org.antlr</groupId> <artifactId>antlr4</artifactId>
<versión>4.11.1</versión></dependencia>
JAVACC: Descargando e instalando el complemento
LEX AND YACC: Descargando e instalando el complemento
BISON AND FLEX: Con dependencia, codigo o instalada directamente al descargarla
JAVACC: Se puede descargar el zip o con con API
JFLEX: Se puede descargar el plugin, el ID es com.github.oowekyala.jflex
Conclusiones
Este trabajo será muy útil a la hora de crear un compilador, ya que detalla cada una de las partes
que lo involucran. Creo que es muy útil a la hora de crear un algoritmo o un programa. La función
de un compilador es leer un programa escrito en un idioma, en este caso el idioma fuente, y
traducirlo a un programa equivalente en otro idioma, el idioma objeto. Por otro lado, entendí que
un compilador requiere de una sintaxis y lenguajes específicos, ya que al igual que el lenguaje
humano, si no lo escribimos correctamente, el compilador no hará lo que queremos. Y que en la
compilación hay dos partes: Análisis y Síntesis. La parte de análisis descompone el programa fuente
en sus elementos componentes y crea una representación intermedia. Aprendí que las herramientas
que muestran tipos de análisis de programas fuente son muy útiles al crear un programa al codificar
un algoritmo, ya que estas herramientas nos ayudan formateando texto, corrigiendo errores,
haciendo sugerencias; para que los programadores seamos más eficientes a la hora de crear una
aplicación.
Recomendaciones
El lenguaje de programación C está definido de tal forma que hay numerosas decisiones que el
compilador adopta de forma automática ante la ausencia de información. En otras palabras, el
compilador toma decisiones sobre cómo traducir el código que el programador no ha escrito en el
código. Esto, en ciertas situaciones, es cómodo, pues hace que los programas puedan ser escritos
más rápido, pero sólo programadores con experiencia suelen aprovechar esta característica. Lo más
recomendable es utilizar una opción en el compilador para que notifique aquellos casos en los que
está tomando decisiones implícitas. En el compilador gcc esta opción es -Wall.
Compilar siempre con la opción -Wall y no considerar el programa correcto hasta que no se hayan
eliminado todas las advertencias.
E-grafía
https://karinav2.wordpress.com/2011/02/02/antlr/
https://docplayer.es/35000888-Javacc-parte-i-1-compiladores-guia-vii-ciclo-facultad-ingenieria-
escuela-computacion-asignatura-compiladores.html
http://arantxa.ii.uam.es/~mdlcruz/docencia/compiladores/2007_2008/construccion_calculadora_
07_08.pdf
http://dlsiisv.fi.upm.es/traductores/Software/Flex-Bison.pdf