Sie sind auf Seite 1von 13

Capitulo 1: Introduccin

Los computadores ejecutan instrucciones escritas en un lenguaje de bajo nivel entendible por la mquina, sin embargo este tipo de lenguajes es difcilmente comprensible por el programador de la misma, por ello existen lenguajes de programacin de alto nivel, significativos y de mayor similitud al lenguaje natural, gracias a los cuales el programador puede escribir las instrucciones que constituyen a los programas y que posteriormente, mediante un proceso de Traduccin o Interpretacin sern convertidas al lenguaje de bajo nivel entendibles por la mquina. Para efectuar el proceso anteriormente descrito se hacen uso de Traductores o Intrpretes. Los primeros son programas que toman como entrada un texto escrito en un lenguaje fuente y generan como salida otro texto en un lenguaje objeto, es importante resaltar que los traductores leen y traducen la totalidad de instrucciones. Los intrpretes efectan la operacin de conversin de las instrucciones contenidas en el lenguaje fuente hacia el lenguaje objeto, paso a paso, por cada sentencia que constituye el texto de entrada. Surgen entonces una serie de diferencias entre la funcionalidad de los traductores e intrpretes, los programas se ejecutan ms rpidamente una vez traducidos, por su parte, para el programador es ms cmodo construir un programa mediante un intrprete, que va mostrando los errores que se generan, paso a paso, por ello se dice que es ms sencilla la correccin de errores en los intrpretes que en los traductores, debido a que el cdigo fuente est presente durante la ejecucin. Para el proceso de traduccin se usa una variada gama de programas, cada uno de los cuales tiene delimitadas

funcionalidades. A continuacin se describen cada uno de ellos. Compilador: Es el encargado de efectuar la traduccin del cdigo fuente a lenguaje ensamblador. Ensamblador: Toma las instrucciones traducidas por el compilador a lenguaje ensamblador y las traduce a cdigo mquina reubicable. Montador: Se encarga de montar las diferentes unidades de cdigo reubicable en una nica unidad. Cargador: Es el encargado de cargar a memoria principal el programa entero como cdigo mquina ejecutable. Los traductores efectan el proceso en una serie de fases que en algunos casos se traslapan entre s, estas son: anlisis, sntesis, generacin de cdigo intermedio y optimizacin de cdigo. La fase de anlisis implica la evaluacin lxica, sintctica y semntica del cdigo fuente. Los compiladores son programas de computadora que traducen de un lenguaje a otro. Un compilador toma como su entrada un programa escrito en su lenguaje fuente y produce un lenguaje equivalente escrito en su lenguaje objetivo. Por lo regular el lenguaje fuente es un lenguaje de alto nivel, tal como C o C++, mientras que el lenguaje objetivo es el cdigo objeto (tambin llamado Cdigo de Mquina) para la mquina objetivo, es decir cdigo escrito en las instrucciones de mquina correspondientes a la computadora en el cual se ejecutar. Podemos visualizar este proceso de la siguiente manera:

Programa fuente
(leng. De alto nivel)

Programa objetivo
(leng. de maquina)

errores
2

Los compiladores se utilizan en casi todas las formas de la computacin, y cualquiera que est involucrado en este medio debe conocer la organizacin y el funcionamiento bsico de un compilador. Una tarea frecuente en las aplicaciones de las computadoras es el desarrollo de programas de interfaces e intrpretes de comandos, que son ms pequeos que los compiladores pero utilizan las mismas tcnicas.

1.1 Los Intrpretes


Son programas capaces de analizar y ejecutar otros programas escritos en un lenguaje de alto nivel. Los intrpretes suelen contraponerse a los compiladores, ya que mientras los segundos se encargan de traducir un programa desde su descripcin en un lenguaje de programacin al cdigo mquina del sistema destino, los primeros suelen realizar la traduccin a medida que sea necesario y normalmente no guardan el resultado de dicha traduccin.

1.1.1 Funcionamiento de los Compiladores e Intrpretes


Instrucciones
1.________ 2.________ 3.________ 4.________ 5.________ 6.________ 7.________ 8.________ _

Instrucciones Compilador
1.________ 2.________ 3.________ 4.________ 5.________ 6.________ 7.________ 8.________ _

