Se denomina programa fuente, al cdigo simblico escrito por el programador, cuyas sentencias
responden o respetan las reglas gramaticales de un determinado lenguaje. Cada lenguaje define
su alfabeto y la estructura de sus frases o sentencias.
Sin embargo, estos lenguajes son facilidades creadas para el programador. Las computadoras
no los pueden ejecutar directamente. Para ello, se disearon programas especficos que leen
dichos programas, determinan si cada una de sus sentencias responde a las reglas del lenguaje
que representan y las traducen.
Se llama programa objeto, al resultado de dicha traduccin y que podr ser ejecutado en una
computadora.
Bsicamente, existen dos grandes formas de traducir programas fuentes para su posterior
ejecucin: programas compilados (previamente pasados por un compilador) y programas
interpretados no necesitan pasar por un compilador para ejecutarse. Su ejecucin se implementa
mediante la intervencin de un intrprete.
Se trata de traductores-ejecutores ya que con cada instruccin realizan un proceso triple de
lectura-traduccin-ejecucin.
Comparando su actuacin con la de un ser humano, un compilador equivale a un traductor
profesional que, a partir de un texto, prepara otro independiente traducido a otra lengua,
mientras que un intrprete corresponde al intrprete humano, que traduce de viva voz las
palabras que oye, sin dejar constancia por escrito.
Perspectiva histrica:
En los 50 los compiladores eran considerados programas muy difciles de construir
Ejemplo: Fortran evolucion durante 18 aos de trabajo en grupo.
Hoy en da se han desarrollado tcnicas sistemticas, entornos de programacin y
herramientas de software que facilitan la tarea de desarrollo de compiladores,
intrpretes y traductores.
Caractersticas de un compilador
Desde el punto de vista de la plataforma donde actuar, un compilador se divide en dos partes:
* Front End: analiza el cdigo fuente, comprueba su validez, genera el rbol de derivacin y
rellena los valores de la tabla de smbolos. Parte que suele ser independiente de la plataforma o
sistema operativo para el que funcionar.
* Back End: parte en donde se genera el cdigo mquina exclusivo para una plataforma a partir
de lo analizado en el front end.
Por lo general el resultado del back end no puede ser ejecutado directamente, se necesita pasar
por un proceso de enlazado (linker).
Cualquier lenguaje puede ser ejecutado tanto va intrprete o va compilador, pero algunos
lenguajes suelen asociarse ms a una va que a la otra, y por esto son llamados "lenguajes
interpretados" o "lenguajes compilados" respectivamente.
La principal ventaja del proceso de compilacin frente al de interpretacin es que los programas
se ejecutan mucho ms rpidamente una vez compilados; por el contrario, es ms cmodo
desarrollar un programa mediante un intrprete que mediante un compilador puesto que en el
intrprete las fases de edicin y ejecucin estn ms integradas. La depuracin de los
programas suele ser ms fcil en los intrpretes que en los compiladores puesto que el cdigo
fuente est presente durante la ejecucin. Estas ventajas pueden incorporarse al compilador
mediante la utilizacin de entornos de desarrollo y depuradores simblicos en tiempo de
ejecucin.
Compilador Interprete
Detalle errores Mayor Menor
Tiempos de ejecucin para Menor Mayor
el mismo fuente
Compilacin/Traduccin Una traduccin Una traduccin
Muchas ejecuciones Una ejecucin
Construccin Generalmente son de
construccin mas facil
Memoria Necesitan menos memoria Necesitan mas memoria.
Debe ejecutarse y al mismo
tiempo interpretar
Definicin de Decompilador
Programa que intenta recrear el cdigo fuente en un lenguaje de alto nivel, a partir de un
programa ya compilado. Es un mtodo empleado en la ingeniera inversa de software.
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: generan cdigo para un sistema distinto del que estn funcionando.
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.
Compiladores de varias pasadas: necesitan leer el cdigo fuente varias veces antes de poder
producir el cdigo mquina.
FASES
Analizador Lxico (scanner)
Realiza un anlisis lineal del archivo. La cadena de entrada se lee de izquierda a derecha y se va
agrupando en componentes lxicos (TOKENS), que son secuencias de caracteres con un significado
colectivo. Son las unidades bsicas del compilador
Por ejemplo: nmeros, identificadores (variables, constantes, tipos, nombres de funciones...), palabras
reservadas, signos de final de instruccin. Cada componente es asociada a la categora que pertenece.
Desecha comentarios /*
sentence
verb-phrase
Anlisis sintctico
Chequea si las palabras
pertenecen a la gramtica
noun-phrase noun-phrase
http://www.willydev.net/descargas/prev/Compila.pdf
Ejemplo de implementacin de un rbol sintctico, que acepta o rechaza
estructuras o frases expresadas en determinado lenguaje.
Autmatas de pila
Un autmata de pila es una mquina ideal que trabaja sobre una serie de
caracteres de entrada determinando si dicha serie pertenece o no al lenguaje
propio de dicho autmata. Los autmatas vienen a ser mecanismos formales
que ``realizan'' derivaciones en gramticas formales. La manera en que las
realizan es mediante la nocin de reconocimiento. Una palabra ser generada
en una gramtica si y slo si la palabra hace transitar al autmata
correspondiente a sus condiciones terminales. Por esto es que los autmatas
son analizadores lxicos (llamados en ingls parsers'') de las gramticas a que
corresponden.
Vamos a utilizar este autmata para reconocer las hileras con parntesis
Nomenclatura
Con F indicamos un carcter que aparece como nico contenido de la pila al
comenzar la operacin (en ese momento es el tope de la pila)
Con X indicamos un carcter cualquiera en el tope de la pila (inclusive F)
Con indicamos que se elimina el tope de la pila
Con n indicamos que se terminaron de leer todos los caracteres de la hilera
Obsrvese que en esta expresin hay dos parntesis que abren y slo uno que
cierra.
El autmata apila los dos parntesis que abren como en el caso anterior, y
elimina uno de estos parntesis al encontrar el parntesis que cierra. Pero
cuando se termina la hilera (condicin n en la hilera), no hay una condicin F
en la pila, sino ( en la pila). Por lo tanto no puede pasar al estado final y en
consecuencia rechaza la hilera.
De esta forma vemos que el autmata de pila slo acepta hileras en las que los
parntesis vienen balanceados, que es nuestro propsito al utilizarlo.
Obsrvese que sin contar con la pila es imposible que el autmata se acuerde
de cuntos parntesis se abrieron para ir controlando que se cierren en la
misma cantidad.
Vw
Definicin formal
As como cualquier gramtica formal, una gramtica libre de contexto puede ser
definida mediante la 4-tupla:
G = (Vt,Vn,P,S) donde
Ejemplo 1
S aSb |
Aqu hay una gramtica libre de contexto para expresiones enteras algebraicas
sintcticamente correctas sobre las variables x, y y z:
S x | y | z | S + S | S - S | S *S | S/S | (S)
Ejemplo 3
Una gramtica libre de contexto para un lenguaje consistente en todas las cadenas que
se pueden formar con las letras a y b, habiendo un nmero diferente de una que de otra,
sera:
SU|V
U TaU | TaT
V TbV | TbT
T aTbT | bTaT |
T genera todas las cadenas con la misma cantidad de letras a que b, U genera todas las
cadenas con ms letras a, y V todas las cadenas con ms letras b.
Ejemplo 4
S aSc | B
B bBc |
DEFINICION PALABRAS CLAVES
Anlisis lexicografito (scanner)
Anlisis semntica
Anlisis sintctico (parser)
rbol sintctico
Compilador
Interprete
Lenguaje
Macroensamblador
Optimizacin de cdigo
Tabla de smbolos
Tcnica del bottom-up para compiladores
Tcnica del top-down para compiladores
Token
Multiple Choice:
Puede haber ninguna o varias respuestas correctas.
1. Programa Fuente
a. Programa ejecutable por un computador
b. Conjunto de instrucciones u rdenes a habilidades elementales del
computador
c. Conjunto de rdenes o instrucciones escritas en un lenguaje determinado
d. Programa escrito por un programador
e. Ninguna de las anteriores
2. Compilador
a. Programa escrito en lenguaje de maquina
b. Programa que permite traducir sentencias del mismo programa
c. Hardware que incrementa la velocidad de procesamiento de las
instrucciones de maquina
d. Traductor de un programa en lenguaje de maquina a su equivalente
programa fuente
e. Programa que traduce un conjunto de programas escritos en diferentes
lenguajes para obtener un nico programa objeto
3. Intrprete
a. Cantor que interviene en una determinada pelcula
b. Programa que tiene la misma funcionalidad que un compilador
c. Ejecuta un programa de usuario ms velozmente que un compilador para
el mismo programa
d. Ninguna de las anteriores
4. Lenguaje
a. Conjuntos de palabras vinculadas lgicamente
b. Conjunto de reglas gramaticales definidas sobre un determinado alfabeto
c. Conjunto de frases que se hablan en un determinado pas o regin
d. Conjunto de instrucciones fuentes
e. Todas las anteriores
5. Decompilador
a. Aplicacin de ingeniera reversa al proceso de compilacin
b. Programa que toma sentencias objeto y obtiene sus equivalentes
sentencias fuente
c. Proceso que toma los errores generados en una compilacin indicando las
sentencias fuentes que lo generaron
6. Lenguaje con el que se codifica un compilador
a. Solo se puede codificar con instrucciones en lenguaje de maquina
b. Solo se puede codificar en lenguajes especficos que generan
compiladores.
c. Puede utilizarse el mismo lenguaje que genera el compilador construido
d. Puede construirse en cualquier lenguaje de programacin.
7. rbol sintctico
a. Es generado por el analizador lexicogrfico
b. Es generado por el analizador sintctico
c. Hay un rbol para el programa total y otro para los errores
d. Hay un rbol por cada sentencia objeto
e. Hay un rbol por cada sentencia fuente
f. Ninguna de las anteriores