Está en la página 1de 8

UNIVERSIDAD JOSÉ ANTONIO PAÉZ

FACULTAD DE INGENIERÍA
ESCUELA DE INGENIERÍA EN COMPUTACIÓN

Ensayo
COMPILADORES: CONCEPTOS, ESTRUCTURAS Y COMPARACIÓN
SEGÚN DISTINTOS AUTORES

Autores:

Sebastián Salazar 28.465.047


Fernando Rodríguez 27.589.678

Tutor:
Prof. Susan León

Abril, 2023
INTRODUCCIÓN

 A grandes rasgos un compilador toma un programa escrito en un lenguaje de


programación con una gramática, sintaxis y semántica definida, revisa que este dentro
de las pautas de definición del lenguaje, y lo traduce en programa de salida escrito en
lenguaje binario, el cual es entendido por el ordenador y por lo tanto puede ser
ejecutado por el mismo (recordando que un intérprete a diferencia de un compilador
no traduce todo el programa sino que va realizando la traducción e interpretación de
la misma paso a paso, sin crear ningún programa de salida ejecutable).

Las partes del proceso de compilación se dividen en dos: una llamada fase de
Análisis y otra llamada fase de Sintaxis, las cuales interactúan entre sí para la
creación de la tabla de símbolos y el control del manejador de errores, dentro del
análisis hay tres etapas llamadas análisis léxico, análisis sintáctico, análisis
semántico. Dentro de la fase de Síntesis existen las etapas de generación de código
intermedio, optimización de código intermedio, y generación de código.

Al tener que describir cómo funciona un compilador se debe tener en claro en no


confundir los términos compilador y compilación. Compilador se refiere al programa
mientras que compilación se refiere como el proceso en sí.

2
COMPILADORES

De acuerdo a Alfred V. Aho, Ravi Sethi y Jeffrey D. Ullman (1990), “Un


compilador es un programa que lee un programa escrito en un lenguaje, el lenguaje
fuente, y lo traduce a un programa equivalente en otro lenguaje, lenguaje objeto.
Como parte importante de este proceso de traducción, el compilador informa a su
usuario de la presencia de errores en el programa fuente”.

Para Alfred V. Aho, Ravi Sethi y Jeffrey D. Ullman el escritor del compilador,
como cualquier programador puede usar con provecho herramientas de software tales
como depuradores, administradores de versiones, analizadores, etc. para la
construcción de un compilador. En términos generales, ya se han creado algunas
herramientas para el diseño automático de los compiladores, dichas herramientas
utilizan lenguajes especializados para especificar e implantar el componente y pueden
utilizar algoritmos bastante complejos.

Las herramientas más efectivas son las que ocultan los detalles de algoritmo de
generación y producen componentes que se pueden integrar con facilidad al resto del
compilador. Las herramientas útiles para la construcción de un compilador serían las
siguientes:

1. Generadores de analizadores sintácticos: Producen analizadores sintácticos a


partir de una entrada fundamental en una gramática independiente del
contexto.
2. Generadores de analizadores léxicos: Generan analizadores léxicos a partir de
una especificación basada en expresiones regulares. La organización básica del
analizador léxico resultante es en realidad un autómata finito.
3. Dispositivos de traducción dirigida por la sintaxis: Estos producen grupos de
rutinas que recorren el árbol de análisis sintáctico generando código
intermedio.

3
4. Generadores automáticos de código: Tales herramientas toman un conjunto de
reglas que definen la traducción de cada operación del lenguaje intermedio al
lenguaje de máquina para la máquina objeto.
5. Dispositivos para análisis de flujo de datos: Consiste en la recolección de
información sobre la forma en que se transmiten los valores de una parte de un
programa a cada una de las otras partes.

Además, el autor Alfred V. Aho afirma que en la compilación hay dos partes.
Análisis y síntesis. La parte de análisis divide al programa fuente en sus elementos
componentes y crea una representación intermedia del programa fuente. La parte de
la síntesis construye el programa objeto deseado a partir de la representación
intermedia. De las dos partes, la síntesis es la que requiere las técnicas más
especializadas.

Durante el análisis, se determinan las operaciones que implica el programa fuente y


se registran en una estructura jerárquica llamada árbol, a menudo se usa una clase
especial de árbol llamado árbol sintáctico, donde cada nodo representa una operación
y los hijos de un nodo son los argumentos de la operación.