Errores X L1 L4 Y L7 Z

En esta grfica se muestra la manera en la que el compilador ejecuta TODAS las instrucciones programadas y arroja los errores correspondientes.
Instrucciones
1.________ 2.________ 3.________ 4.________ 5.________ 6.________ 7.________ 8.________ _

Instrucciones
1.___________________

Interprete

2.___________________ 3.___________________

En caso de que se encuentre un error en una de las instrucciones, el programa no pasa a la siguiente instruccin y por tanto no genera el cdigo mquina. Ventajas de compilar frente a interpretar: Se compila una vez, se ejecuta n veces. En bucles, la compilacin genera cdigo equivalente al bucle, pero interpretndolo se traduce tantas veces una lnea como veces se repite el bucle. El compilador tiene una visin global del programa, por lo que la informacin de mensajes de error es mas detallada. Ventajas del intrprete frente al compilador: Un intrprete necesita menos memoria que un compilador. En principio eran ms abundantes dado que los ordenadores tenan poca memoria. Permiten una mayor interactividad con el cdigo en tiempo de desarrollo. Un compilador no es un programa que funciona de manera aislada, sino que necesita de otros programas para conseguir su objetivo: obtener un programa ejecutable a
4

partir de un programa fuente en un lenguaje de alto nivel. Algunos de esos programas son el preprocesador, el linker, el depurador y el ensamblador. El preprocesador se ocupa (dependiendo del lenguaje) de incluir ficheros, expandir macros, eliminar comentarios, y otras tareas similares. El linker se encarga de construir el fichero ejecutable aadiendo al fichero objeto generado por el compilador las cabeceras necesarias y las funciones de librera utilizadas por el programa fuente. El depurador permite, si el compilador ha generado adecuadamente el programa objeto, seguir paso a paso la ejecucin de un programa. Finalmente, muchos compiladores, en vez de generar cdigo objeto, generan un programa en lenguaje ensamblador que debe despus convertirse en un ejecutable mediante un programa ensamblador.

1.2. Partes en las que trabaja un compilador


Conceptualmente un compilador opera en fases. Cada una de las cuales transforma el programa fuente de una representacin en otra. En la figura se muestra una descomposicin tpica de un compilador. En la prctica se pueden agrupar fases y las representaciones intermedias entres las fases agrupadas no necesitan ser construidas explcitamente.
Programa Fuente

Programa Objeto en Lenguaje Ensamblador

Cdigo Mquina Relocalizable

Cdigo Mquina Absoluto

1.2.1 Fases del Compilador


Fases del Compilador
Anlisis Sntesis

- Anlisis Lxico - Anlisis Sintctico - Anlisis Semntico

Generacin de Cdigo

1.2.1.1 Fase de Anlisis


Anlisis Lxico Anlisis Sintctico Anlisis Semntico Descrito en la fase de sntesis

1.2.1.2 Fase de Sntesis


En esta fase se representan tres etapas que son:

Generacin de cdigo intermedio Optimizacin de cdigo Generacin de cdigo absoluto En esta fase se genera el programa objeto a partir de la representacin intermedia. Las dos actividades, la administracin de la tabla se smbolos y el manejo de errores, se muestran en interaccin con las seis fases de anlisis lxico, anlisis sintctico, anlisis semntico, generacin de cdigo intermedio, optimacin de cdigo y generacin de cdigo. De modo informal, tambin se llamarn "fases" al administrador de la tabla de smbolos y al manejador de errores.

1.2.1.3 Anlisis Lxico


Las principales funciones del anlisis lxicos son: 1. Leer el programa fuente como un archivo de caracteres y dividirlo en unidades lgicas denominada componentes lxicos o tokens 2. Eliminar comentarios o espacios en blanco como tabulaciones y fin de lneas 3. Reportar errores si existen Si el analizador lxico no puede continuar por que ninguno de los patrones concuerda con un prefijo de entrada puede recuperarse el error as: 1. Borrando el carcter extrao 2. Reemplazando un carcter incorrecto por uno correcto 3. Intercambiando los caracteres adyacentes
7

4. Borrando caracteres sucesivos de la entrada hasta encontrar un componente bien formado.

