Está en la página 1de 27

COMPILADORES Y

LENGUAJES
ISWR263 GR1ISW_2021-A
Sesión 2 – 2-JUNIO-2021

Capítulo 1: Introducción
Procesadores de Lenguajes
Procesadores de lenguajes
• Traductor: Programa que toma como entrada un texto escrito
(llamado fuente) y da como salida otro texto (llamado objeto).
• Compilador: Traductor cuyo fuente es un lenguaje de alto nivel y cuyo
objeto es un lenguaje de bajo nivel.
• Interprete: Programa que ejecuta al mismo tiempo que traduce.
Procesadores de lenguajes
• Compilador: Traductor cuyo fuente es un lenguaje de alto nivel y cuyo
objeto es un lenguaje de bajo nivel.
Procesadores de lenguajes
• Interprete: Programa que ejecuta al mismo tiempo que traduce.
Diferencias entre compiladores e intérpretes
• Un programa que ha sido compilado puede ejecutarse solo, pues en el
proceso de compilación lo transformó en otro lenguaje (lenguaje máquina).
• Un intérprete traduce el programa cuando lo lee, convirtiendo el código del
programa directamente en acciones.
• La ventaja del compilador es que dado cualquier programa se puede
compilar en cualquier plataforma (sistema operativo), en cambio el archivo
generado por el intérprete solo funciona en la plataforma en donde se lo
ha creado.
• Un archivo compilado puede ser distribuido fácilmente conociendo la
plataforma, mientras que un archivo interpretado no funciona si no se
tiene el intérprete.
• Hablando de la velocidad de ejecución un archivo compilado es de 10 a 20
veces más rápido que un archivo interpretado.
Procesadores de lenguajes
• Ensamblador: Es un traductor para el lenguaje ensamblador de una computadora
en particular, es una forma simbólica del lenguaje de máquina de la computadora
y es fácil de traducir.

Código
Ensamblador Código Maquina
Ensamblador

Errores
Procesadores de lenguajes
• Linkeador (ligador): Recopila el código que se compila o ensambla por separado
en diferentes archivos objeto a un archivo que es directamente ejecutable.

Código Código Código


fuente fuente fuente

Código Código Código


objeto objeto objeto

Librerías Ligador Ejecutable


Procesadores de lenguajes
• Cargador (Loader): Se dice que tal código es re localizable y un cargador resolverá
todas las direcciones re localizables relativas a una dirección base o de inicio
dada. El uso de un cargador hace más flexible el código ejecutable pero el
proceso de carga con frecuencia ocurre en segundo plano o conjuntamente con
el ligado. Rara vez un cargador es en realidad un programa por separado.
Memoria principal

Cargador
Procesadores de lenguajes
• Preprocesador: Es un programa separado que es invocado por el compilador
antes de que comience la traducción real. Un preprocesador puede eliminar los
comentarios incluir otros archivos y ejecutar situaciones de macro.

Codigo.c
Codigo.c
#include <uno.c>
int main(){ //Codigo
… ….
#include <uno.c>
}
return 1;
Preprocesador int main(){

return 1;
}

Uno.c Compilador
//Codigo
….
Procesadores de lenguajes
• Editores: Los compiladores por lo regular aceptan programas escritos utilizando
cualquier editor que pueda producir una archivo estándar tal como un archivo
ASCII.

Más recientemente ha sido integrado junto con editores y


otros programas en un ambiente de desarrollo interactivo.
Procesadores de lenguajes
• Depuradores: Los compiladores por lo regular aceptan programas escritos
utilizando cualquier editor que pueda producir una archivo estándar tal como un
archivo ASCII.

1 #include <stdio.h>
2 #include <string.h>
3 #define LONG_MAX_LINEA 4096
4
#define NOMBRE_ARCHIVO "cuento.txt"
5
6
7 int main(void){
8 FILE *fichero;
9 char linea[LONG_MAX_LINEA];
10
11
char *p;
Es un programa que puede
12
13
if ((fichero = fopen(NOMBRE_ARCHIVO, "r")) == NULL){ utilizarse para determinar los
perror(NOMBRE_ARCHIVO);
14
15
return 0; errores de ejecución en un
}
16
17
programa compilado.
18 printf("Contenido del fichero:\n");
19 if(!fgets(linea,100,fichero)){
20 printf("El fichero esta vacio.\n");

Descripcion Tipo Nombre Valor Tipo


Procesadores de lenguajes
• Perfiladores: Un perfilador es un programa que recolecta estadísticas sobre el
comportamiento de un programa objeto durante la ejecución.
6
6
4
4
2
2
0
0
Etapas de compilación

Codigo.c Codigo.c
#include <uno.c> #include <uno.c>
int main(){ Análisis Síntesis int main(){
… …
return 1; return 1;
} }

Código fuente Código destino


Error en el Error al
programa generar
Etapa de análisis
Divide al PF en sus elementos componentes y crea una representación
intermedia.
Se determinan las operaciones y se registran en una estructura de árbol
(ej. árbol sintáctico)

t1 := entareal (60)
t2 := id3 + t1
t3 := id2 + t2
id1 := t3
Etapa de síntesis
Construye el programa objeto deseado a partir de la representación
Intermedia (requiere técnicas más especializadas)

MOVF id3, R2
MULF % 60.0, R2
MOVF id2, R1
ADDF R2, R1
MOVF R1, id1
¿Qué es la compilación?
El proceso de compilación se puede ver como una secuencia de fases,
cada una de las cuales transforma una representación del programa
fuente en otro.

Flujo de Analizador Flujo de Analizador Árbol Analizador Árbol


Caracteres Léxico Tokens Sintáctico Sintáctico Semántico Sintáctico

Generador de
Código Intermedio
¿Qué es la compilación?
En la práctica varias fases pueden agruparse, y las representaciones
intermedias entre las fases agrupadas no necesitan construirse de manera
explícita.

Optimizador de Código
Generador de Representación Representación Generador de
Independiente de la
Código Intermedio Intermedia Intermedia Código
Máquina

Optimizador de Código
Código Máquina Código Máquina
Independiente de la
Destino Destino
Máquina
¿Qué es la compilación?
Los compiladores pueden requerir otros programas para el procesamiento
de un programa destino ejecutable.
programa fuente
preprocesador

programa fuente
compilador
programa objeto en lenguaje ensamblador
ensamblador

código de máquina relocalizable


biblioteca
editor de carga y enlace archivos obj.relocal.

código de máquina absoluto


El compilador
En la práctica varias fases pueden agruparse, y las representaciones
intermedias entre las fases agrupadas no necesitan construirse de manera
explicita.
• Ventajas de los compiladores frente a los intérpretes
• Solo se compilan una vez
• Ejecución más rápida
• Optimización de código e Información del error más detallada.

• Ventajas de los Interpretes frente a los Compiladores


• Menor coste espacial
• Mayor interactividad en desarrollo
• Añadir código “en caliente”
Tipos y contexto de compiladores
• Ensamblador
• Compilador cruzado
• Compilador con montador
• Autocompilador
• Metacompilador
• Decompilador
Estructura de un compilador
Estructura de un compilador
Los lenguajes
Programa Java para sumar 2 números
Programa Pascal para sumar 2 números
Programa C para sumar 2 números
Programa Python para sumar 2 números

También podría gustarte