Está en la página 1de 9

Lenguaje de programacin

COMPILADORES
Unidad I: Introduccin al
proceso de compilacin
Flor Prof. Flor Narciso
GIDyC-Departamento de Computacin
LABSIULA-Escuela de Ingeniera de Sistemas
Facultad de Ingeniera
Universidad de Los Andes
fnarciso@ula.ve

Un lenguaje de programacin se
puede definir de diferentes maneras:
Notacin formal para describir algoritmos y
funciones que sern ejecutados por una
computadora.
Lenguaje para comunicar instrucciones a una
computadora.
Convencin para escribir descripciones que
puedan ser evaluadas.

Clasificacin de los lenguajes de


programacin (segn el grado de independencia

Clasificacin de los lenguajes de


programacin (segn el grado de independencia

de la mquina)

de la mquina)

Lenguaje de mquina

La forma ms baja de un lenguaje de programacin.


La notacin que entiende directamente una computadora.
Binario o hexadecimal.
Cada instruccin se representa:
Un cdigo numrico y
Unas direcciones de memoria.

Arquitectura de la mquina de Von Neumann. Conjunto de


instrucciones basado en:

Datos
Operaciones aritmticas y lgicas
Asignaciones de posiciones de memoria
Control de flujo

Lenguaje ensamblador
Versin simblica de un lenguaje de
mquina:
Cada cdigo de operacin se indica por un
cdigo simblico: ADD, MUL...
Asignaciones de memoria se dan con nombres
simblicos

Clasificacin de los lenguajes de


programacin (segn el grado de independencia

Clasificacin de los lenguajes de


programacin (segn el grado de independencia

de la mquina)

de la mquina)

Lenguaje de nivel intermedio

Lenguaje de alto nivel

Caractersticas de los lenguajes mquina:


Acceso directo a posiciones memoria
Almacenar
variables
en
registros
procesador

del

Caractersticas de lenguajes de alto nivel:


Manejo de estructuras de control
Manejo de datos

Caractersticas superiores a los lenguajes ensambladores


No acceso directo al sistema
Estructura de datos complejas
Utilizacin de bloques, procedimientos o subrutinas

Ejemplos: Ada, ALGOL, Basic, C, C++, C#, Clipper, Cobol,


Fortran, Java, Lexico, Logo, Object Pascal, Pascal, Perl,
PHP, PL/SQL, Phyton, Modula 2.
Lenguajes funcionales: Haskell, Lisp

TAREA!!!!

Ejemplo: Lenguaje C

Clasificacin de los lenguajes de


programacin (segn el grado de independencia

Procesar

de la mquina)
Lenguaje orientado a problemas concretos

Resolucin de problemas en un campo


especfico.

Ejemplos: SQL, XBASE, Postscript

Someter
a
un
proceso
de
transformacin mediante operaciones
programadas. Es decir, transformar un
origen
(fuente) en un destino
mediante
una
herramienta
de
transformacin
que
permita
operaciones
programadas:
la
computadora.

Procesador de lenguaje
Nombre genrico que reciben las aplicaciones
informticas en las que uno de los datos
fundamentales de entrada es un lenguaje:
-

Traductores
Ensambladores
Cargadores
Desensambladores
Depuradores
Optimizadores de cdigo
Preprocesadores
Editores

- Compiladores
- Enlazadores
- Intrpretes
- Decompiladores
- Analizadores de rendimiento
- Compresores
- Formateadores

Procesador de lenguaje
Se tomar como paradigma de los procesadores de
lenguaje los compiladores.
Los lenguajes de alto nivel hicieron necesarios los
compiladores a partir de los aos 50. Desde entonces,
gracias al descubrimiento de tcnicas sistemticas para el
manejo de muchas tareas que surgen en la compilacin, al
desarrollo de buenos lenguajes de implantacin, entornos
de programacin y herramientas de software, el diseo y
desarrollo de un compilador se ha simplificado
enormemente.

TAREA!!!!

Traductor

Compilador

Lee un texto fuente y lo traduce a un texto objeto.


Est escrito en un lenguaje de Implantacin (LI).
Puede ser cualquier lenguaje desde uno de alto
nivel a uno mquina.
El texto fuente est escrito en lenguaje fuente (LF).
Normalmente uno de alto nivel pero tambin puede
ser de bajo nivel.
El texto objeto est escrito en lenguaje objeto (LO).
Puede ser otro lenguaje de alto nivel, un lenguaje
mquina o un ensamblador.

Traductor que acepta programas


escritos en un lenguaje de
programacin de alto nivel y los
traduce a otro lenguaje, generando
un programa equivalente
independiente, que puede ejecutarse
tantas veces como se desee.

Compilacin

Proceso por el cual se traducen programas en cdigo fuente


(programa fuente) a programas en cdigo objeto (programa
objeto).

El programa que realiza esta traduccin se llama compilador.

El archivo de cdigo objeto que se obtiene con la compilacin


est representado normalmente en cdigo de mquina,
aunque tambin puede ser un cdigo intermedio binario
multiplataforma (bytecode).

