Vous êtes sur la page 1sur 46

LENGUAJES Y TRADUCTORES

Estructura de los Traductores

Profesor: Carlos A. Ruiz De La Cruz Melo


Correo: zorroculto69@hotmail.com
CALIFICACION

Promedio EP + EF+ PROY + PP


Final =
4

Proyecto (PROY) = A. Lexico + A. Sintactico+ A.semantico


3

Promedio de P1 + P2
Practicas (PP) =
2
OBJETIVOS
 Conocer los conceptos teóricos referentes a:
 Definición y diseño de lenguajes de
programación,
 Construcción de un traductor.

hola.c hola.exe
#include “stdio.h” 1011100010101
int main(){ 0101010110100
cout<<“hola”; TRADUCTOR 0101011011010
return 0; 0110010100000
} 1101011000110
LENGUAJES Y TRADUCTORES
 Contenido: Parte I

 Arquitectura básica del compilador


 Aspectos formales
 Análisis lexicográfico
 Análisis sintáctico
 Tabla de símbolos

 Contenido: Parte II

 Análisis sintáctico
 Análisis semántico
 Tratamiento de errores
 Generación de código
TRADUCTOR
 Secuencia de instrucciones de bajo
nivel.
 Cada tipo de procesador tiene su
Un traductor es un programa que propio conjunto de instrucciones de
traduce un programa escrito en un bajo nivel.
lenguaje a un nuevo programa escrito  Único lenguaje reconocido por el
en otro lenguaje.
procesador.
 Extremadamente engorroso para el
programador.
• Escrito en lenguaje de alto nivel: C,
C++,
• Visual Basic, etc.
• Adecuado para el programador.
• No es reconocido por el
procesador.

PROGRAMA
PROGRAMA TRADUCTOR OBJETO
FUENTE
EL PROCESAMIENTO COMPLETO
DE UN PF POR UN TRADUCTOR

Programa Fuente(PF)

COMPILADOR

Programa Objeto

ENLAZADOR DATOS

Programa Ejecutable MEMORIA

CARGADOR Programa Ejecutable

RESULTADOS
EL PROCESAMIENTO COMPLETO DE UN
PROGRAMA

El programa objeto no está completo


para la ejecución:
Programa Fuente
• Las funciones han sido compiladas
Independientemente; falta enlazarlas.
• Hace llamadas a funciones que se
COMPILADOR encuentran en bibliotecas; falta
cargarlas o establecer las referencias
Programa Objeto

ENLAZADOR DATOS

Programa Ejecutable MEMORIA

CARGADOR Programa Ejecutable

RESULTADOS
EL PROCESAMIENTO COMPLETO DE UN
PROGRAMA
• El programa ejecutable normalmente
está en disco; para que se ejecute
necesita ser puesto en la memoria de
la computadora.
Programa Fuente
• El cargador normalmente pertenece al
sistema operativo.

COMPILADOR

Programa Objeto

ENLAZADOR DATOS

Programa Ejecutable MEMORIA

CARGADOR Programa Ejecutable

RESULTADOS
TIPOS DE TRADUCTORES
Existen básicamente dos tipos de
traductores, aunque también se
considera como traductor al
ensamblador:  Macro ensamblador IBM
 Macro ensamblador de
 Ensambladores Microsoft
 Turbo Editassm
 Intérpretes  Turbo Asembler

 Compiladores

 Perl
 javaScript
 Lisp
 VisualBasic
 FORTRAN  SmallTallk
 ALGOL  java
 C
 C++
 PASCAL
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.

 Desde entonces, gracias al descubrimiento de técnicas


sistemáticas para el manejo de muchas tareas que surgen
en la compilación, al desarrollo de buenos lenguajes de
implantación, entornos de programación y herramientas de
software, …..el diseño y desarrollo de interpretes y
compiladores se ha simplificado enormemente.

El microprocesador de la CPU no entiende un lenguaje de alto


