Vous êtes sur la page 1sur 18

Compiladores

Un Compilador

Programa Fuente

Compilador

Programa Destino
Sistema de procesamiento del lenguaje
Programa Fuente

Preprocesador

Programa fuente modificador

Compilador

programa destino en ensamblador

Ensamblador

código de máquina relocalizable

Enlazador / Cargador
• archivos de librería
• archivos objeto relocalizables

código máquina destino


Estructura de un compilador

Analizador analizador generador Optimizador Generador optimizado fin!


Analizdor
Flujo de caracteres

Flujo de tokens

árbol sintáctico

árbol sintáctico

código máquina

código máquina
intermedia

intermedia

destino

destino
representación

representación
sintáctico semántico de código de código de código r de código
léxico independient
intermedio e de la
independie
máquina nte de la
máquina
Análisis Léxico

 Primer paso:
 Reconocimiento de palabras.
 Unidad por encima de las letras.

Esto es una oración.


Análisis léxico

Ses toe su nao rac i ón


Objetivos del análisis léxico

 Dividir el programa en “palabras” o “tokens”.

If x==y then z =1; else z=2;


 Keywords, if, then, else.
 Variables, x, y, z.
 Constantes, 1, 2.
 Operadores, ==, =. ¿Cómo diferenciamos la comparación de la asignación?
 Separadores, espacios en blanco, ;.
Análisis Sintáctico

 Una vez las palabras son entendidas, el siguiente paso es entender la


estructura de la oración.

 Parseando = Diagramando Oraciones


 El diagrama es un árbol.
Análisis Sintáctico

Esta línea es una larga oración.

| | | | | |
artículo sustantivo verbo artículo adjetivo sustantivo

sujeto predicado

oración
Análisis Sintáctico

If x == y then z = 1; else z = 2;
x == y z 1 z 2

Relación asignación asignación


| | |
predicado sentencia-then sentencia-else

if – then - else
Análisis Semántico

 Una vez la estructura de la oración es entendida,


ahora podemos interpretrar su “significado”
 Esto es difícil.
 (Muy difícil para el compilador, pero no imposible )
 Los compiladores realizan análisis semántico
limitado para atrapar las inconsistencias.
Análisis Semántico

 Ejemplo:
 Juan dijo María dejó su tarea en la casa.

 Aún más complejo:


 Juan dijo ¿Juan ha dejado su tarea en la casa?
Análisis Semántico

Los lenguajes de {
programación definen int numero = 7;
reglas estrictas para {
evitar tales int numero = 9;
ambigüedades.
cout << numero;
}
}
¿Qué valor se imprime?
9
Análisis Semántico

 Los compiladores realizan varias chequeos semánticos respecto a las


variables.

 Ejemplo:
 Juan olvidó el comida en su casa.
 Un “type mismatch” entre el y comida; nosotros que es “la comida”.
Optimización

 Optimización no tiene su contraparte en el español


 Pero se parece a algo como editar.
 Es como editar algo.

 Automáticamente modificar los programas para:


 Se ejecuten más rápido.
 Utilicen menor cantidad de memoria.
 Reducir la cantidad de energía utilizada.
Optimización

X = Y * 0 es lo mismo que X = 0

Esta regla es válida para los enteros.


Es inválida para los punto flotantes.
NAN * 0 es igual a NAN.
Generación de código

 Produce código assembler.


 Traducción de un lenguaje origen a un lenguaje destino.
 Análogo a la traducción del lenguaje por humanos.

 Por Ejemplo: Inglés a Español

Vous aimerez peut-être aussi