Cdigo fuente
Conjunto de lneas de cdigo que conforman un
bloque de texto que normalmente genera otro
cdigo mediante un compilador o intrprete para
ser ejecutado por una computadora.
Normalmente se refiere a la programacin de
software. Un nico programador o un equipo de
programadores escriben el cdigo fuente en el
lenguaje de programacin elegido. Posteriormente
en un proceso de compilacin el cdigo fuente se
traduce en cdigo objeto.

Compilacin
El tiempo que se tarda en traducir un programa en
cdigo fuente se llama tiempo de compilacin.
El tiempo que tarda en ejecutarse un programa en
cdigo objeto se llama tiempo de ejecucin.
El programa fuente y los datos se procesan en
momentos diferentes.

Cdigo objeto
Cdigo resultante de la compilacin
del cdigo fuente, por lo general est
codificado en cdigo de mquina y
distribuido en varios archivos
resultantes de la compilacin de cada
archivo de cdigo fuente.

Compiladores
Los compiladores son las
utilizadas por los informticos
de aplicaciones.

herramientas ms
para el desarrollo

En el caso particular del desarrollo de compiladores


se hace necesario definir tres aspectos bsicos:
El lxico, la sintaxis y la semntica del lenguaje fuente a
ser compilado.
La estructura interna del compilador.
La arquitectura de la computadora y su conjunto de
instrucciones del lenguaje objeto.

Estructura y fases de un compilador


Programa fuente
FRONT-END

Estructura y fases de un
compilador
La construccin de un compilador para un
determinado lenguaje es una tarea
compleja, que se puede reducir siguiendo
una metodologa: dividir en mdulos las
diferentes fases.
La
complejidad
depender
de
las
caractersticas del lenguaje fuente y del
lenguaje objeto y de su diferencia de
niveles.

Estructura y fases de un
compilador

ANLISIS

Fases de un compilador:
Anlisis : Comprobar la correccin del programa fuente

SNTESIS

Lxico
Sintctico
Semntico

Sntesis
Generacin de cdigo intermedio
Optimizacin de cdigo intermedio
Generacin de cdigo
Optimizacin de cdigo

BACK-END
Programa objeto

Estructura y fases de un
compilador
Fases de un compilador:
Anlisis lxico: Se realiza en el nivel de los caracteres, debe reconocer
tokens y entregarlos junto con sus atributos al analizador sintctico, aunque
estos ltimos no son necesarios para el anlisis sintctico, sino para las fases
siguientes.
El programa fuente es tratado con el analizador lxico (scanner), lee
secuencialmente caracteres, los compara con patrones que representan
unidades sintcticas e identifica stas, tambin llamadas componentes lxicos
o tokens, tales como: constantes, identificadores (de variables, de funciones,
de procedimientos, de tipos, etc.), palabras reservadas y operadores. Una vez
identificado el token es entregado al analizador sintctico. A cada token se le
asocia una serie de informaciones, segn las necesidades del traductor.

Estructura y fases de un
compilador

Estructura y fases de un
compilador
Fases de un compilador:
Anlisis sintctico: Llamado tambin parser, realiza su anlisis en
el nivel de la sentencia.
Es mucho ms complejo que el anlisis lxico.
Su funcin es tomar los tokens que ha encontrado el analizador
lxico y determinar la estructura sintctica de las sentencias,
agrupando los tokens en clases sintcticas ( los no terminales de la
gramtica), tales como expresiones, funciones, etc.

Estructura y fases de un
compilador

Fases de un compilador:
Anlisis semntico: Detecta la validez semntica (reglas de

Fases de un compilador:
Generacin de cdigo intermedio: El cdigo intermedio no es

significado) de las sentencias aceptadas por el sintctico. Tpico de


esta fase es la comprobacin de tipos de datos.

un lenguaje de programacin de ninguna mquina real, sino que


corresponde a una mquina abstracta, que se debe definir lo ms
general posible, de manera que sea posible traducir este cdigo
intermedio a cualquier mquina real.
El objetivo del cdigo intermedio es reducir el nmero de
programas necesarios para construir traductores y permitir ms
fcilmente la transportabilidad de los traductores desde unas
mquinas a otras.

Estructura y fases de un
compilador

Estructura y fases de un
compilador

Fases de un compilador:
Optimizacin de cdigo intermedio: Es independiente de la

Fases de un compilador:
Optimizacin de cdigo: En este caso ya depende de la

mquina. Algunas optimizaciones pueden consistir en evaluacin de


expresiones constantes, el uso de las propiedades asociativa,
conmutativa de algunos operadores, reduccin de expresiones
comunes, etc.

mquina, de su arquitectura, de la asignacin ptima de registros, el


uso de operaciones de registros en vez de usar memoria.

Generacin de cdigo: Una vez que se ha obtenido el cdigo


intermedio se pasar a ensamblador o a cdigo mquina de una
mquina real en el caso de un compilador o a otro lenguaje en el caso
de un traductor.

