Está en la página 1de 39

LENGUAJES Y TRADUCTORES

Arquitectura Básica de un
Traductor

Profesor: Carlos A. Ruiz De La Cruz Melo


Correo: cruizdelacruzm@unmsm.edu.pe
OBJETIVO DE LA ASIGNATURA
❑ Conocer los conceptos teóricos referentes a:

▪ Definición y diseño de los lenguajes de


programación.
▪ Construcción de traductores.

Escrito en algún lenguaje


de programación, Programa que realiza la
Resultado,
generalmente de alto traducción
generalmente en
nivel
lenguaje de bajo nivel

Programa fuente Programa


TRADUCTOR
objeto
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
EJEMPLO DE UN TRADUCTOR

Lenguaje C Compilador C Resultado

hola.c hola.obj
#include “stdio.h”
int main(){
cout<<“hola”; TRADUCTOR
return 0;
}
PORQUE USAR UN TRADUCTOR?

• El microprocesador de la computadora
no entiende un programa en lenguaje de
alto nivel.

• El microprocesador solo entiende


programas en lenguaje de bajo nivel
(ensamblador) que es el único lenguaje
que reconoce el microprocesador.

• El traductor se encarga de traducir el


programa de alto nivel (programa fuente)
a programa en lenguaje de bajo nivel
(programa objeto).
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
TIPOS DE TRADUCTORES

❑ Interpretes

❑ 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
El
años 50.
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
DIFERENCIA ENTRE INTERPRETES Y
COMPILADORES

❑ Un intérprete es un programa que


ejecuta directamente las instrucciones
escritas en un lenguaje de
programación dado

Prog. Fuente INTERPRETE Resultados


(Alto nivel)

❑ Un compilador es un programa que


transforma el código fuente de un
programa a su equivalente en otro
lenguaje de programación de más bajo
nivel.

Prog. Fuente COMPILADOR Prog. Objeto


(Alto nivel) (leng. de bajo nivel)
ENSAMBLADOR

Es un tipo de
compilador

Leng. Fuente ENSAMBLADOR Leng. Objeto


(asembler) (leng.máquina)
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
MODELO DE ANALISIS Y SINTESIS
DE LA TRADUCCION

TRADUCCION

ANALISIS SINTESIS

LEXICO SINTAXIS SEMANTICA GENERACION


DE CODIGO
TRADUCTOR DE VARIAS PASADAS

pasada Lectura del programa fuente

Traductor de Lectura de todas las fases en


un único paso
una pasada

Traductor de Lectura de varias veces el


varias pasadas programa

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

Desventaja
▪Son mas lentos mientras mas pasadas tengan
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
QUE ES UN COMPILADOR?

❑ Un compilador es un traductor que


genera un programa que se puede
ejecutar por sí solo(prog.objeto). Prog. Fuente
❑ El problema es que sólo podrás (Alto nivel)
ejecutarlo en la plataforma para la que
se ha compilado. Cada sistema
operativo (y cada familia de
procesadores) necesita una versión
compilada diferente. COMPILADOR

❑ El término «compilador» fue acuñado a


principios de 1950 por Grace Murray
Hopper. La traducción fue vista entonces Prog. Objeto
como la «compilación» de una secuencia bajo nivel)
de rutinas seleccionadas.
EL PRIMER COMPILADOR

El primer compilador del


lenguaje de alto nivel FORTRAN
se desarrolló entre 1954 y 1957
en IBM por un grupo dirigido
por John Backus.
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
GENERACIÓN DE CÓDIGO
OBJETO

OPTIMIZADOR DE CÓDIGO
OBJETO

PROGRAMA OBJETO
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
Análisis sintáctico Generación de código objeto
Análisis semántico
Optimización de Código
Creación de tabla de símbolos 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
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
INTERPRETE

❑ Un intérprete primero traduce el código a interpretar


a alguna representación intermedia para así
acelerar su ejecución.

❑ Esto es por ejemplo lo que pasa con los lenguajes


que se basan en máquinas virtuales, como el caso
de Java y su Java Virtual Machine.

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

Generación
Prog.Fuente Análisis
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 totalmente
línea un programa escrito en un un programa escrito en un lenguaje; el
lenguaje; en lenguaje fuente y lo va lenguaje fuente, y lo traduce a un
traduciendo a un código intermedio, programa equivalente a otro lenguaje,
para ejecutarlo. lenguaje objeto

▪Un intérprete traduce el programa ▪Un programa que ha sido compilado


cuando lo lee, convirtiendo el código puede correr por si solo, pues en el
del programa directamente en proceso de compilación se lo
acciones. transformo en otro lenguaje (lenguaje
máquina).

▪La ventaja del intérprete es que ▪El archivo generado por el


dado cualquier programa se puede compilador solo funciona en la
interpretarlo en cualquier plataforma plataforma en donde se lo ha creado.
(sistema operativo).
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 alrededor. COMPILADOR

▪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 instrucción es entonces
manejada por la JVM, que interactúa con tu INTERPRETE
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
LABORATORIO
❑ Defina la gramática del lenguaje especificado
en la clase anterior.
❑ La gramática no debe incluir reglas de
producción recursivas, ni ambiguas.
❑ Incluya también en su trabajo el lenguaje
definido en la anterior clase para poder
comparar con su gramática.
❑ También indique solamente el tipo de
analizador sintáctico a usar.

Enviar la gramática en un documento en


Word y también incluya su lenguaje ya
definido totalmente en la clase anterior al
siguiente correo:

cruizdelacruzm@unmsm.edu.pe

También podría gustarte