Está en la página 1de 17

Instituto Tecnológico de Cancún

Alumno: Pool Ramirez Miguel Angel

Lenguajes y Autómatas II

Docente: Raúl Ramírez Lozano


Compilador
Lenguajes y Automatas II
Un compilador es un software o programa que tiene como objetivo convertir un código
fuente de entrada (Un lenguaje de alto nivel como C o C++) en otro código de salida como
puede ser el código máquina.
Hay algunos tipos de compiladores muy comunes y que encontrarás que son usados
por lenguajes de programación de mucha popularidad. Los que más destacan son:

Cross Compiler o compilador cruzado.


Este tipo de compilador tiene como finalidad producir código para una
máquina distinta a la que está siendo ejecutado (el compilador). Imagina
poder compilar un programa en C sobre una máquina Windows a código
que pueda funcionar en un MacOS.

Transcompilador o transpiler (Source-to-source Compiler)


Es un compilador que traduce código escrito en un lenguaje de
programación a otro código fuente en otro lenguaje. Un ejemplo sería el
compilador tsc (TypeScript compiler) que traduce el código TypeScript a
código JavaScript.
¿Cómo funciona?
Lenguajes y Automatas II
Un compilador es programa especial que traduce de código fuente de un programa a
lenguaje de máquina.

Un compilador funciona de la siguiente forma:

1.- El código fuente se lee en la memoria de la computadora.


2.- El código fuente se convierte en código objeto o módulo de objeto. Un programa
puede tener muchos objetos y bibliotecas que necesitan ser unidas entre sí para crear
el ejecutable.
3.- Se crean los conectores, para enlazar todos los componentes del programa.
4.- Se reasignan los bloques de memoria dentro del programa de modo que una
pieza no sobreponga a otra parte en la memoria.
5.- Los archivos compilados se graban en el disco u otro tipo de memoria
permanente.
6.- El resultado es un archivo o programa ejecutable.
Partes de un compilador
Lenguajes y Automatas II
Un compilador está dividido en 2 partes principales que son el frontend y el backend.

1.- Analizador léxico o scanner. Esta parte tiene como objetivo convertir la entrada en tokens, eliminar espacios en
blanco, comentarios, etc. Estos tokens se comparten con el analizador sintáctico a través de un buffer, que puede
ser de distintos tipos pero que en este caso no vamos a explicar con más detalles.

2.- El analizador sintáctico o parser es la parte del compilador que tiene como finalidad construir una estructura de
árbol con los tokens que recibe del analizador léxico. Este árbol es el AST (Abstract Syntax Tree).

3.- El analizador semántico, que tiene como finalidad la realización de aquellas comprobaciones que el analizador
sintáctico no puede hacer. Algunas de estas comprobaciones son los tipos de datos, que las constantes no tengan
nuevas asignaciones.

4.- Generador de código intermedio. Esta parte genera un código intermedio que puede ser en ensamblador o
similar. Se crea mediante instrucciones y con estructuras de datos como listas. Después de esta fase se puede en un
fichero la salida del código como una cadena de texto formateada para comprobar si el código intermedio se ha
generado correctamente.
Las últimas dos fases forman parte del backend y tienen como objetivo obtener un código máquina, en el
caso que esto sea lo que queramos.

1.- Optimizador de código esta parte consiste en optimizar el código obtenido reduciendo el
número de instrucciones o realizando operaciones que el programador sabe que es una
mejora en la eficiencia, bien sea de memoria o, como se ha dicho, en tiempo de ejecución.

2.- Generador de código objetivo. Esta es la fase final del compilador. Al ser la que más cerca
del metal se encuentra hay que adaptar el código a la máquina a la que se quiera ejecutar. Por
lo general esta es una de las partes más complejas ya que requiere conocimiento específico
de la máquina sobre la que se va a ejecutar.
¿Qué es un Intérprete?
Lenguajes y Automatas II
Un intérprete es un programa o software capaz de analizar y ejecutar programas escritos en
lenguajes de alto nivel. Los intérpretes funcionan de manera distinta a los compiladores, ya que
van traduciendo y ejecutando el código hecho por el programador o desarrollador línea a línea,
cargando el código fuente y traduciendo las instrucciones a un lenguaje intermedio, para que el
programa pueda ser ejecutado por el ordenador o la computadora en donde se está ejecutando
el intérprete.
Ventajas
Las principales ventajas de utilizar un programa intérprete son las siguientes:

●Es mucho más cómodo para depurar y corregir errores, debido a su ejecución línea a línea.

●Se requiere el código fuente para ejecutar un programa (ideal para desarrolladores y

estudiantes de programación).

●Si el programa es muy largo la ejecución es mucho más rápida, ya que no suele ejecutar todo

el programa, y al analizar línea a línea, al finalizar el programa se cierra sin utilizar la parte del

código que no se utilizó durante el ejercicio del programa.


Desventajas
Las principales ventajas de utilizar un programa intérprete son las siguientes:

●Es necesario tener el intérprete instalado en el equipo para que se ejecute el programa hecho

en lenguaje de alto nivel.

●Cuando los programas son pequeños, la velocidad de ejecución es bastante lenta con respecto

a los programas compilados.

●Por lo general, hay que configurar manualmente el PATH del intérprete en el sistema para que

se ejecute desde cualquier localidad del usuario.


Conclusiónes
Un compilador suele generar programas más rápidos y eficientes, ya que el análisis del lenguaje

fuente se hace una sola vez, durante la generación del programa equivalente. En cambio, un

intérprete se ve obligado generalmente a analizar cada instrucción tantas veces como se ejecute

(incluso miles o millones de veces).

Un intérprete permite utilizar funciones y operadores más potentes, como por ejemplo ejecutar

código contenido en una variable en forma de cadenas de caracteres. Usualmente, este tipo de

instrucciones es imposible de tratar por medio de compiladores. Los lenguajes que incluyen este

tipo de operadores y que, por tanto, exigen un intérprete, se llaman interpretativos. Los

lenguajes compilativos, que permiten el uso de un compilador, prescinden de este tipo de

operadores. En pocas palabras "el compilador sólo traduce; el intérprete decodifica y ejecuta. "
Referencias

● Jaime Flores García . (23 July, 2015). ¿Qué es un compilador y cómo


funciona?. 2021, de yosoy.dev Sitio web: https://yosoy.dev/que-es-
un-compilador-y-como-funciona/

También podría gustarte