Vous êtes sur la page 1sur 40

Introduccin

En estos temas abarcaremos los principales puntos de un


compilador, su concepto ,de igual manera estudiaremos y
explicaremos de la importancia y sus funciones as como la
explicacin de lo que son las maquinas virtuales y de multinivel.
Objetivo

Obtener una representacin de la entrada que nos permite realizar la


sntesis o la interpretacin con comodidad.
El objetivo es bsicamente traducir un programa escrito en un programa
fuente que llamaremos programa fuente en un equivalente en otro lenguaje
denominado objeto al que llamaremos programa o cdigo objeto.
Historia

A finales de la dcada de 1940, comenzaron a construirse las


primeras computadoras digitales y fue necesario implementar un
lenguaje capaz de realizar los clculos, es aqu donde aparece el
lenguaje de mquina que representaba secuencias de cdigos
numricos:
C7 06 0000 0002 (instruccin que mueve el nmero dos a la
ubicacin 0000)
En 1950, G. M. Hopper acua el trmino compilador y aparecen
los primeros trabajos sobre compiladores relacionados con la
traduccin de frmulas aritmticas a cdigo de mquina.
1960, se disea el lenguaje LISP. En un principio, el cdigo
LISP se traduca manualmente a cdigo mquina. Se escribi
en LISP un programa capaz de interpretar programas LISP, que
se tradujo manualmente a cdigo de mquina, construyendo de
este modo un intrprete ejecutable de LISP.
1970, se presentan los mayores avances en el rea de
lenguajes de programacin. Aparecen los primeros programas
que automatizan los procesos de anlisis lxico y sintctico.
Surgiendo la llamada Torre de Babel debido a la proliferacin
de la teora para la construccin de compiladores.

1980, comienzan a proliferar las tcnicas de mejoramiento de


cdigo (optimizacin), se consolida y prolifera el concepto de
asignacin y liberacin de memoria dinmica. La programacin
orientada a objetos es extensamente utilizada y madura.
1990, los lenguajes de programacin y compiladores son muy
similares a lo que tenemos actualmente, surgen los ambientes
de desarrollo, los lenguajes interpretados comienza a ganar
terreno en aplicaciones de Internet y el cdigo intermedio se
vuelve a poner de moda
Qu es un compilador ?
Es aquel traductor que tiene como entrada una sentencia en
lenguaje formal y como salida tiene un fichero ejecutable, es
decir, realiza una traduccin de un cdigo de alto nivel a cdigo
mquina (tambin se entiende por compilador aquel programa
que proporciona un fichero objeto en lugar del ejecutable final).
Un traductor se define como un programa que traduce o
convierte desde un texto o programa escrito en un lenguaje
fuente hasta un texto o programa equivalente escrito en un
lenguaje destino produciendo, si cabe, mensajes de error.
Funciones
La funcin principal que cumple es traducir a un
lenguaje mas sencillo y entendible por la maquina ,
informa al usuario si existen errores en el cdigo fuente
con el fin de ejecutar la aplicacin sin problemas, si
existe un error simplemente se detiene.

Caractersticas
Se dividen en dos partes :
1. Front End: parte que analiza en cdigo fuente,
prueba su validez y genera el rbol de derivacin y
rellena los valores de la tabla de smbolos.
FASES DE UN COMPILADOR

Cdigo objeto Cdigo


