PROGRAMA
PROGRAMA TRADUCTOR OBJETO
FUENTE
1. Conceptos básicos
Programa
Programa compilador Objeto
Fuente
Mensaje de
Errores
1. Conceptos básicos
METALENGUAJES
Diagramas de transición
Expresiones regulares
Gramáticas
2. Tipos de traductores
a) Traductores de idiomas
b) Compiladores
c) Interpretes
d) Preprocesadores
e) Interpretes de comandos
f) Ensambladores y macroensambladores
g) Conversores fuente – fuente
h) Compiladores cruzado
hola.c hola.exe
#include “stdio.h” 1011100010101
int main(){ 0101010110100
cout<<“hola”; TRADUCTOR 0101011011010
return 0; 0110010100000
} 1101011000110
2. Tipos de traductores
Perl
JavaScript
Lisp
VisualBasic
FORTRAN SmallTallk
ALGOL Java
C
C++
PASCAL
2. Tipos de Traductores
Ejemplos de fabricantes
•INTEL
•AMD Versión simbólica de un lenguaje de
•CYRIX máquina:
•TEXAS INSTRUMENTS:
•IBM Cada código de operación se indica
•THOMPSON por un código simbólico: ADD, MUL...
•NEXGEN
Asignaciones de memoria se dan con
nombres simbólicos.
3. Lenguaje ensamblador
Ventajas
Velocidad
Eficiencia de tamaño
Flexibilidad
Desventajas
Tiempo de programación
Programas fuentes grandes
Peligro de afectar recursos inesperadamente
Falta de portabilidad
4. Sistema para el procesamiento de un lenguaje
EL PROCESAMIENTO COMPLETO DE UN PROGRAMA FUENTE
POR UN TRADUCTOR
Programa Fuente(PF)
COMPILADOR
Programa Objeto
ENLAZADOR DATOS
RESULTADOS
4. Sistema para el procesamiento de un lenguaje
EL PROCESAMIENTO COMPLETO DE UN PROGRAMA
RESULTADOS
4. Sistema para el procesamiento de un lenguaje
EL PROCESAMIENTO COMPLETO DE UN PROGRAMA
ENLAZADOR DATOS
RESULTADOS
4. Sistema para el procesamiento de un lenguaje
EL PROCESAMIENTO COMPLETO DE UN PROGRAMA
Figura: Labor realizada por el cargador. El cargador suele ser parte del sistema
operativo
5. Estructura de un traductor
NECESIDAD DE INTERPRETES Y COMPILADORES
Los lenguajes de alto nivel hicieron necesarios los interpretes y
compiladores a los cuales también se les denomina
TRADUCTORES a partir de los años 50.
PROGRAMA FUENTE
ANÁLISIS LÉXICO
ANÁLISIS SINTÁCTICO
TABLA DE MANEJO DE
ANÁLISIS SEMÁNTICO ERRORES
SÍMBOLOS
GENERACIÓN DE CÓDIGO
INTERMEDIO
OPTIMIZACIÓN DE CÓDIGO
INTERMEDIO
PROGRAMA OBJETO
5. Estructura de un traductor
TRADUCCION
ANALISIS SINTESIS
PROGRAMA FUENTE
ANÁLISIS LÉXICO
ANÁLISIS SINTÁCTICO
TABLA DE MANEJO DE
ANÁLISIS SEMÁNTICO ERRORES
SÍMBOLOS
CÓDIGO INTERMEDIO
PROGRAMA OBJETO
6. Fases del compilador
COMPILADOR
Ventaja
• Los programas objeto se ejecutan rápidamente
• La información de mensajes de errores es mas detallada
• En bucles, se genera código equivalente al bucle
Desventajas
• Los programas objetos son poco robustos
• Los programas objeto no se pueden detener
• No son transportables entre distintas máquinas
6. Fases del compilador
PROCESO DE COMPILACION
mov a, 1
mov al, a mov al, 1
a:= 1; a= 1
mov b, 2 mov bl, 2
b:=2; b=2
mov bl, b add al, bl
c:=a+b; c=a+b
add al, bl mov c, al
mov c, al
6. Fases del compilador
ANALISIS LEXICOGRAFICO. En esta fase, la cadena de
caracteres que constituye el programa fuente se lee de izquierda
a derecha y se agrupa en componentes léxicos (tokens), que son
secuencias de caracteres que tienen un significado atómico;
además el analizador léxico trabaja con la tabla de símbolos.
ANALISIS SINTACTICO
Ejemplo:
Gramática : G (N, T, P, S)
N = No terminales.
T = Terminales.
P = Reglas de Producción.
S = Axioma Inicial.
Ejemplo : Se considera la gramática
que reconoce las operaciones aritméticas
Ejercicio 1:
Analizar la cadena de entrada “cad” dada la gramática siguiente:
Solución:
6. Fases del compilador
ANALISIS SINTACTICO
Ejercicio 2:
Supongamos la siguiente gramática que permite generar
expresiones aritméticas donde aparece el operador suma y
multiplicacion y combinar números e identificadores.
Gramática
E → E +E
E→ E*E
E → id
E → num
Para la entrada id + id + id
Solución
6. Fases del compilador
ANALISIS SINTACTICO
Ejercicio 3:
Solución:
6. Fases del compilador
ANALISIS SEMANTICO. Esta fase revisa el árbol sintáctico junto
con los atributos y la tabla de símbolos para tratar de encontrar
errores semánticos. Para todo esto se analizan los operadores y
operandos de expresiones y proposiciones. Finalmente reúne la
información necesaria sobre los tipos de datos para la fase
posterior de generación de código.
Ejemplo :
(A+B)*(C+D)
El analizador semántico debe determinar que acciones pueden
realizar los operadores aritméticos (+,*) sobre las variables A,B,C
y D.
Así cuando el analizador sintáctico reconoce un operador, tal
como " + " o " * ", llama a una rutina semántica que especifica la
acción que puede llevar a cabo. Esta rutina puede comprobar que
los dos operandos han sido declarados, y que tienen el mismo
tipo. También puede comprobar si a los operandos se les ha
asignado previamente algún valor.
6. Fases del compilador
ANALISIS SEMANTICO.
Ejemplo:
6. Fases del compilador
OPTIMIZACION DE CODIGO
TABLA DE SÍMBOLOS
Estructura de datos que contiene un registro por cada
identificador, con los campos para los atributos:
-- Información sobre la memoria asignada
-- tipo
-- ámbito
-- Si es nombre de procedimiento (número, tipo
y método de paso de cada argumento)
Permite encontrar rápidamente cada ID y almacenar o
consultar datos de ese registro
En el Análisis Léxico se detectan los ID y se introducen en la
Tabla de Símbolos
Las fases restantes introducen información sobre los ID y
después la utilizan
6. Fases del compilador
ADMINISTRACION DE LA TABLA DE SIMBOLOS
Front-end
Back-end Back-end
UNIX DOS
PASCAL C COBOL
Back-end
Intel
6. Fase de un compilador
COMPILADOR DE VARIAS PASADAS
Ventajas
Favorece la modularidad
Util cuando los recursos del sistema son
limitados
Desventaja
Son mas lentos mientras mas pasadas
tengan
6. Fase de un compilador
Un compilador cruzado es
un compilador capaz de crear
TIPOS DE COMPILADORES código ejecutable para otra
plataforma distinta a aquélla
Ensamblador en la que él se ejecuta
Compilador cruzado
Metacompilador Programa que recibe como
Descompilador entrada las especificaciones
Autocompilador del lenguaje para el que se
desea obtener un compilador
y genera como salida el
compilador para ese lenguaje
HIBRIDO
Programa
ANALISIS Y
Fuente
SINTESIS
Programa Intermedio
INTERPRETE Resultados
7. Estructura del interprete
PROGRAMA FUENTE
ANÁLISIS LÉXICO
ANÁLISIS SINTÁCTICO
TABLA DE MANEJO DE
SÍMBOLOS ANÁLISIS SEMANTICO ERRORES
GENERACIÓN DE CÓDIGO
INTERMEDIO
OPTIMIZADOR DE CÓDIGO
INTERMEDIO
EJECUCIÓN
7. Estructura del interprete
INTERPRETE
Ventajas
Los programas objeto se pueden detener
Los programas objeto son muy robustos
Fácilmente transportables entre distintas máquinas
Un interprete necesita menos memoria que un
compilador
Desventaja
Los programas objeto se ejecutan de forma lenta
En bucles, se traduce tantas veces una línea como veces
se repite el bucle
7. Estructura del interprete
Generación
Prog.Fuente Análisis
de código
mov a, 1
a= 1
mov al, a
a:= 1;
b:=2; mov b, 2
b=2 mov bl, b
c:=a+b;
add al, bl
c=a+b mov c, al
8. Diferencias entre interprete y compilador
INTERPRETE COMPILADOR
Es un programa que lee línea a Es un programa que lee
línea un programa escrito en un totalmente un programa escrito en
lenguaje; en lenguaje fuente y lo un lenguaje; el lenguaje fuente, y
va traduciendo a un código lo traduce a un programa
intermedio, para ejecutarlo. equivalente a otro lenguaje,
lenguaje objeto
INTERPRETE COMPILADOR
INTERPRETE COMPILADOR
Típicamente, los programas interpretados El proceso de traducción se realiza
son mucho más portables que los una sola vez
compilados, ya que suelen existir
intérpretes del mismo lenguaje en
distintas plataformas. Los programas que
se van a interpretar no suelen ser muy
dependientes de su plataforma de
destino, siendo más portables.
INTERPRETE COMPILADOR
Estructura de un programa
Identificadores
constantes
Variables
Vectores de una dimension
Estructurados (clases)
Operadores
Expresiones
Instrucciones
Asignacion
Lectura/ escritura por pantalla
Sentencias de control de flujo
Si –sino
Mientras
para
Subprogramas
12. Ejemplos
declaraciones globales
main(){
variables locales
secuencia de sentencias
}
f1(){
variables locales
Estructura de
secuencia de sentencias un programa
}
:
fn(){
variables locales
secuencia de sentencias
}
12. Ejemplos
Caracter
Entero
Float
Cadena
Declaracion de variables
int i, j, k;
char c, dato;
12. Ejemplos
Sentencias de asignacion
Nombre_de_variable = expresion;
ejemplos
dato = cantidad;
x=c;
Constantes
Operadores
Operadores aritmeticos
Operadores relacionales y logicos
Otros operadores
Expresiones
Los operadores, las constantes y las variables son los constituyentes de las
expresionesPueden ser enteras, reales, de caracter o cadena
Ejemplo:
a + 5*b
(a >= 0) and ((b+5) > 10)
a
-a * 2 + b
-b + sqrt(b**2 - 4*a*c)
length(s) > 0
12. Ejemplos
Sentencias
Sentencias de etiqueta
Sentencias de expresion
Sentencia compuesta
Sentencia de seleccion
Sentencia de iteracion
Sentencia de salto
12. Ejercicios
Funciones y Procedimientos
Especificador_de_tipo
nombre_de_la_funcion(lista de
parametros)
{
cuerpo de la funcion
}
Muchas Gracias!!!
mhuapaya.chu@gmail.com