Vous êtes sur la page 1sur 10

Clase#3: Iintroduccin, conceptos, caractersticas y componentes de los compiladores.

UNIVERSIDAD GERARDO BARRIOS


COMPILADORES E INTRPRETES
CICLO I 2015
DOCENTE: ING. MARVIN OSMARO PARADA
CLASE # 03
INTRODUCION, CONCEPTOS, CARACTERISTICAS Y COMPONENTES DE LOS COMPILAD

OBJETIVOS

Realizar un recordatorio sobre la clasificacin de lenguajes de programacin.


Conocer los conceptos generales de compiladores, intrpretes, traductores.
Comprender las fases de un compilador.
Distinguir los diferentes tipos de traductores.
Realizar ejemplos sencillos de compilacin en lenguaje C++.
CLASIFICACION DE LOS LENGUAJES DE PROGRAMACION

La programacin de computadoras se realiza en los

llamados

lenguajes

de

programacin,

stos

posibilitan la comunicacin entre el programador y la computadora, a travs de un conjunto de


instrucciones u rdenes especificadas por el lenguaje.
Un lenguaje de programacin puede definirse como: Notacin formal para describir algoritmos o

funciones que sern ejecutados por una computadora, o bien, un lenguaje para comunicar
instrucciones al computador.
Diferentes puntos de vista para clasificar los lenguajes de programacin:
1. Su grado de independencia con la mquina.
2. La forma de sus instrucciones y la forma de procesar el cdigo fuente.
3. Por generaciones.
Los lenguajes de programacin segn su grado de independencia de la mquina:
a) Lenguaje mquina (representacin binaria o hexadecimal.).
b) Lenguaje ensamblador o de bajo nivel (versin simblica de un lenguaje mquina).
c) Lenguaje de medio nivel (lenguaje C).
d) Lenguaje de alto nivel (FORTRAN, COBOL, Pascal).

Clase#3: Iintroduccin, conceptos, caractersticas y componentes de los compiladores.


Aunque todos los lenguajes de programacin tienen un conjunto de instrucciones que permiten realizar
dichas operaciones, existe una marcada diferencia en los smbolos, caracteres y sintaxis de los
lenguajes de mquina, lenguajes ensambladores y lenguajes de alto nivel.
a) Lenguaje de mquina.
El lenguaje de mquina de una computadora consta de cadenas de nmeros binarios (ceros y unos) y es
el nico que "entienden" directamente los procesadores. Todas las instrucciones preparadas en cualquier
lenguaje de mquina tienen por lo menos dos partes. La primera es el comando u operacin, que dice a
la computadora cul es la funcin que va a realizar. Todas las computadoras tienen un cdigo de
operacin para cada una de sus funciones. La segunda parte de la instruccin es el operando, que
indica a la computadora donde hallar o almacenar los datos y otras instrucciones que se van a
manipular; el nmero de operando de una instruccin vara en las distintas computadoras.

b) Lenguaje ensamblador
La comunicacin en lenguaje de mquina es particular de cada procesador que se usa, y programar
en este lenguaje es muy difcil y tedioso, por lo que se empez a buscar mejores medios de
comunicacin con sta.

A fin de facilitar la labor de los programadores en el pasado, se desarrollaron cdigos mnemotcnicos


para las operaciones y direcciones simblicas. Uno de los primeros pasos para mejorar el proceso de
preparacin de programas fue sustituir los cdigos de operacin numricos del lenguaje de mquina
por smbolos alfabticos, que conforman un lenguaje mnemotcnico.
Todas las computadoras actuales tienen cdigos mnemotcnicos aunque, naturalmente, los smbolos
que se usan varan en las diferentes marcas y modelos. La computadora sigue utilizando el lenguaje
de mquina para procesar los datos, pero los programas ensambladores traducen antes los smbolos
de cdigo de operacin especificados a sus equivalentes en lenguaje de mquina.
Los lenguajes ensambladores tienen ventajas sobre los lenguajes de mquina. Ahorran tiempo y
requieren menos atencin a detalles. Se incurren en menos errores y los que se cometen son ms
fciles de localizar. Adems, los programas en lenguaje ensamblador son ms fciles de modificar que
los programas en lenguaje de mquina. Pero existen limitaciones. La codificacin en lenguaje
ensamblador es todava un proceso lento. Adems, una desventaja importante de estos lenguajes es
que tienen una orientacin a la mquina. Es decir, estn diseados para la marca y modelo
especfico de procesador que se utiliza.
En el principio de la computacin este era el lenguaje que tena que "hablar" el ser humano con la
computadora y consista en insertar en un tablero miles de conexiones y alambres y encender y