fuente
Anlisis lxico
En esta fase, la cadena de caracteres que constituye el programa fuente se
lee de izquierda a derecha y se agrupa en componentes lxicos, que son
secuencias de caracteres que tienen un significado atmico; adems el
analizador lxico trabaja con la tabla de smbolos introduciendo en sta los
nombres de las variables.
Anlisis sintctico:
Es la fase del analizador que se encarga de chequear la secuencia de
tokens que representa al texto de entrada, en base a una gramtica dada.
En caso de que el programa de entrada sea vlido, suministra el rbol
sintctico que lo reconoce en base a una representacin computacional.
Este rbol es el punto de partida de la fase posterior de la etapa de anlisis:
el analizador semntico.
Fase de anlisis semntico
Esta fase revisa el rbol sintctico junto con los atributos y la tabla de smbolos
para tratar de encontrar errores semnticos. Para todo esto se analizan los
operadores y operando de expresiones y proposiciones. Finalmente rene la
informacin necesaria sobre los tipos de datos para la fase posterior de
generacin de cdigo. El componente ms importante del anlisis semntico es la
verificacin de tipos. Aqu, el compilador verifica si los operando de cada operador
son compatibles segn la especificacin del lenguaje fuente.
Fase de generacin de cdigo intermedio
Despus de la etapa de anlisis, se suele generar una representacin intermedia
explcita del programa fuente. Dicha representacin intermedia se puede
considerar como un programa para una mquina abstracta.
Cualquier representacin intermedia debe tener dos propiedades importantes;
debe ser fcil de generar y fcil de traducir al cdigo mquina destino. As, una
representacin intermedia puede tener diversas formas.
Fase de optimizacin de cdigo
Esta fase trata de mejorar el cdigo intermedio, de modo que en la siguiente
fase resulte un cdigo de mquina ms rpido de ejecutar. Algunas
optimizaciones son triviales. En nuestro ejemplo hay una forma mejor de
realizar el clculo de la comisin, y pasa por realizar sustituciones triviales en la
segunda y cuarta instrucciones, obtenindose:
t2 = valor * 8.0
comisin= fijo + t2
El compilador puede deducir que todas las apariciones de la variable t1 pueden
sustituirse por la constante 8,0, ya que a t1 se le asigna un valor que ya no
cambia, de modo que la primera instruccin se puede eliminar. Algo parecido
sucede con la variable t3, que se utiliza slo una vez, para transmitir su valor a
comisin en una asignacin directa, luego resulta seguro sustituir comisin por
t3, a raz de lo cualse elimina otra de las lneas del cdigo intermedio.
Fase de generacin de cdigo mquina
La fase final de un compilador es la generacin de cdigo objeto, que por lo
general consiste en cdigo mquina reubicable o cdigo ensamblador. Cada una
de las variables usadas por el programa se traduce a una direccin de memoria
(esto tambin se ha podido hacer en la fase de generacin de cdigo
intermedio). Despus, cada una de las instrucciones intermedias se traduce a
una secuencia de instrucciones de mquina que ejecuta la misma tarea.

La tabla de smbolos
Una funcin esencial de un compilador es registrar los identificadores de usuario
(nombres de variables, de funciones, de tipos, etc.) utilizados en el programa
fuente y reunir informacin sobre los distintos atributos de cada identificador.
Estos atributos pueden proporcionar informacin sobre la memoria asignada a
un identificador, la direccin de memoria en que se almacenar en tiempo de
ejecucin, su tipo, su mbito (la parte del programa donde es visible), etc.
CLASIFICACIN DE LOS COMPILADORES
Preprocesadores:
Permiten modificar el programa fuente antes de la verdadera compilacin.
Hacen uso de macroinstrucciones y directivas de compilacin.

Ensambladores y macroensambladores:
Son los pioneros de los compiladores, ya que en los albores de la
informtica, los programas se escriban directamente en cdigo mquina, y el
primer paso hacia los lenguajes de alto nivel lo constituyen los
ensambladores. Un ensamblador es un compilador sencillo, en el que el
lenguaje fuente tiene una estructura tan sencilla que permite la traduccin de
cada sentencia fuente a una nica instruccin en cdigo mquina.
Conversores fuente-fuente:
Permiten traducir desde un lenguaje de alto nivel a otro lenguaje de alto
nivel, con lo que se consigue una mayor portabilidad en los programas de
alto nivel.

Compilador cruzado:
Es un compilador que genera cdigo para ser ejecutado en otra mquina.
Se utilizan en la fase de desarrollo de nuevos ordenadores. De esta manera
es posible, p.ej., construir el sistema operativo de un nuevo ordenador
recurriendo a un lenguaje de alto nivel, e incluso antes de que dicho nuevo
ordenador disponga siquiera de un compilador.
Intrpretes

Es como un compilador, solo que la salida es una ejecucin. El programa de


entrada se reconoce y ejecuta a la vez. No se produce un resultado fsico
(cdigo mquina) sino lgico (una ejecucin).
Su principal ventaja es que permiten una fcil depuracin. Entre los
inconvenientes podemos citar, en primer lugar, la lentitud de ejecucin , ya
que al ejecutar a la vez que se traduce no puede aplicarse un alto grado de
optimizacin; por ejemplo, si el programa entra en un bucle y la
optimizacin no est muy afinada, las mismas instrucciones se interpretarn
y ejecutarn una y otra vez, enlenteciendo la ejecucin del programa.
Intrpretes De Comandos

