Vous êtes sur la page 1sur 11

Lenguaje de programacin COMPILADORES Unidad I: Introduccin al proceso de compilacin

Flor Prof. Flor Narciso GIDyC-Departamento de Computacin LABSIULA-Escuel a de Ingeniera de Sistemas Facultad de Ingenier a 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 instruccione s una computadora. Convencin para escribir descripciones que puedan ser evaluadas. a

Clasificacin de los lenguajes de programacin (segn el grado de


independencia 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.

Clasificacin de los lenguajes de programacin (segn el grado de


independencia de la mquina)

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

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

Clasificacin de los lenguajes de programacin (segn el grado de


independencia de la mquina)

Clasificacin de los lenguajes de programacin (segn el grado de


independencia de la mquina) Lenguaje de alto nivel
Caractersticas superiores a los lenguajes ensambladores

Lenguaje de nivel intermedio


Caractersticas de los lenguajes mquina:
Acceso directo a posiciones memoria Almacenar variables en registros procesador del

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

Caractersticas de lenguajes de alto nivel:


Manejo de estructuras de control Manejo de datos

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

T ARE A! ! ! !

Ejemplo: Lenguaje C

Clasificacin de los lenguajes de programacin (segn el grado de


independencia de la mquina) Lenguaje orientado a problemas concretos

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

Resolucin de problemas en un campo especfico.

Ejemplos: SQL, XBASE, Postscrip t

Procesador de lenguaje
Nombre genrico que aplicaciones informticas en de
-

Procesador lenguaje
Se tomar como paradigma de los lenguaje los compiladores.

de

lenguaje:

los

reciben las las que uno datos fundamentales de entrada es un

procesadores de

Traductores - Compiladores Ensambladores - Enlazadores Cargadores - Intrpretes Desensambladores - Decompiladores Depuradores - Analizadores de rendimiento Optimizadores de cdigo - Compresores Preprocesadores - Formateadores Editores

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!!! !

Traducto r
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 lenguaj e fuente (LF). Normalmente uno de alto nivel pero tambin puede ser de bajo nivel. El texto objeto est escrito en lenguaj e objeto (LO). Puede ser otro lenguaje de alto nivel, un lenguaje mquina o un ensamblador.

Compilador
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.

Compilaci n
Proceso por el cual se traducen programas en c digo fuente (programa fuente) a programas en cdigo objeto (programa objeto). El programa que realiza esta traduccin se llama c ompilado r.

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 .

El archivo de cdigo objeto que se obtiene con la compilacin est representado normalmente en c dig o de m quina , 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.

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 herramientas ms utilizadas por los informticos para desarrollo de aplicaciones .

Estructura y fases de un compilador


el

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.

La construccin de un compilador para un determinado lenguaje es una tarea compleja, que se puede reducir siguiend o 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


Programa fuen te FRONT -END ANLISIS

Estructura y fases de un compilador


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

SNTES IS

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 compar a 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


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 significado) de las sentencias aceptadas por el sintctico. Tpico de esta fase es la comprobacin de tipos de datos.

Estructura y fases de un compilador


Fases de un compilador: Generacin de cdigo intermedio: El cdigo intermedio no
es 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


Fases de un compilador: Optimizacin de cdigo intermedio: Es independiente 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.

Estructura y fases de un compilador


Fases de un compilador: Optimizacin de cdigo:
En este caso ya depende de la mquina, de su arquitectura, de la asignacin ptima de registros, el uso de operaciones de registros en vez de usar memoria.

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.

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.

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
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.

Tipos de compiladores
Compiladores de varias pasada s: Necesita n 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 necesita n. Tarea: Investigar acerca de los compiladores de varias pasadas

Herramientas para la construccin de procesadores de lenguaje


Generadores de analizadores lxicos: Basada
en el uso de expresiones regulares, automticamente el cdigo fuente para el lxico a partir de una especificacin de los La ms usada es lex, incorporada en el operativo UNIX. Existen versiones para PC. generan anlisis tokens. sistema

Generadores

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.

de analizadores sintcticos: Construyen

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).

Herramientas para la construccin de procesadores de lenguaje


Generadores automticos de cdigo: Trabajan

Mquinas de traduccin dirigida por sintaxis: Producen un conjunto de rutinas que


recorren el rbol sintctico y genera n cdigo intermedio. Asocian una o ms traducciones a cada nodo sintctico .

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.

Analizadore s de
informacin cdigo.

necesaria realiza r las

flujo:

Suministran para optimizaciones

la de

Aplicaciones de los procesadores de lenguaje


Las tcnicas empleadas en la construcc in de traductores, compiladores e intrpretes pueden aplicarse en la construccin de otras herramientas:
Editores sensibles al contexto Conversores de formato Preprocesadores Formateadores de cdigo fuente Generadores de cdigo Verificacin esttica de programas

Aplicaciones de los procesadores de lenguaje


Formateadores de texto Intrpretes de comandos de un sistema operativo Construccin de entornos operativ os Intrpretes para consultar base de datos Compiladores de silicio Procesamiento de lenguajes naturales Reconocimiento del habla

Vous aimerez peut-être aussi