Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Las actuales computadoras son capaces de realizar los más complejos cálculos
aritméticos, lógicos y simbólicos, de emular los más elaborados mecanismos
(incluyendo a otros computadores), de simular eventos naturales y de crear
mundos virtuales. Las crecientes capacidades con que se presentan generación
tras generación acercan a los nuevos computadores cada vez más a la realización
de tareas mucho más complejas y que se antojan imposibles, como pueden ser la
emulación de la mente y el pensamiento.
1
1. La aplicación y utilización de los conocimientos,
técnicas y herramientas usadas en el diseño de
compiladores y lenguajes de cómputo.
El tema del diseño de compiladores y lenguajes en la ciencia de la computación es
usualmente visto como uno de los más complejos, áridos y abstractos.
Adicionalmente suele considerarse que estos temas no dejan de ser de un interés
meramente académico, a menos que se trate de una enorme compañía de
software dedicada a la creación de herramientas de desarrollo. Tales creencias
han dado lugar a una enorme variedad de mitos, algunos de estos por ejemplo
son:
2
Aunque al final de esta sección expondremos por qué las aseveraciones
anteriores deben ser consideradas como falsas o imprecisas, dejaremos que
primero el lector aprecie por sí mismo las implicaciones del conocimiento que está
por recibir. Esperamos que el material aquí expuesto le permita obtener una mejor
apreciación tanto sobre la teoría de compiladores y lenguajes como de su
didáctica y utilización.
Existe una gran variedad de lenguajes de programación. Cada uno retrata una
corriente en la conceptualización de datos, información y procesos. Para cada uno
de estos lenguajes existen una o diversas implementaciones, así como
herramientas de desarrollo adicionales.
Algunos de estos productos son freeware, otros son shareware y algunos otros
más son productos de marca. Los dos primeros resultan, respectivamente, gratis y
baratos mientras que los últimos son un recurso caro, tanto que inclusive puede
superar el costo de muchos otros recursos, como puede ser el del hardware.
Sea cual fuere el tipo de herramienta que usemos para desarrollar bajo un
determinado lenguaje de programación, tendremos dos tipos de costos a
considerar como resultado de nuestra decisión. El costo directo de estos
productos, que incluye:
3
Adicionalmente, pero definitivamente influenciado por la adquisición de un
software de desarrollo, tenemos costos indirectos:
4
mercadotécnico para centrar la atención del comprador en ciertos elementos del
producto.
5
Lenguaje Modelo Características
Sintaxis específica para tipos de datos. Ideal para el
desarrollo de programas veloces o de tamaño reducido.
C, C++, Fortran,
Compilado Permiten la explotación de instrucciones especiales del
COBOL, Pascal
microprocesador. Mayor seguridad para evitar
alteración o robo de código fuente.
Transportabilidad absoluta. Requiere de una máquina
virtual para ser ejecutado. Mejor desempeño que un
Java Pseudocompilado
programa interpretado pero más lento que uno
compilado. Lenguajes de sintaxis rigurosa.
Requiere del intérprete para su ejecución. Desempeño
lento. Ideal para desarrollos rápidos (prototipos),
AWK, Basic,
Interpretado operaciones no planeadas y programas pequeños y
SQL, Lisp, Forth
simples. Lenguajes de sintaxis más relajadas y mayor
libertad para la conversión de datos.
6
1.2. La formación académica y de investigación.
Área/Materia Oportunidad
Programación de bajo Lograr un dominio del la programación en lenguaje ensamblador y
nivel lenguaje máquina.
Aplicación de técnicas y conceptos en el desarrollo de un producto
Ingeniería de software
complejo.
Utilización de diversas estructuras de datos en el desarrollo de los
Estructura de datos
componentes del compilador o intérprete.
Aplicación práctica de ténicas formales en el desarrollo de los
Teoría de Autómatas componentes de análisis del compilador o intérprete y en el diseño
de lenguajes para sistemas de cómputo.
Teoría de la
Utilización de técnicas y conocimiento con propósitos analíticos.
Computación
Área/Materia Beneficios
Desarrollo e implementación de lenguajes de programación,
consulta, de definición y de propósito específico. Consideraciones
Lenguajes de
para los principios de desarrollo y construcción de herramientas
Programación
que permitirán su materialización, incluyendo aquellos incrustados
en aplicaciones.
Bases para el desarrollo de herramientas de análisis y
Inteligencia Artificial
procesamiento de lenguaje natural, traducción automatizada.
Arquitectura de Conocimiento más preciso del funcionamiento del computador y
Máquinas los medios o mecanismos necesarios para su programación.
Sistemas Operativos Desarrollo de interfaces de control y usuario final. Desarrollo de
7
intérpretes de comandos.
Diseño de Interfaces Desarrollo de interfaces orientadas a comandos y caracter mejor
Hombre-Máquina diseñadas. Reconocimiento de voz y escritura.
Programación de Panorama más completo sobre las herramientas a utilizar o
Sistemas desarrollar (e.g. analizadores de código y depuradores).
Administración de Selección de herramientas, evaluación de costos y beneficios,
Proyectos Informáticos logistica y coordinación de recursos.
1.3. Revalorización.
8
para muchas empresas grandes y pequeñas. Con todo y esto, y aun cuando el
costo es mayor, muchas organizaciones prefieren adquirir aplicaciones
desarrolladas (inclusive por compañías extranjeras y aunque están diseñadas para
realizar el trabajo bajo un marco económico, organizacional y legal muy diferente a
las regulaciones y formas de trabajar en nuestro país).
9
1.4. Requisitos.
Requisito Justificación
El domino de la programación de bajo nivel, ya sea en lenguaje
Programación en máquina o ensamblador, es algo que no puede evitarse. La
lenguaje ensamblador materialización del compilador depende de esto. Podemos decir
que una tercera parte del proyecto depende de esto.
Se requiere un uso intensivo y extensivo de diversas estructuras
Estructura de datos de datos para construir los diversos elementos de análisis y
síntesis del compilador.
Junto con las estructuras de datos, el conocimiento formal
proporcionado en la teoría de autómatas, lenguajes, y
Teoría de autómatas, computación forman una tercera parte de lo que se requiere para
lenguajes y computación la materialización de un intérprete o compilador. Este
conocimiento también es requerido para la especificación y
diseño de un lenguaje de programación.
Lenguajes de
La última tercera parte del conocimiento básico solicitado reside
Programación y
en el conocimiento y habilidad de programación y en el
programación usando un
conocimiento de cómo esto se puedo lograr usando diversos
lenguaje de nivel
paradigmas e implementaciones.
intermedio o alto
Por supuesto, dada la necesidad de conocer la programación en
Arquitectura de
ensamblador, un conocimiento de la arquitectura y
computadoras
funcionamiento de un computador es necesario.
Sistemas operativos y Conocer como es que la computadora administra sus recursos y
programación de como puede lograrse interactuar con dicha administración es
sistemas. algo requerido.
10
2. Lenguajes en computación e informática.
Aunque a lo largo de este primer capítulo hemos hecho referencia a los lenguajes
de programación esto no quiere decir que el conocimiento, técnicas y
herramientas que se discuten a lo largo de este curso sean para el exclusivo
manejo y procesamiento de éstos. Los lenguajes de programación son únicamente
una de las distintas clases formadas por los diversos tipos de lenguajes
disponibles en el ámbito de la informática y computación. Sin importar su
propósito, todo lo que aquí se mencione puede ser aplicado para el
reconocimiento y procesamiento de cualquiera de estos lenguajes.
Tipo de
Descripción
Lenguaje
En esta categoría quedan englobados todos aquellos metalenguajes,
formalismos y especificaciones usados para la descripción de otros
lenguajes, así como hardware y software. Comunmente este tipo de
lenguajes no son usados directamente en la computadora, aunque en
algunos casos existe una correlación directa o cercana a la forma
Lenguajes de como ciertos dispositivos electrónicos son programados. Por lo
especificación. general este tipo de especificaciones se utilizan como un estándar o
formalismo para la descripción de otros lenguajes, técnicas de
diagramación o simbolismos que son usados con un computador o
dispositivo programable. Sin embargo, dada su estructura y
regularidad, es perfectamente factible su uso directo en el
computador.
A esta categoría pertenecen todos aquellos lenguajes que son usados
para el despliegue de datos en pantalla o medios impresos (razón por
la que muchas veces son llamados lenguajes gráficos) a través de
software o hardware especializado. La mejor forma de ejemplificar
esta descripción es mediante la enumeración de algunos de los
Lenguajes de
lenguajes que perteneces a ésta:
presentación y
formato de datos. PCL. Printer Control Language. El lenguaje de descripción de
páginas para las impresoras HP LaserJet y se ha vuelto un
standard de facto entre dispositivos similares. PCL Level 5,
introducido en 1990 con la LaserJet III dio soporte a las fuentes
escalables Intellifont de Compugraphic. En 1996, con la LaserJet 5,
PCL Level 6 redujo la cantidad de información que debe ser
11
enviada a la impresora en comandos y gráficos.
HTML. Hyper Text Markup Language. Lenguaje para la
especificación de como una página web debe ser mostrada por un
navegador así como la información que algunos de los elementos
desplegados deben contener para permitir su enlace con otras
páginas.
PostScript. Un lenguaje descriptivo de páginas (PDL, Page
Description Language) desarrollado por Adobe y que se ha vuelto el
estándar de facto en el mercado de impresión y composición
gráfica. Los comandos PostScript no controlan directamente a la
impresora, estos son instrucciones ASCII que son traducidas a los
comandos internos de la impresora por un intérprete interconstruido
en ésta, incluyendo el escalamiento de fuentes tipográficas.
PostScript Level 2 mantiene compatibilidad con el PostScript
original e incorpora compresión de datos y mejoras para el manejo
del color. PostScript Level 3 agregó muchas otras mejoras como
fuentes nativas y la habilidad de soporte directo a HTML, PDF, GIF
y JPEG. EPS (Encapsulated PostScript) es un subcanjunto de
PostScript usado para el intercambio de imágenes gráficas simples
en el formato PostScript.
12
Tanto los lenguajes de especificación, de presentación y de definición requieren
del mismo procesamiento que cualquier otro para su reconocimiento, aunque
éstos no requieren generalmente de una etapa de generación de código o de
interpretación como los de programación o de propósito especial. Siendo estos
dos tipos los de mayor interés para nosotros por la etapa de ejecución requerida
por parte del computador nos centraremos ahora en la identificación de las
diversas clasificaciones y modelos de programación entorno a éstos.
Mientras que el recablear al computador establecía una clara distinción entre los
datos (representados por los estados o señales eléctricas que serían mantenidas
por los relevadores o a través de los bulbos que conformaban al computador) y el
programa (las conexiones que serían establecidas entre estos componentes del
hardware) la labor de "programación" requería sino del propio creador del
computador si a un verdadero experto y conocedor de electrónica, principios de
13
lógica digital y del problema mismo. Esto vino a cambiar con el concepto del
programa almacenado, un concepto teórico muy importante que fue establecido
por el matemático John von Neumann el 30 de junio de 1945 en un borrador sobre
el diseño de la EDVAC (Electronic Discrete Variable Automatic Computer). A
diferencia de los primeros computadores, von Neumann proponía que tanto el
programa como sus datos fueran almacenados en la memoria del computador.
Esto no solo simplificaba la labor de programación al no tener que llevar a cabo el
recableado del computador sino que además libraba y generalizaba el diseño del
hardware para hacerlo independiente de cualquier problema y enfocado al control
y ejecución del programa. Este concepto fue tan importante y decisivo que dio
lugar al concepto de la arquitectura de von Neumann, aún presente en nuestros
días.
14
Añ Lengua
Descripción
o je
En lugar de programar usando claves numéricas se usaba una serie de
instrucciones sencillas llamadas códigos mnemónicos. Los primeros
desarrollos son en la EDSAC. El siguiente ejemplo está pensado para
funcionar bajo MVS JCL, éste imprimirá el mensaje "Hello, World!!!" a
donde quiera que esté designada la salida en la tarjeta SYSPRINT DD.
*
* ESCRIBE "HELLO, WORLD!" A DONDE SEA QUE HAYA SIDO
APUNTADA SYSPRINT
* EN EL LANZADOR JCL
*
HELLOPRT START 0 INICIO
PRINT NOGEN RESERVA LAS MACRO
EXPANSIONES
BEGIN SAVE (14,12) GUARDA LOS REGISTROS DE
ENTRADA
LR 12,15 LOCALIZA....
USING HELLOPRT,12 ...DONDE ESTAMOS
ST 13,SAVE+4 GUARDA EL AREA ACTUAL
Primeros DE DIRECCIONES
1949 LA 11,SAVE APUNTA A UNA NUEVA AREA
ensamblado
- DE DIRECCIONES
res ST 11,8(13) EN EL AREA ANTERIOR
1950
simbólicos LR 13,11 MUEVE EL AREA DE
DIRECCIONES GUARDADA
*
*
DOPUT EQU *
PUT SYSPRINT,HELLOMSG ESCRIBE EL MENSAJE
B DOPUT EN UN CICLO SIN FIN
*
* CODIGO NECESARIO PARA REGRESAR EL CONTROL AL MVS
*
L 13,SAVE+4 OBTIENE AREA DE
DIRECCIONES GUARDADA
RETURN (14,12),RC=0 TO THE OPERATING SYSTEM
*
* DEFINICIONES PARA AREA DE TRABAJO Y ARCHIVOS
*
SAVE DS 18F PARA GUARDAR AREA LOCAL
HELLOMSG DC C'Hello, world!!!'
SYSPRINT
DCB DSORG=PS,MACRF=PM,DDNAME=SYSPRINT,RECFM=FA,LRECL=13
3,BLKSIZE=133
Short
Desarrollado por John Mauchly, se considera el primer lenguaje de alto
1950 Order
nivel.
Code
Betty Holberton crea un generador de ordenación y unión (sort-merge)
1951
de datos, y que es considerado como un predecesor de los modernos
15
compiladores.
1951
- A-0 Primer compilador.
1952
Desarrollado por John Backus. Su nombre resulta de la contracción del
inglés formula translation. La primer especificación se escribió en 1954
pero fue hasta 1957 que se entregó el primer compilador funcional a la
Westinghouse, para un computador IBM 704. Aunque originalmente
incluía elementos de un lenguaje ensamblador, éste permitía a los
programadores escribir expresiones algebraicas en lugar de la
codificación necesaria para el cálculo. Revisiones al lenguaje y mejora
son publicadas en 1958 (Fortran II), 1961 (Fortran IV), 1972 (Fortran
1954 66).
- Fortran
1957 C
C Versión Fortran
C
Program Hello
implicit none
logical DONE
DO while (.NOT. DONE)
write(*,10)
END DO
10 format('Hello, world!!!')
END
Contracción de list processing. Desarrollado por John McCarthy
aparece como un lenguaje en el que todo cálculo es expresado como la
aplicación de una función sobre uno o más elementos. Los elementos en
sí pueden ser funciones también. Pensado para aplicaciones de
inteligencia Artificial.
1959 Lisp
;
; Versión Lisp
;
(DEFUN HELLO-WORLD ()
(PRINT (LIST 'Hello, 'world!!!)))
En 1959 se crea The Committee on Data Systems Languages (Codasyl)
para crear el Common Oriented Business Oriented Language. Pensado
para aplicaciones de negocio y administrativas.
16
001100 FILE SECTION.
001200
100000 PROCEDURE DIVISION.
100100
100200 MAIN-LOGIC SECTION.
100300 BEGIN.
100400 DISPLAY " " LINE 1 POSITION 1 ERASE EOS.
100500 DISPLAY "Hello, world!!!" LINE 15 POSITION 1O.
100600 STOP RUN.
100700 MAIN-LOGIC/EXIT.
100800 EXIT.
El primer lenguaje en incorporar las ideas de las estructuras de control y
bloques de instrucciones fue el Algorithmic Language, mejor conocido
como Algol. Revisiones posteriores incorporaron mejoras en 1968
(Algol 68).
;
; Versión Algol 60
;
1960 Algol 60 BEGIN
FILE F (KIND=REMOTE);
EBCDIC ARRAY E [0:11];
REPLACE E BY "Hello, world!!!";
WHILE TRUE DO
BEGIN
WRITE (F, *, E);
  END;
