Está en la página 1de 7

Compiladores

Investigación I

ALUMNOS:
Luis Arturo Hernandez Ruiz
Manuel Alejandro Gomez
Jazmin del Rosario de la Cruz Osorio
Raymundo Rafael Verra García

Cunduacán, Tabasco
05/07/2023
Contenido
¿Qué es un compilador?..................................................................................................3
¿Qué es un intérprete?....................................................................................................3
Estructura general de un compilador...............................................................................3
Clasificación de compiladores:........................................................................................5
Cadena............................................................................................................................ 6
Alfabetos.......................................................................................................................... 6
Lenguaje:......................................................................................................................... 7
¿Qué es un compilador?
Un compilador es un software que traduce programas escritos en lenguajes de
programación de alto nivel a lenguaje de máquina. Un intérprete, por otro lado,
ejecuta programas fuente sin generar código de máquina directamente. Los
compiladores generan código eficiente y compacto, mientras que los intérpretes
procesan y ejecutan declaraciones de programas en tiempo real. Ambos están
escritos en lenguajes de programación de alto nivel y se traducen a código de
máquina.

¿Qué es un intérprete?
Un intérprete lee y ejecuta un programa fuente escrito en un lenguaje de
programación de alto nivel, junto con los datos correspondientes, para producir
resultados. Un ejemplo de esto es el intérprete de shell de Unix, que ejecuta
comandos del sistema operativo de forma interactiva.
Es importante tener en cuenta que tanto los intérpretes como los compiladores se
escriben en un lenguaje de programación de alto nivel (que puede ser diferente del
lenguaje que interpretan) y se traducen a código máquina.
Por ejemplo, un intérprete de Java puede estar completamente escrito en C o
incluso en Java. El programa fuente del intérprete no depende de la máquina en la
que se ejecute, ya que no genera código máquina directamente.
Un intérprete suele ser más lento que un compilador porque procesa e interpreta
cada declaración de un programa tantas veces como sea necesario. Por ejemplo,
al interpretar un bucle for, las declaraciones dentro del cuerpo del bucle se
analizarán y evaluarán en cada iteración del bucle. Algunos lenguajes, como Java
y Lisp, vienen con un intérprete y un compilador. Los programas fuente de Java
(clases Java con extensión .java) se traducen mediante el compilador javac en
archivos de código de bytes (con extensión .class).
El intérprete de Java, llamado Java Virtual Machine (JVM), puede interpretar
directamente los códigos de bytes o compilarlos internamente en código máquina
y luego ejecutar ese código.

Estructura general de un compilador


La estructura general de un compilador se divide en varias etapas o fases, que se
encargan de procesar y transformar el programa fuente en lenguaje de alto nivel
en un programa ejecutable en lenguaje de máquina. A continuación, se describen
las etapas principales de un compilador:
1. Análisis léxico: Esta fase se encarga de leer el programa fuente y dividirlo
en unidades léxicas más pequeñas, conocidas como "tokens". Los tokens
representan palabras clave, identificadores, operadores, símbolos y otros
elementos del lenguaje de programación.

2. Análisis sintáctico: En esta etapa, se utiliza la gramática del lenguaje de


programación para analizar la estructura del programa fuente y construir un
árbol de sintaxis abstracta (AST). El AST representa la estructura jerárquica
del programa, asegurando que cumpla con las reglas gramaticales del
lenguaje.

3. Análisis semántico: Aquí se verifican las reglas semánticas del programa.


Se comprueba que las operaciones y expresiones sean coherentes y que
los tipos de datos se utilicen correctamente. También se realiza la
asignación de memoria y se resuelven las referencias a variables y
funciones.

4. Generación de código intermedio: En esta fase, se genera un código


intermedio que es independiente de la plataforma de ejecución. El código
intermedio es una representación intermedia del programa que facilita la
optimización y la generación de código final.

5. Optimización de código: En esta etapa, se aplican diversas técnicas para


mejorar la eficiencia del código generado. Se realizan optimizaciones como
eliminación de código muerto, simplificación algebraica, propagación de
constantes, entre otras, con el objetivo de reducir el tamaño del programa y
mejorar su rendimiento.

6. Generación de código: Finalmente, se genera el código de máquina