De acuerdo a los autores Según Sergio Gálvez Rojas y Miguel Ángel Mora Mata
(2005) Un compilador es aquel traductor que tiene como entrada una sentencia en
lenguaje formal y como salida tiene un fichero ejecutable, es decir, realiza una
traducción de un código de alto nivel a código máquina (también se entiende por
compilador aquel programa que proporciona un fichero objeto en lugar del
ejecutable final).

Cuando se desarrolla un programa fuente, éste se recompila varias veces hasta


obtener una versión definitiva libre de errores. Pues bien, en una compilación
incremental sólo se recompilan las modificaciones realizadas desde la última
compilación. Lo ideal es que sólo se recompilen aquellas partes que contenían los
errores o que, en general, hayan sido modificadas, y que el código generado se
reinserte con cuidado en el fichero objeto generado en la última compilación.

4
Sin embargo esto es muy difícil de conseguir y no suele ahorrar tiempo de
compilación más que en casos muy concretos.

Según Jacinto Ruiz Catalán Un compilador es un tipo especial de traductor en que el


lenguaje fuente es un lenguaje de alto nivel y el lenguaje objeto es de bajo nivel.

El compilador es asistido por otros programas para realizar su tarea, por ejemplo, se
utiliza un preprocesador para añadir ficheros, ejecutar macros, eliminar comentarios,
etc. Hay compiladores que no generan código maquina sino un programa en
ensamblador, por lo que habrá que utilizar un programa ensamblador para generar el
código máquina.

Un compilador es un programa complejo que consta de una serie de pasos,


generalmente entrelazados, y que como resultado convierte un programa en un
lenguaje de alto nivel en otro de bajo nivel (generalmente código maquina o
lenguaje ensamblador

Construcción sistemática de compiladores

Según Sergio Gálvez Rojas y Miguel Ángel Mora Mata (2005), las fases anteriores se
agrupan en una etapa inicial (front-end) y una etapa final (back- end). La etapa inicial
comprende aquellas fases, o partes de fases, que dependen exclusivamente del
lenguaje fuente y que son independientes de la máquina para la cual se va a generar el
código. En la etapa inicial se integran los análisis léxicos y sintácticos, el análisis
semántico y la generación de código

intermedio. La etapa inicial también puede hacer cierta optimización de código e


incluye, además, el manejo de errores correspondiente a cada una de esas fases.

La etapa final incluye aquellas fases del compilador que dependen de la máquina
destino y que, en general, no dependen del lenguaje fuente sino sólo del
lenguaje intermedio.

5
En esta etapa, se encuentran aspectos de la fase de generación de código, además de
su optimización, junto con el manejo de errores necesario y el acceso a las estructuras
intermedias que haga falta. Se ha convertido en una práctica común el tomar la etapa
inicial de un compilador y rehacer su etapa final asociada para producir un
compilador para el mismo lenguaje fuente en una máquina distinta. También resulta
tentador crear compiladores para varios lenguajes distintos y generar el mismo
lenguaje intermedio para, por último, usar una etapa final común para todos ellos, y
obtener así varios compiladores para una máquina.

6
CONCLUSIÓN

Podemos comprender 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 deseamos.

También se sabe que la compilación hay dos partes: Análisis y Síntesis. La parte del
análisis divide al programa fuente en sus elementos componentes y crea una
representación intermedia. Aprendimos que las herramientas que muestran tipos de
análisis de programas fuente, son muy útiles al momento de crear un programa al
codificar un algoritmo, ya que estas herramientas nos ayudan formateando el texto,
corrigiendo errores, dando tips; para que nosotros como programadores seamos más
eficientes al momento de crear alguna aplicación.

7
REFERENCIAS BIBLIOGRAFICAS

Alfred V. Aho, Ravi Sethi y Jeffrey D. Ullman (1990). Compiladores: Principios,


técnicas y herramientas. Addison Wesley Longman de Méxiso S.A de C.V.

Jacinto Ruíz Catalán (2008). Compiladores: Teoría y práctica con Java. Editorial
Lulu.

Sergio Gálvez Rojas y Miguel Ángel Mora Mata (2005). Compiladores: Traductores
y Compiladores con Lex/Yacc, Jlex/Cup y JavaCC. Universidad de Málaga.

También podría gustarte