Clase#3: Iintroduccin, conceptos, caractersticas y componentes de los compiladores.


apagar interruptores. Aunque en la actualidad ya no se emplea, es importante reconocer que ya no
es necesario que nos comuniquemos en este lenguaje de "unos" y "ceros", pero es el que
internamente una computadora reconoce o "habla".
c) Lenguajes de alto nivel
Los primeros programas ensambladores producan slo una instruccin en lenguaje de mquina por
cada instruccin del programa fuente. Para agilizar la codificacin, se desarrollaron programas
ensambladores que podan producir una cantidad variable de instrucciones en lenguaje de mquina
por cada instruccin del programa fuente. Dicho de otra manera, una sola macroinstruccin poda
producir varias lneas de cdigo en lenguaje de mquina.

A diferencia de los programas de ensamble, los programas en lenguaje de alto nivel se pueden utilizar
con diferentes marcas de computadoras sin tener que hacer modificaciones considerables. Esto
permite reducir sustancialmente el costo de la reprogramacin cuando se adquiere equipo nuevo.
Los lenguajes de programacin segn su forma de instrucciones
Lenguajes imperativos o procedimentales: lenguajes orientados a instrucciones (Pascal, C. C++,
Ada, FORTRAN).
Lenguajes declarativos, funcionales o aplicativos: sus construcciones se basan en llamadas

funciones matemticas, utilizados a menudo en Inteligencia Artificial ( LISP, ML. APL, Haskell ). o
Lgicos: manejan relaciones entre objetos. Las relaciones se especifican con reglas

hechos. La ejecucin de programas lgicos, consiste en la demostracin de hechos sobre las


relaciones por medio de preguntas. (PROLOG es el ms utilizado de este tipo).
Lenguajes orientados a objetos: si soportan tipos de datos abstractos y clases.
o

(C++, Smalltalk, Java, Prolog++). Los lenguajes de programacin por generaciones son
aquellos nombrados como: 1., 2., 3. 4. generacin y aquellos identificados como
generacin visual y generacin internet.

Los lenguajes de programacin segn su forma de procesar el cdigo fuente

Traductores (translators).

Compiladores (compilers).

Ensambladores (assemblers).

Interpretes (interpreters).

Editores (editors).

Traductor: Un traductor es un programa que procesa un texto fuente destino.

Clase#3: Iintroduccin, conceptos, caractersticas y componentes de los compiladores.


Compiladores: Un traductor que transforma textos fuente de lenguajes de alto nivel a lenguajes
de bajo nivel se le denomina compilador.
o

El tiempo que se necesita para traducir un lenguaje de alto nivel a lenguaje objeto se
denomina tiempo de compilacin.

El tiempo que tarda en ejecutarse un programa objeto se denomina tiempo de


ejecucin.

Intrpretes: Los intrpretes son programas que simplemente ejecutan las instrucciones que
encuentran en el texto fuente. En muchos casos coexisten en memoria el programa fuente y el
programa intrprete.
Un ejemplo de lenguaje interpretado es BASIC en sus primeras versiones. La ejecucin de un
programa compilado es mucho ms rpida que la de un programa interpretado. Sin embargo los
intrpretes son ms interactivos y facilitan la puesta a punto de programas.
ARQUITECTURA DE LA COMPUTADORA

En la disciplina de los procesadores de lenguajes, los compiladores son los ms utilizados por los
programadores para el desarrollo de aplicaciones. En el caso particular del desarrollo de compiladores,
hay que tener bien definida la arquitectura de la computadora.
Cmo se pueden ejecutar las aplicaciones desarrolladas para otras arquitecturas de
computadoras en la nueva arquitectura?
El problema planteado anteriormente no slo es aplicable a la construccin de nuevas arquitecturas,
sino tambin cuando es necesaria la compatibilidad de aplicaciones entre diferentes sistemas operativos
y arquitecturas de computadoras.
Algunas de las tcnicas utilizadas para realizar migraciones de aplicaciones entre distintas arquitecturas
y sistemas operativos se muestran en la siguiente figura:

Clase#3: Iintroduccin, conceptos, caractersticas y componentes de los compiladores.