específico para la plataforma de ejecución. En esta etapa, se traduce el
código intermedio en instrucciones de bajo nivel entendidas por el hardware
del sistema objetivo.
Clasificación de compiladores:
Compilación de una sola pasada: examina el código fuente una vez y genera el
programa objeto directamente.
1. Compilación de pasadas múltiples: requiere etapas intermedias para
producir un código en otro lenguaje, y una última pasada para generar y
optimizar el código resultante.

2. Optimización: analiza el código fuente en busca de posibles errores sin


ejecutar el programa.

3. Compiladores incrementales: generan código objeto instrucción por


instrucción a medida que el usuario ingresa cada orden individualmente, en
lugar de compilar todo el programa en conjunto.

4. Ensamblador: el lenguaje fuente es el lenguaje ensamblador, caracterizado


por su estructura sencilla.

5. Compilador cruzado: genera código objeto para una máquina diferente a la


que se utiliza para compilar. Por ejemplo, se puede desarrollar un
compilador de Pascal en Linux que genere código para MS-DOS.

6. Compilador con montador: compila módulos de forma independiente y


luego los enlaza en un programa completo.

7. Autocompilador: compilador escrito en el mismo lenguaje que se va a


compilar. Se utiliza para ampliar el lenguaje, mejorar el código generado,
etc.

8. Metacompilador: programa que toma como entrada las especificaciones del


lenguaje para el cual se desea obtener un compilador, y produce como
salida el compilador para ese lenguaje.
9. Descompilador: programa que acepta código máquina como entrada y lo
traduce a un lenguaje de alto nivel, realizando el proceso inverso a la
compilación.

Cadena
En el contexto de los compiladores, una cadena se refiere a una secuencia de
caracteres que forma parte del programa fuente. Una cadena puede consistir en
letras, dígitos, símbolos y otros caracteres, y se utiliza para representar valores de
texto en el código fuente.

En la mayoría de los lenguajes de programación, las cadenas se definen


colocando los caracteres entre comillas. Por ejemplo, en C/C++, una cadena se
define usando comillas dobles, como en:

Aquí, la cadena "Juan" representa un valor de texto que se asigna a la variable


nombre. Las cadenas también pueden contener caracteres de escape, como \n
para representar un salto de línea, o \t para representar un tabulador.
Las cadenas son utilizadas comúnmente en la manipulación y el procesamiento de
texto en programas. Los compiladores analizan y manejan las cadenas durante el
análisis léxico y el análisis sintáctico del programa fuente.

Alfabetos
En el contexto de los compiladores, un alfabeto se refiere a un conjunto finito de
símbolos que se utilizan para construir las palabras o tokens de un lenguaje de
programación. Estos símbolos pueden ser caracteres individuales, como letras,
dígitos y otros caracteres especiales.

El alfabeto de un lenguaje de programación define los caracteres permitidos y la


forma en que pueden combinarse para formar palabras válidas. Por ejemplo, en
un lenguaje de programación típico, el alfabeto puede incluir las letras del alfabeto
(mayúsculas y minúsculas), los dígitos del 0 al 9 y ciertos caracteres especiales
como el signo de igual (=), paréntesis (), corchetes [], y así sucesivamente.
El alfabeto define las reglas para formar palabras válidas en el lenguaje de
programación y es utilizado por el analizador léxico del compilador para reconocer
y categorizar los tokens del programa fuente durante el proceso de compilación.

Lenguaje:
En el contexto de los compiladores, un lenguaje se refiere a un conjunto de reglas
y estructuras que definen cómo se deben escribir y organizar las instrucciones y
expresiones en un programa de computadora. Un lenguaje de programación es un
lenguaje formal diseñado para expresar algoritmos y procesos de manera que
puedan ser entendidos por una computadora.
Existen diferentes lenguajes de programación, cada uno con su propia sintaxis y
semántica. Algunos ejemplos de lenguajes de programación populares son C/C++,
Java, Python, JavaScript, entre otros.
El lenguaje de programación proporciona un conjunto de palabras clave, símbolos
y estructuras de programación que permiten al programador escribir instrucciones
que serán interpretadas o compiladas para que la computadora las ejecute.
En el contexto de los compiladores, el lenguaje de programación es el lenguaje en
el que se escribe el programa fuente que será procesado por el compilador. El
compilador se encarga de analizar y traducir ese programa fuente escrito en un
lenguaje de alto nivel a un programa ejecutable en lenguaje de máquina, que la
computadora puede entender y ejecutar. El compilador se asegura de que el
programa fuente cumpla con la sintaxis y las reglas del lenguaje de programación
específico durante el proceso de compilación.

También podría gustarte