Un intrprete de comandos traduce sentencias simples a invocaciones a


programas de una biblioteca. Se utilizan especialmente en los sistemas
operativos (la shell de Unix es un intrprete de comandos). Los programas
invocados pueden residir en el kernel (ncleo) del sistema o estar
almacenados en algn dispositivo externo como rutinas ejecutables que se
traen a memoria bajo demanda.
ASPECTOS FORMALES
Cadenas , Alfabetos Y Lenguajes

Una cadena es un arreglo que utiliza el carcter nulo (\0) al


final del arreglo para indicar el fin de la cadena.

Una cadena de caracteres encerradas entre comillas dobles


se le denomina como constantes de cadenas y el
compilador agrega automticamente el carcter nulo.
MAQUINAS VIRTUALES
Es un contenedor de software perfectamente aislado que puede ejecutar
sus propios sistemas operativos y aplicaciones como si fuera un ordenador
fsico
Tipos de maquinas virtuales

Existen en dos categoras segn su funcionalidad y su grado de equivalencia


a una verdadera maquina.
Maquinas virtuales de sistema (en ingls System Virtual Machine)
Maquinas virtuales de proceso (en ingls Process Virtual Machine)
Maquinas virtuales de sistema, tambin llamadas mquinas virtuales de
hardware, permiten a la mquina fsica subyacente multiplicarse entre
varias mquinas virtuales, cada una ejecutando su propio sistema
operativo.
Mquinas virtuales de proceso

A veces llamada mquina virtual de aplicacin, se ejecuta como un


proceso normal dentro de un sistema operativo y soporta a un solo
proceso. La mquina se inicia automticamente cuando se lanza el
proceso que se desea ejecutar y se detiene para cuando este finaliza. Su
objetivo es el de proporcionar un entorno de ejecucin independiente de la
plataforma subyacente y permita que un programa se ejecute siempre de
la misma forma sobre cualquier plataforma.
Conclusin

Los compiladores para lenguajes de alto nivel tienen muchas fases, en las
que progresivamente se va transformando un texto de un lenguaje a otro
Muchas aplicaciones necesitan lenguajes especiales y, por tanto,
compiladores. Estos compiladores sencillos se pueden construir con
herramientas para anlisis lxico y sintctico:
lex o aflex: permiten generar analizadores lxicos
yacc o ayacc: permiten generar analizadores sintcticos Con estas
herramientas se pueden construir analizadores o parsers en C o Ada, y
luego integrarlos con la aplicacin.
Referencias

Java A Tope:
Traductores Y Compiladores Con Lex/Yacc, Jflex/Cup Y Javacc.
Edicin Electrnica
Autores: Sergio Glvez Rojas Y Migue L ngeal Mor Mata

Compiladores Principios, Tcnicas Y Herramientas


Dragon Book
I N
N C
AT E
S U
R
S PO
C I A
RA
G
Preguntas

Qu es compilador?

realiza una traduccin de un cdigo de alto nivel a cdigo mquina (tambin se


entiende por compilador aquel programa que proporciona un fichero objeto en
lugar del ejecutable final).
Cul es la funcin del compilador?

traducir a un lenguaje mas sencillo y entendible por la


maquina
En qu fase el programa fuente se lee de izquierda a
derecha?

Anlisis lxico
Es la fase del analizador que se encarga de chequear la
secuencia de tokens

Anlisis sintctico:
Cul es el componente ms importante del anlisis
semntico?

la verificacin de tipos
Hacen uso de macroinstrucciones y directivas de
compilacin

Preprocesadores:
Qu hace y que funcin realiza el intrprete de comandos?

Un intrprete de comandos traduce sentencias simples a


invocaciones a programas de una biblioteca
Qu funcin realiza el ensamblador?

La traduccin de cada sentencia fuente a una nica instruccin


en cdigo mquina.
Qu es una cadena?

Una cadena es un arreglo que utiliza el carcter nulo (\0) al final


del arreglo para indicar el fin de la cadena.
Qu son los intrpretes en
compiladores?
Es como un compilador, solo que la salida es una ejecucin

Vous aimerez peut-être aussi