Un intrprete software o emulador de software es un programa en cdigo binario que lee una a una
las instrucciones binarias de la arquitectura antigua de las computadoras, que se encuentran en un
fichero ejecutable, y las interpreta. Los intrpretes no son muy rpidos, pero pueden construir y adaptar
a distintas arquitecturas sin excesivos costos de desarrollo.
Algunos ejemplos de intrpretes software binario son:
Emuladores de DOS para distintos sistemas operativos (SoftPC de Insignia Solutions).
Intrpretes de la mquinaabstracta JVM (Java Virtual Machine) para distintas plataformas y ue
permiten ejecutar los cdigos binarios denominados bytecode (ficheros con la extensin .class).
Un emulador hardware trabaja de forma similar a un intrprete de software, pero est implementado en
HW de forma que decodifica las instrucciones de la arquitectura antigua y las traduce a la nueva
arquitectura. Un ejemplo de emulador de hardware son los microprocesadores Java, que emulan la
mquina abstracta JVM (Java Virtual Machine).
Un traductor entre

cdigos binarios o ensambladores son conjuntos de instrucciones de la nueva

arquitectura que reproducen el comportamiento de un programa en la arquitectura antigua (la


informacin

de

la mquina

de estos traductores son los

antigua se almacena en registros de la nueva mquina). Un ejemplo

desarrollados por DEC (Digital Equipment Corporation) para traducir

instrucciones de la arquitectura VAX y MIPS a la nueva arquitctura ALPHA.


Un compilador nativo es aqul que toma un programa fuente antiguo y lo vuelve a compilar (recompilar)
con compiladores desarrollados para la nueva arquitectura. Son los ms rpidos y ptimos con
respecto a las dems tcnicas, pues produce la mejor calidad del cdigo objeto.
GRAMATICAS DE LOS LENGUAJES DE PROGRAMACION

Reglas para escribir las sentencias del lenguaje.


Conjunto de smbolos que definen la estructura de procesamiento de un lenguaje.

Clase#3: Iintroduccin, conceptos, caractersticas y componentes de los compiladores.

Ejemplo de estructura gramatical de un lenguaje:

FASES DE LOS COMPILADORES

Analizando en detalle el proceso de compilacin, se divide en dos grandes fases, una de Anlisis y
la otra de Sntesis.

Fase de Anlisis:

Clase#3: Iintroduccin, conceptos, caractersticas y componentes de los compiladores.


En el llamado anlisis lexicogrfico o lxico, el compilador revisa y controla que las "palabras"
estn bien escritas y pertenezcan a algn tipo de token (cadena) definido dentro del lenguaje,
como por ejemplo que sea algn tipo de palabra reservada, o si es el nombre de una variable
que este escrita de acuerdo a las pautas de definicin del lenguaje. En esta etapa se crea la
tabla de smbolos, la cual contiene las variables y el tipo de dato al que pertenece, las constantes
literales, el nombre de funciones y los argumentos que reciben etc.
En el anlisis sintctico como su nombre lo indica se encarga de revisar que los tokens estn
ubicados y agrupados de acuerdo a la definicin del lenguaje. Dicho de otra manera, que los
tokens pertenezcan a frases gramaticales validas, que el compilador utiliza para sintetizar la
salida. Por lo general las frases gramaticales son representadas por estructuras jerrquicas,
por medio de rboles de anlisis sintctico. En esta etapa se completa la tabla de smbolos
con la dimensin de los identificadores y los atributos necesarios etc.
El anlisis semntico se encarga de revisar que cada agrupacin o conjunto de token tenga
sentido, y no sea un absurdo. En esta etapa se rene la informacin sobre los tipos para la
fase posterior, en esta etapa se utiliza la estructura jerrquica de la etapa anterior y as poder
determinar los operadores, y operandos de expresiones y preposiciones.
Fase de Sntesis:
Etapa de generacin de cdigo intermedio, aunque algunos compiladores no la tienen, es
bueno saber de su existencia, en esta etapa se lleva el cdigo del programa fuente a un
cdigo interno para poder trabajar ms fcilmente sobre l. Esta representacin interna debe
tener dos propiedades, primero debe ser fcil de representar y segundo debe ser fcil de
traducir al cdigo objeto.
En la etapa de optimizacin de cdigo, se busca obtener el cdigo ms corto y rpido
posible, utilizando distintos algoritmos de optimizacin.
Etapa de generacin de cdigo, se lleva el cdigo intermedio final a cdigo maquina o
cdigo objeto, que por lo general consiste en un cdigo maquina re localizable o cdigo
ensamblador. Se selecciona las posiciones de memoria para los datos (variables) y se traduce
cada una de las instrucciones intermedias a una secuencia de instrucciones de maquina puro.
La tabla de smbolos no es una etapa del proceso de compilacin, sino que una tarea, una
funcin que debe realizar el proceso de compilacin. En ella se almacenan los identificadores
que aparecen en el cdigo fuente puro, como as tambin los atributos de los mismos, su