En la fase de anlisis lxico se revisa o se examina el programa fuente como una cadena de izquierda a derecha y se generan los componentes lxicos o token a partir de una secuencia de caracteres que tenga un significado vlido. S encuentra algo que no este de acuerdo con la estructura del lenguaje se toma como un error. Ejemplo: A1= CONT1 + D*150 programa fuente, Ingresa al anlisis lxico. D, 150, CONT1, son componentes, y cada componente es un token. LEXEMA A1 = CONT1 + D * 150 TIPO VARIABLE OPERADOR DE ASIGNACION VARIABLE OPERADOR SUMA VARIABLE OPERADOR PRODUCTO CONSTANTE

Alfabeto: Conjunto finito de caracteres o smbolos, este debe tener unas reglas asociadas, cada componente lxico debe estar contenido en este. Un ejemplo de una regla asociada podra ser que se comience siempre es mayscula, que no se empiece con nmeros. Una regla seria por ejemplo que no comience por nmero, entonces si tengo 12D, me producira un error lxico puesto que la regla que se declaro es que no comience por nmero. No interesa su significacin grupal. Se analiza elemento por elemento, en forma individual.
8

A) Se busca si est en el alfabeto B) Se busca una regla asociada a l Las palabras reservadas deben estar en un alfabeto. Por ejemplo: for, while, if, etc., por que puede tomarse como una variable. Las fases de anlisis sintctico y semntico por lo general manejan una gran proporcin de los errores detectables por el compilador. La fase lxica puede detectar errores donde los caracteres restantes de la entrada no forman ningn componente lxico del lenguaje. Los errores donde la cadena de componentes lxicos no cumplen con las reglas de estructura (sintaxis) del lenguaje son determinados por la fase del anlisis sintctico.

1.2.1.4 Anlisis Sintctico


La fase de Anlisis Sintctico recibe todos los componentes lxicos reconocidos en la etapa anterior y los agrupa en forma jerrquica a travs de una gramtica independiente del contexto (define si esta bien escrito). Aqu se utiliza el rbol de anlisis sintctico.

rboles de anlisis sintcticos: sirven para hacer un seguimiento de esa estructura. Siempre debe tener dos hijos. I) Si la palabra est mal escrita: Lxico II) Si la oracin est mal escrita: Sintaxis

1.2.1.4 Anlisis Semntico


Durante la fase de Anlisis Semntico el compilador intenta detectar construcciones que tengan la estructura sintctica correcta, pero que no tengan significado para la operacin implicada, por ejemplo, si se intenta sumar dos identificadores. Uno de los cuales es el nombre de una matriz, y el otro, el nombre de un procedimiento. Revisa si las variables estn o no declaradas, y que las operaciones realizadas se hagan correctamente de acuerdo al tipo de datos vlido para esta. Semntica: Hablamos de datos. significado, concordancia de

Dinmica: Tiempo de ejecucin Esttica: verificacin y declaracin de tipos. La declaracin de datos.

=
A

+
CONT1

*
150

D Ejemplo N1:
10

Declarar un dato de tipo entero y colocar uno de tipo real. Entonces Produce error. Ejemplo N2: Float b; b = 32.625 Int a = 100; A = a + 32.625 Error, por que se esta asignando un valor muy grande del que a puede soportar. No hay concordancia de datos. Atributos Gramtica de atributos: decir para cada atributo su valor agregado y tipo.

1.2.2.1 Generacin Intermedio

De

Cdigo

Se toma el programa y se crea un cdigo intermedio que generalmente lo traen todos los compiladores. Se manejan algoritmos de tres direcciones.

11

Ejemplo: A1= CONT1+D*150 T1=150 T2=D*T1 T3=CONT1+T2 A1=T3

1.2.2.2 Optimizacin De Cdigo


Omitir algunas instrucciones que son redundantes (Eliminar redundancias). Ejemplo: A1=CONT1+D*150 T1=D*150 A1=CONT1+T1

1.2.2.3 Generacin En Cdigo Absoluto


Generar o pasar a cdigo Assembler Move D,R1 Mult 150,R1 Move CONT1,R2 Add R1,R2 Move R2,A1

12

13

Das könnte Ihnen auch gefallen