END.
Kenneth E. Iverson, de IBM, publica su libro A Programming
Language. IBM entrega el primer intérprete en 1968.
1962 APL
Versión APL
'Hello, world!!!'
John Kemeny y Thomas Kurtz desarrollan en el Dartmouth College el
lenguaje cuyo nombre es derivado de las siglas de Beginner's All-
purpose Symbolic Instruction Code.
1964 BASIC 10 REM
20 REM Versión BASIC
30 REM
40 print "Hello, world!!!"
50 goto 40
Programming Language One, o PL/I, es como se conoció al lenguaje
desarrollado por IBM como parte del desarrollo del System 360. La
meta era el desarrollo de un lenguaje que sirviera tanto para usos
científicos como financieros, usando estructuras de control. Así PL/I fue
1965 PL/I una combinación de Fortran, COBOL y Algol.
/* Versión PL/1 */
17
Hello: procedure options(main);
Simula Begin
while 1 = 1 do begin
outtext ("Hello, world!!!");
outimage;
end;
End;
Macsyma fue el primer sistema de algebra por computadora interactivo,
desarrollado en conjunto por el M.I.T y el U.S. Department for
Advanced Research Projects Agency. En 1982 el M.I.T licenció el
sistema a Symbolics, Inc., un constructor de estaciones de trabajo
basadas en Lisp. En 1992, Macsyma, Inc., adquiere los derechos sobre
el software Macsyma de Symbolics, Inc. Actualmente la empresa se
encuentra en bacarrota. Macsyma incluye un lenguaje de
1968 Macsyma
programaci&oaacute;n propio derivado de Lisp.
/*
Versión Macsyma
*/
hello():=(
print ( "Hello, world!!!")
)$
Lenguaje extensible de alto nivel que combina características de
lenguajes compilados e interpretados. Sus primeros usos fueron para
control de radiotelescopios y otros equipos astronómicos. Su nombre
originalmente fue Fourth (por FOURTH-generation computer
1970 Forth
language, algo ambicioso a decir verdad), pero desafortunadamente la
computadora IBM 1130 en la que se desarrolló sólo aceptaba
identificadores de cinco letras.
18
;
;Versión Forth
;
: hello
begin
true
while
." Hello World "
repeat
hello
Niklaus Wirth, del Federal Institute of Technology, Zürich; Suiza; inicia
el desarrollo de Pascal (nombrado así en honor del filósofo y
matemático Blaise Pascal). El primer compilador estaá disponible al
público en 1974 y es utilizado por muchas universidades desde
entonces. Wirth había venido desarrollando al lenguaje desde 1968,
pensado como una herramienta eduacional para la enseñanza sistémica
de la programación de computadoras bajo estructuras de control y
1971 Pascal declarativas claras y simples.
(* Versión Pascal *)
Begin
writeln('Hello, world!!!');
End
Descendiente de B (creado por Kenneth Thompson), el cual fue
derivado de otro lenguaje denominado BCPL (Basic Combined
Programming Language, creado por Martin Richards), fue desarrollado
por Dennis Ritchie, en aquel entonces programador de sistemas en
AT&T Bell Laboratories. Considerado como un lenguage de alto nivel
posee muchas características de bajo nivel como el manejar direcciones
de memoria y bits, por tal motivo se le suele denominar de tipo
intermedio híbrido.
/*
C Versión C
1972 */
#include <stdio.h>
main()
{
for (;;)
{
printf ("Hello, world!!!\n");
}
}
Tomando de base las ideas de Alan Kay, Smalltalk es desarrollado por
Smalltalk
el Learning Research Group de los laboratorios PARC de Xerox.
19
COMMENT
"
Versión Smalltalk
"!
%
% Versión Prolog
%
hello :-
printstring ("Hello, world!!!");
printstring ([])
printstring ([H|T]) :- put (H), printstring (T).
Lucid es un lenguaje de programación para arquitecturas Dataflow,
diseñado para experimentar con modelos de programación no von
1976 Neumann. En Lucid el programador define filtros o funciones de
- Lucid transformación que actuan en flujos de datos variables en el tiempo.
1977 Lucid soporta un conjunto de tipos de datos muy reducido: enteros,
reales y símbolos. Diversas extesiones de Lucid han sido creadas,
inlcuso una basada en formas llamada Plane Lucid.
Desarrollado por Alfred V. Aho, Brian W. Kernighan y Peter J.
Weinberger, su nombre deriva de las iniciales de sus creadores. AWK
es un lenguaje orientado a la manipulación de textos, especialmente
tomados de archivos. Su flexibilidad y potencia en la manipulación de
cadenas de caracteres le permiten ser aplicado en una enorme variedad
1977
de problemas, por lo que a pesar de lo específico de su origen es
- AWK considerado de propósito general.
1978
#
# Versión AWK
#
20
aplicación en la Apple II, el producto fue vendido a Lotus Development
Corporation conduciendo al desarrollos de la hoja Lotus 1-2-3 para PC
en 1983. Mucho más importante que una simple aplicación es el hecho
de haber creado todo un nueno modelos de manejo de datos y
programación.
Después de un largo periodo de desarrollo el lenguaje DoD-1 es
rebautizado en honor de Augusta Ada King, Condesa de Lovelace, hija
del poeta Lord Byron y primera programadora en la historia al trabajar
como asistente de Charles Babbage en el desarrollo de su Máquina
Analítica. Es el resultado de un proyecto de estandarización del
Departamento de Defensa de los USA iniciado por la gran diversidad de
equipo y lenguajes de programación con que el DoD contaban en
edificios y equipo. Se necesitaba un lenguaje único que pudiera ser
usado en todos los computadores (incluyendo sistemas empotrados en
equipo móvil) que incorporara características de abstracción de datos,
multitarea, concurrencia y manejo de excepciones. Las versiones más
Ada
difundidas con Ada 83 y Ada 95.
--
-- Versión Ada
--
with Text_Io;
use Text_Io;
procedure Hello is
begin
put ("Hello, world!!!");
end Hello;
Maple es un paquete para procesamiento de matemáticas simbólicas y
numéricas. Cuenta con su propio lenguaje de programación, conocido
con el mismo nombre. Aunque muchas cosas pueden hacerse en este
lenguaje, por su naturaleza, se trata de un lenguaje de propósito
especial.
Maple
#
#Versión Maple
#
1980 do
print ('Hello, world!!!');
od:
Es un lenguaje procedural, de estructura orientada a bloques pensado
tanto para propósitos educativos como aplicativos. Diseñado por
Niklaus Wirth, corregía deficiencias estructurales de Pascal, lo mismo
Modula-2 que proveía mejoras como una fuerte verificación de tipos, arreglos
dinámicos y concurrencia.
(*
21
Versión Modula-2
*)
MODULE PrintHelloWorld;
BEGIN
WriteString('Hello world!');
WriteLn;
END PrintHelloWorld.
Dialecto de Lisp usado como extensión de programación para un
popular paquete de diseño de la compaña Autodesk. En adición de las
tradicionales características de Lisp, ofrece facilidades para la
manipulación de objetos CAD, archivos y para la interacción con el
usuario a través de la interfaz AutoCAD.
1982 AutoCad
;;
;;Versión AutoLisp
;;
(Defun c:HelloWorld ()
(alert ("\nHello, world!!!\n"))
)
Bjarne Stroustrup, en AT&T Bell Laboratories, desarrolla una extensión
orientada a objetos de C a la que denomina C++.
//
// Versión C++
//
1983 C++
#include <iostream.h>
int main()
{
cout <<"Hello, world!!!" << '\n';
return 0;
}
Con el paso del tiempo los diversos lenguajes de programación han madurado.
Hoy en día es posible categorizarlos por las características que han venido
exhibiendo con dicha maduración. De manera que tenemos:
22
2GL o lenguajes de segunda generación.- Todos aquellos lenguajes
ensambladores.
La integración de los diversos módulos que conforman al programa.
La resolución de las direcciones de memoria designadas en el área de
datos para el almacenamiento de variables, constantes y estructuras
complejas; así como la determinación del tamaño de éstas.
La identificación de las direcciones de memoria en la sección de código
correspondientes a los puntos de entrada en saltos condicionales e
incondicionales junto con los puntos de arranque de las subrutinas.
La resolución de los diversos llamados a los servicios o rutinas del sistema
operativo, código dinámico y bibliotecas de tiempo de ejecución.
La especificación de la cantidad de memoria destinadas para las áreas de
datos, código, pila y montículo necesarias y otorgadas para su ejecución.
La incorporación de datos y código necesarios para la carga del programa y
su ejecución.
Los precompiladores son una solución rápida y barata a la necesidad de llevar las
instrucciones de nuevos paradigmas de programación (e.g. los lenguajes de
cuarta generación), extensiones a lenguajes ya existentes (como el caso de C y
C++) y soluciones de nivel conceptual superior (por ejemplo paquetes de
simulación o cálculo numérico) a código máquina utilizando la tecnología
existente, probada, optimizada y confiable (lo que evita el desarrollo de nuevos
compiladores). Facilitan la incorporación de las nuevas herramientas de desarrollo
en sistemas ya elaborados (por ejemplo, la consulta a bases de datos relacionales
substituyendo las instrucciones de acceso a archivos por consultas en SQL).
25
Los intérpretes son útiles para el desarrollo de prototipos y pequeños programas
para labores no previstas. Presentan la facilidad de probar el código casi de
manera inmediata, sin tener que recurrir a la declaración previa de secciones de
datos o código, y poder hallar errores de programación rápidamente. Resultan
inadecuados para el desarrollo de complejos o grandes sistemas de información
por ser más lentos en su ejecución.
26
La entrada a este proceso es por supuesto el programa fuente. Por lo general éste
es un archivo que es creado por el usuario como un texto ASCII con o sin un
formato específico aunque también puede ser el resultado de algún otro proceso.
A partir de este archivo diversos pasos pueden ser llevados a cabo:
28
Figura 3.- Etapas del proceso de pseudo-compilación.
La siguiente figura ilustra con mayor detalle lo que pasa en cada una de las etapas
del proceso de compilación. El procesamiento de instrucciones de un lenguaje
huesped (como puede ser SQL) correría a cargo del pre-procesador, siendo
transformadas instrucciones del lenguaje anfitrión. Durante la fase de análisis
léxico el scanner se encarga de identificar cada uno de los elementos usados para
escribir el programa fuente, substituyendo a cada uno de estos por un código
numérico único (tokens). En este proceso se eliminan comentarios y espacios en
blanco. Los tokens son alimentados al analizador sintáctico que valida que su
disposición está acorde a las reglas del lenguaje. Validado este el analizador
semántico procede a identificar el propósito de las diversas secuencias de tokens
y buscará generar representaciones intermedias de cada acción o directamente
código máquina. Este posteriormente es optimizado.
29
Figura 4.- Detalle del flujo de datos y acciones en el proceso de compilación.
1
Análisis: Dado un sistema, identificar los elementos constituyentes, las interrelaciones
entre & eeacute;stos, y determinar la conducta creada.
2
Síntesis: Dado un conjunto de elementos y estableciendo un determinado número de
interrelaciones entre éstos, crear uno de muchos posibles sistemas con una determinada
conducta.
3
El "descompilar" un programa sólo es posible si se cuenta con información de
depuración, generada por el compilador. Mientras que es posible "desensamblar" un
programa, sin información adicional que permita asociar secuencias de instrucciones
ensamblador a instrucciones de nivel alto, es imposible reconstruir el programa fuente a
partir del código ejecutable.
30