nivel, así que se hace necesario traducirlo a un lenguaje de bajo
nivel como un ensamblador que es la representación mas
directa del código maquina
TIPOS DE TRADUCTORES

Leng. Fuente ENSAMBLADOR Leng. Objeto


(asembler) (leng.máquina)

Leng. Fuente INTERPRETE Resultados


(Alto nivel)

Leng. Fuente COMPILADOR Leng. Objeto


(Alto nivel)
LENGUAJE EMSAMBLADOR
Depende de la máquina por lo
tanto hay un lenguaje máquina
para cada fabricante

Ejemplos de fabricantes

• INTEL
• AMD
• CYRIX
• TEXAS INSTRUMENTS:
• IBM Versión simbólica de un lenguaje de
• THOMPSON máquina:
• NEXGEN
 Cada código de operación se indica por un
código simbólico: ADD, MUL...

 Asignaciones de memoria se dan con


nombres simbólicos.
LENGUAJE EMSAMBLADOR
 Ventajas

 Velocidad
 Eficiencia de tamaño
 Flexibilidad

 Desventajas

 Tiempo de programación
 Programas fuentes grandes
 Peligro de afectar recursos
inesperadamente
 Falta de portabilidad
ESTRUCTURA DE UN TRADUCTOR

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
ESTRUCTURA DE UN COMPILADOR

PROGRAMA FUENTE

ANÁLISIS LÉXICO

ANÁLISIS SINTÁCTICO

TABLA DE MANEJO DE
ANÁLISIS SEMÁNTICO ERRORES
SÍMBOLOS
OPTIMIZACIÓN DE
CÓDIGO INTERMEDIO

PROGRAMA OBJETO
MODELO DE ANALISIS Y SINTESIS
DE LA TRADUCCION

TRADUCCION

ANALISIS SINTESIS

LEXICO SINTAXIS SEMANTICA GENERACION


DE CODIGO
COMPILADOR
Ventaja

• Los programas objeto se ejecutan rapidamente


• 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
PROCESO DE COMPILACION

Prog. Análisis Generación Optimización


Fuente de código

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
AGRUPAR FASES EN UN TRADUCTOR

ETAPA INICIAL ETAPA FINAL


(Front-end) (Back-end)

Análisis léxico Generación de código


Análisis sintáctico intermedio

Análisis semántico Optimización de código


Creación de tabla de símbolos Generación de código objeto

Dependen del lenguaje fuente y son Dependen de la maquina


independientes de la máquina
CREAR COMPILADOR C PARA 2
SISTEMAS OPERATIVOS DIFERENTES

Front-end

Back-end Back-end
UNIX DOS

Genera código Genera código


máquina para UNIX máquina para DOS
CREAR TRES COMPILADORES PARA LA
MISMA MAQUINA

PASCAL C COBOL

Front-end Front-end Front-end

Back-end

Intel
COMPILADOR DE VARIAS PASADAS

 Varias fases de la compilación se


implementan en un único paso

 Un paso implica una léctura del archivo de


entrada y en una escritura de un archivo
de salida

Ventajas
 Favorece la modularidad
 Util cuando los recursos del sistema son
limitados

Desventaja
 Son mas lentos mientras mas pasadas tengan
TIPOS DE Un compilador cruzado es

COMPILADORES un compilador capaz de crear


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

Es un programa de ordenador que


realiza la operación inversa a un
compilador
Compilador escrito en su
propio lenguaje fuente y capaz
de compilarse a sí mismo
TIPOS DE INTERPRETES PURO

Programa
INTERPRETE Resultados
Fuente

HIBRIDO
Programa
ANALISIS Y
Fuente
SINTESIS

Programa Intermedio

INTERPRETE Resultados
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

EJECUCIÓN
INTERPRETE
 Ventajas
 Los programas objeto se pueden detener
 Los programas objeto son muy robustos
 Facilmente 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
PROCESO DEL INTERPRETE

Prog.Fuente Análisis Generación