Manejo de errores: Los errores encontrados en la diferentes fase


de anlisis se envan a un mdulo de manejo de errores. En el caso
ms sencillo, sacar un mensaje indicando el error, el nmero de
lnea donde se ha producido y abortar el proceso de anlisis o
traduccin.
Puede sofisticarse este mdulo si se intenta recuperar el error
(una especie de reparacin provisional) para continuar el proceso el
mayor tiempo posible y encontrar el mximo de errores.

Estructura y fases de un
compilador
Fases de un compilador:
Tabla de smbolos: Es una estructura de datos que contiene toda
la informacin relativa a cada identificador que aparece en el
programa fuente. Cada elemento de la tabla se compone de al menos
del identificador y sus atributos.
Los atributos son informaciones relativas a cada identificador,
necesarias para o bien realizar el anlisis semntico o bien la
traduccin. Cualquiera de los tres analizadores puede rellenar algn
atributo, pero el nombre del identificador (lexema) es misin del
analizador lxico.

Estructura y fases de un
compilador
Estructura de un compilador:
FRONT-END: Analiza el cdigo fuente,
comprueba su validez, genera el rbol de
derivacin y rellena los valores de la tabla de
smbolos. Suele ser independiente de la
plataforma o sistema para el cual se vaya a
compilar.
BACK-END: Genera el cdigo de mquina,
especfico de una plataforma, a partir de los
resultados de la fase de anlisis, realizada por el
FRONT-END.

Estructura y fases de un
compilador
Estructura de un compilador:
Esta divisin permite que el mismo BACK-END se utilice
para generar el cdigo de mquina de varios lenguajes de
programacin distintos y que el mismo FRONT-END que
sirve para analizar el cdigo fuente de un lenguaje de
programacin concreto sirva para la generacin de cdigo
de mquina en varias plataformas distintas.
El cdigo que genera el BACK END normalmente no se
puede ejecutar directamente, sino que necesita ser
enlazado por un programa enlazador (linker).

Tipos de compiladores
Compiladores de varias pasadas: Necesitan leer
el cdigo fuente varias veces antes de poder
producir el cdigo de mquina.
Compiladores JIT (Just In Time): Forman parte de
un intrprete y compilan partes del cdigo segn
se necesitan.
Tarea: Investigar acerca de los compiladores de
varias pasadas

Tipos de compiladores
Esta taxonoma de los tipos de compiladores no es
excluyente, por lo que puede haber compiladores
que se adscriban a varias categoras:
Compiladores cruzados: Se ejecutan en una mquina pero
el cdigo objeto que producen es para otra mquina.
Compiladores optimizadores: Realizan cambios en el
cdigo para mejorar su eficiencia, pero manteniendo la
funcionalidad del programa original.
Compiladores de una sola pasada: Generan el cdigo
mquina a partir de una nica lectura del cdigo fuente.

Herramientas para la construccin de


procesadores de lenguaje
Generadores de analizadores lxicos: Basada en el

uso de expresiones regulares, generan automticamente el


cdigo fuente para el anlisis lxico a partir de una
especificacin de los tokens. La ms usada es lex,
incorporada en el sistema operativo UNIX. Existen versiones
para PC.

Generadores

de

analizadores

sintcticos:

Construyen el cdigo fuente del analizador sintctico a partir


de la especificacin de la gramtica del lenguaje fuente. La
mas usada yacc incluida en UNIX. Tambien existen versiones
para PC.

Herramientas para la construccin de


procesadores de lenguaje
Analizadores

de gramticas: Dada una


gramtica especificada formalmente, verifican si es
de un determinado tipo o no. Normalmente se
utilizan para verificar las gramticas LL(k) y LR(k).

Mquinas de traduccin dirigida por


sintaxis: Producen un conjunto de rutinas que
recorren el rbol sintctico y generan cdigo
intermedio. Asocian una o ms traducciones a cada
nodo sintctico.

Aplicaciones de los
procesadores de lenguaje
Las tcnicas empleadas en la construccin
de traductores, compiladores e intrpretes
pueden aplicarse en la construccin de
otras herramientas:
Editores sensibles al contexto

Herramientas para la construccin de


procesadores de lenguaje
Generadores

automticos

Analizadores

de

de

cdigo:

Trabajan con un conjunto de reglas que permiten la


traduccin del cdigo en lenguaje intermedio al
lenguaje objeto. Las reglas suelen remplazar
instrucciones de cdigo intermedio por patrones
que contienen las instrucciones equivalentes de la
mquina objeto.

flujo:

informacin
necesaria
optimizaciones de cdigo.

para

Suministran
la
realizar
las

Aplicaciones de los
procesadores de lenguaje
Formateadores de texto
Intrpretes de comandos de un sistema
operativo
Construccin de entornos operativos

Conversores de formato

Intrpretes para consultar base de datos

Preprocesadores

Compiladores de silicio

Formateadores de cdigo fuente

Procesamiento de lenguajes naturales

Generadores de cdigo

Reconocimiento del habla

Verificacin esttica de programas

También podría gustarte