Clase#3: Iintroduccin, conceptos, caractersticas y componentes de los compiladores.


tipo, su mbito y en el caso de los procedimientos el nmero de argumentos el tipo del mismo
etc. En otras palabras una tabla de smbolos es una estructura de datos, que contiene un
registro por cada identificador, y sus atributos. La tabla de smbolo es accedida tanto para
escritura como parar lectura por todas las etapas. Detector de errores o manejador de
errores, al igual que la tabla de smbolos no es una etapa del proceso de compilacin, sino
que es una funcin, muy importante, pues al ocurrir un error esta funcin debe tratar de alguna
forma el error para as seguir con el proceso de compilacin (la mayora de errores son
detectados en las etapas de anlisis lxico, anlisis sintctico, anlisis semntico).

EJEMPLO EXPLICATIVO SOBRE LAS ETAPAS DE UN COMPILADOR.


Qu es lo que hacen los componentes de un compilador en sus Fases cuando tiene que analizar la
siguiente expresin?
suma

var1

var2

10 ;

Anlisis Lxico
El analizador lxico lee los caracteres del programa fuente, y verifica que correspondan a una
secuencia lgica (identificador, palabra reservada etc.). Esta secuencia de caracteres recibe el
nombre componente lxico o lexema. En este caso el analizador lxico verifica si el identificador id1
(nombre interno para "suma") encontrado se halla en la tabla de smbolos, si no est produce un
error porque todava no fue declarado, si la preposicin hubiese sido la declaracin del identificador
"suma" en lenguajes C, C++ (int suma;) el analizador lxico agregara un identificador en la tabla de
smbolos, y as sucesivamente con todos los componentes lxicos que aparezcan.
id1= id2+ id3 + 10
Anlisis Sintctico
El analizador sintctico impone una estructura jerrquica a la cadena de componentes lxicos,
generada por el analizador lxico, que es representada en forma de un rbol sintctico.

Clase#3: Iintroduccin, conceptos, caractersticas y componentes de los compiladores.

Anlisis Semntico
El analizador semntico verificara en este caso que cada operador tenga los operandos permitidos.

Generador de cdigo intermedio


Esta etapa se lleva la preposicin a una representacin intermedia como un programa para una
maquina abstracta.

temp1= tipo_ent(10)
temp2= id3 * temp1
temp3= id2 + tem2
id1= temp3
Optimizacin de cdigo
El cdigo intermedio obtenido es representado de una forma ms ptima y eficiente.

temp1= id3 * 10.0


id1= id2 + temp1

Clase#3: Iintroduccin, conceptos, caractersticas y componentes de los compiladores.


Generador de cdigo
Finalmente lleva el cdigo intermedio a un cdigo objeto que en este caso es un cdigo re localizable
o cdigo ensamblador (tambin llamado cdigo no enlazado).

MOVF id3, R2
MULT #10.0, R2
MOVF id2, R1
ADDF R2, R1
MOVF R1, id1
Este el cdigo objeto obtenido que es enviado al mdulo de ensamblado.
ACTIVIDADES EN EL AULA

1. Cules son los conceptos asociados a compiladores?


2. Cul es la clasificacin de los lenguajes de programacin de menor a mayor?
3. Cules son los componentes de un compilador?
4. Analizar cmo se implementan los componentes de un compilador?
5. Cules es la diferencia entre un compilador y un intrprete, explica?
6. Elabore un esquema que permita comprender las fases del proceso de compilacin y las
etapas.
7. Realizar un mapa mental sobre los conceptos generales, clasificacin, etapas y fases de los
traductores, compiladores e intrpretes
Porcentaje Asignado del laboratorio 1 computo 1: 40%
GLOSARIO

PROGRAMACIN DE SISTEMAS: Conjunto de reglas para crear soluciones a problemas


computables. Conjunto de herramientas que nos permiten crear software de base que son de utilidad
para interactuar con la mquina.
SOFTWARE DE BASE: Compilador, Querys, Sistema Operativo, Cargador.
AUTMATA: Son las cadenas posibles que aceptan un lenguaje.
EXPRESIONES REGULARES: Conjunto de smbolos que aceptan una palabra reservada.
GRAMTICA: Reglas para escribir las sentencias del lenguaje.
LENGUAJE DE PROGRAMACIN: Es la notacin formal para la descripcin de algoritmos, basada en
un conjunto de instrucciones en alto nivel, que finalmente pasarn a bajo nivel para interactuar con el
hardware y generar herramientas de trabajo.

10

Vous aimerez peut-être aussi