de código
mov a, 1
a= 1
mov al, a
a:= 1;
mov b, 2
b:=2; b=2
mov bl, b
c:=a+b;
add al, bl
c=a+b mov c, al
DIFERENCIA 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
 Un intérprete traduce el programa
cuando lo lee, convirtiendo el  Un programa que ha sido
código del programa compilado puede correr por si
directamente en acciones. solo, pues en el proceso de
compilación se lo transformo en
otro lenguaje (lenguaje máquina).
 La ventaja del intérprete es que
dado cualquier programa se  El archivo generado por el
puede interpretarlo en cualquier compilador solo funciona en la
plataforma (sistema operativo). plataforma en donde se lo ha
creado.
DIFERENCIA ENTRE INTERPRETE Y COMPILADOR

INTERPRETE COMPILADOR

 No genera un ejecutable  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.

 El proceso de traducción se  Hablando de la velocidad de


realiza en cada ejecución ejecución un archivo compilado es
de 10 a 20 veces más rápido que un
archivo interpretado.

 La ejecución es más lenta, ya  Genera un ejecutable


que para cada línea del
programa es necesario realizar
la traducción
DIFERENCIA ENTRE INTERPRETE Y 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.

 Los lenguajes interpretados no suelen ser  La ejecución es muy rápida debido


muy dependientes de la plataforma de a que el programa ya ha sido
destino, pero en contrapartida suelen ser traducido a código máquina
menos flexibles y potentes que los
compilados.
 El ejecutable va dirigido a una
 El código fuente es necesario en cada plataforma concreta (una CPU, un
ejecución, así que no puede permanecer sistema operativo, y quizá alguna
en secreto otra consideración), siendo
prácticamente imposible portarlo a
otra.
DIFERENCIA ENTRE INTERPRETE Y COMPILADOR

INTERPRETE COMPILADOR

 Los errores sintácticos se detectan  Los lenguajes compilados suelen


durante la ejecución, ya que proporcionar al programador
traducción y ejecución se van mecanismos más potentes y
haciendo simultáneamente. Algún flexibles, a costa de una mayor
error sintáctico podría quedar ligazón a la plataforma.
enmascarado, si para una ejecución
concreta no es necesario traducir la
línea que lo contiene. (Algunos
intérpretes son capaces de evitar esto)

 Un programa interpretado con un  Una vez compilado el programa, el


comportamiento torpe normalmente código fuente no es necesario para
puede ser interrumpido sin dificultad, ejecutarlo, así que puede
ya que su ejecución está bajo el permanecer en secreto si se desea.
control del intérprete, y no sólo del
sistema operativo.
BYTECODE VS CODIGO BINARIO

Es muy importante entender la diferencia entre


bytecode y código binario (o nativo):

 C compila a código binario, que luego es


ejecutado directamente en tu procesador. Cada
instrucción le indica a tu CPU que mueva cosas COMPILADOR
alrededor.

 Java compila a bytecode, que luego es


ejecutado en la máquina virtual de Java(Java
Virtual Machine, ó JVM), una abstracción de una
computadora que ejecuta programas. Cada INTERPRETE
instrucción es entonces manejada por la JVM,
que interactúa con tu computadora.
BYTECODE VS CODIGO BINARIO

 En términos breves: código binario es más


rápido, pero bytecode es más portable y seguro.

 El código binario se ve distinto, dependiendo de


tu máquina, pero bytecode se ve igual en todas
las maquinas. Se podría decir que el código
binario está optimizado para tu configuracion.
Python es un
Ejemplo: interprete
Python, procede de la siguiente manera:

1. Python compila tu código Python a


bytecode
2. Ese bytecode es entonces interpretado en
la Máquina Virtual Python
APLICACION DE COMPILADORES E
INTERPRETES

 Desarrollo de interfaces textuales


 Tratamiento de ficheros de texto con
información estructurada
 Procesadores de texto
 Diseño e interpretación de lenguajes para
el formateo de texto y descripción de
gráficos
 Gestion de base de datos
 Procesamiento del lenguaje natural
 Reconocimiento de formas
