You are on page 1of 10

EL COMPILADOR

Semana 3
Los compiladores son la base de la
programación
Se tenía que decir y se dijo
Conceptos
• Codificación: proceso de traducción de un algoritmo en

pseudocódigo a lenguaje de programación.

• Código fuente: algoritmo escrito en lenguaje de

programación.

• Lenguaje máquina: lenguaje nativo de la computadora.


Traductores del lenguaje
Intérprete Compilador

Programa fuente Programa fuente

Intérprete Compilador Programa

Línea a Línea Objeto programación


¿Qué es un compilador?
La compilación es un proceso que implica la traducción de un
programa desarrollado en un determinado lenguaje de programación a
otro que se escribe en un lenguaje distinto. Por lo general este
segundo programa está hecho en lenguaje máquina, que es un código
que pueden interpretar los procesadores de forma directa.

En este proceso de compilación, se llama compilador al programa que


se encarga de la traducción en cuestión.

Julián Pérez Porto y María Merino. Publicado: 2016. Actualizado: 2018.


https://definicion.de/compilador/
Etapas del proceso
Las funciones que lleva a cabo este software que nos ocupa podemos
establecer que se llevan a cabo en este orden:

• Fase de análisis (análisis léxico, análisis sintáctico y análisis


semántico)
• Fase de síntesis (generación de código intermedio) y optimización
de código.

Esta última etapa, que en ocasiones aparece incluida dentro de la de
síntesis, consiste básicamente en mejorar lo que es el citado código
intermedio de ahí que se pueda conseguir un código máquina que sea
realmente muy rápido de ejecutar.
Fases de análisis
Se trata de la comprobación de la corrección del programa fuente,
según la definición del lenguaje en términos de teoría de lenguajes
formales.
• Análisis léxico: consiste en la descomposición del programa
fuente en componentes léxicos
• Análisis sintáctico: agrupación de los componentes léxicos en
frases gramaticales.
• Análisis semántico: comprobación de la validez semántica de las
sentencias aceptadas en la fase de análisis sintáctico.
Fases de síntesis
Su objetivo es la generación de la salida expresada en el lenguaje

objeto y suele estar formado por una o varias combinaciones de fases

de generación de código (normalmente se trata de código intermedio o

de código objeto) y de optimización de código (en las que se busca

obtener un programa objetivo lo más eficiente posible, según su

complejidad computacional o complejidad de Kolmogórov: tiempo de

ejecución, espacio durante ejecución, espacio para ser almacenado

fuera de ejecución, etc).


Complejidad de Kolmogórov
Aunque pueda parecer extraño se aplica a un sistema muy concreto, una cadena de
caracteres. Básicamente viene a decir la complejidad de una cadena de caracteres es
igual al programa más corto que es capaz de generarla. Vamos a ver un ejemplo, la
siguiente cadena de caracteres:
101010101010101010101010
Esta es a todas luces una secuencia muy sencilla, ¿no? Un programa que la generase
sólo tendría que repetir el patrón las veces que haga falta. En el lenguaje de
programación C, por ejemplo, sería:

for (i=0;i<12;i++) printf("10");


Ahora veamos otra lista de caracteres:

vwrtgw45g238g23e823hr3928ry
Esta al no seguir ninguna regularidad no es tan fácil de programar, de hecho tienes que
hacer un programa que sepa la lista en si y la escriba, algo en plan
printf("vwrtgw45g238g23e823hr3928ry")
Partes del compilador
Analizador o front-end: es la parte que analiza el código fuente,
comprueba su validez, genera el árbol de derivación y rellena los
valores de la tabla de símbolos. Esta parte suele ser independiente de
la plataforma o sistema para el cual se vaya a compilar, y está
compuesta por las fases comprendidas entre el análisis léxico y la
generación de código intermedio.

Generador o back-end: es la parte que genera el código máquina,


específico de una plataforma, a partir de los resultados de la fase de
análisis, realizada por este generador.

You might also like