METALENGUAJES
Los metalenguajes son
herramientas para la descripción
formal de los lenguajes

 Diagramas de transición
 Expresiones regulares
 Gramáticas
PROYECTO

Condiciones del proyecto

 Describir un lenguaje orientado a objetos


 Construir un compilador para el lenguaje
 El proyecto se podra trabajar en grupos de
4 alumnos
 Puede usar java o C++ u otro lenguaje
para el proyecto
DESCRIPCION DEL LENGUAJE
 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
ALGUNOS EJEMPLOS

declaraciones globales
main(){
variables locales
secuencia de sentencias
Estructura de
}
f1(){ un programa
variables locales
secuencia de sentencias
}
:
fn(){
variables locales
secuencia de sentencias
}
ALGUNOS EJEMPLOS

 Tipos de datos a usar

Caracter
Entero
Float
Cadena

 Declaracion de variables

int i, j, k;
char c, dato;
ALGUNOS EJEMPLOS

 Sentencias de asignacion

La forma general de la sentencia de asignacion es:

Nombre_de_variable = expresion;

ejemplos
dato = cantidad;
x=c;

 Constantes

Pueden ser enteras, reales, de caracter o cadena


Ejemplo:
c=‘A’;
cout<<“UNMSM”;
total = 789;
ALGUNOS EJEMPLOS

 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
ALGUNOS EJEMPLOS

 Sentencias

Por ejemplo en C tenemos:

 Sentencias de etiqueta
 Sentencias de expresion
 Sentencia compuesta
 Sentencia de seleccion
 Sentencia de iteracion
 Sentencia de salto
ALGUNOS EJEMPLOS

Funciones y Procedimientos

Las funciones son los bloques constructores de C y el lugar donde se da toda la


actividad del programa. La forma general de una funcion es:

Especificador_de_tipo nombre_de_la_funcion(lista de parametros)


{
cuerpo de la funcion
}
BIBLIOGRAFIA
KENNETH C.
AHO-ULLMAN(2008). LOUDEN (2004).
Compiladores, Principios, Construcción de
técnicas y herramientas Compiladores,
principios y práctica

TEUFEL. SCHMIDT. JACINTO RUIZ


TEUFEL (1995). CATALAN (2010)
Compiladores, Compiladores Teoria
Conceptos e Implementacion
Fundamentales

Compiladores:
principios, técnicas y
herramientas, (2010),
Alfred V. Aho, Monica S.
Lam, Ravi Sethi &
Jeffrey D. Ullman
BIBLIOGRAFIA
FÉLIX GARCÍA RAFAEL CABALLERO ROLDAN,
MERAYO (2005), TERESA HORTALA GONZALES,
NARCISO MARTI OLIET, SUSANA
Matemáticas Discretas,
NIEVA SOTO, ANTONIO PAREJA
3ra. Edición, Thomson LARA Y MARIO RODRÍGUEZ
ARTALEJO (2007), Matemáticas
Discretas para Informáticos

RICHARD T. VEERARAJAN (2008),


JOHNSONBAUGH Matemáticas Discretas en
(2005), Matemáticas Teoría de Graficas y
Discretas, 6ta. Edición, Combinatoria
Pearson Prentice Hall.

SEYMOUR RAMON ESPINOZA


LIPSCHUTZ, MARC ARMENTA (2010),
LIPSON (2009), Matemáticas Discretas
Matemáticas Discretas,
3ra. Edición, Mc Graw
Hill.
BIBLIOGRAFIA
SUSANNA S. EPP (2012), GRASSMANN-TREMBLAY
Matemáticas Discretas con (1998). Matemática
Aplicaciones Discreta y Lógica.

COLMAN-BUSBY-ROSS RALPH P. GRIMALDI


(1997). Estructura de (2006). Matemáticas
Matemáticas Discretas Discretas y Combinatoria.
para la Computación

Vous aimerez peut-être aussi