SlideShare ist ein Scribd-Unternehmen logo
1 von 25
UNIVERSIDAD AUTÓNOMA DE TAMAULIPAS
FACULTAD DE INGENIERÍA “ARTURO NARRO SILLER”
  INGENIERÍA EN SISTEMAS COMPUTACIONALES




       NOMBRE DE LA ASIGNATURA



             COMPILADORES




            INVESTIGACIÓN

                UNIDAD 5

        ALGUNOS COMPILADORES




       TITULAR DE LA ASIGNATURA




  M.S.I. ARMANDO BECERRA DEL ANGEL



          NOMBRE DEL ALUMNO




        NAHUM VERA HERNANDEZ




                                           17 de noviembre de 2009
INDICE

UNIDAD 5.   ALGUNOS COMPILADORES

5.1.- COMPILADOR PARA PASCAL                                 3
   • Características únicas
  • Implementaciones

5.2.- COMPILADORES PARA C                                    6
   • Características
   • Elementos y terminología en C

5.3.- LOS COMPILADORES DE FORTRAN                            9
  •   Principales características
      Tipos de datos soportados:
  •   Control de secuencia
  •   Subprogramas
  •   Abstracción y encapsulación. Evaluación del lenguaje
  •   Ventajas e inconvenientes de su sintaxis

5.4.- COMPILADOR OPTIMIZADOR DE MODULA-2                     14
   • Descripción
  •   Dialectos
  •   Elementos de lengua      Palabras reservadas
  •   Idiomas relacionadas
  •   MODULA-GM
  •   Recopiladores continuados


5.5.- COMPILADORES PARA BASIC
   • Los ocho principios que rigeron el diseño de BASIC      17
   • Madurez
   • El Lenguaje Sintaxis
  • Procedimientos y Control de Flujo
  • Tipos de Datos
  • Disponibilidad y variantes del lenguaje

BIBLIOGRFIA




                                                                  2
UNIDAD 5.      ALGUNOS COMPILADORES

5.1.- COMPILADOR PARA PASCAL

Pascal fue creado inicialmente por Niklaus Wirth como un lenguaje para la enseñanza de la
programación al final de los años 60. Es un descendiente de Algol y a su vez influyó mucho
en otros lenguajes posteriores, como Ada. Destaca por la claridad del código y por
promover «buenos hábitos» de programación.

Pascal alcanzó una gran popularidad cuando la empresa Borland lanzó Turbo Pascal, un
compilador para IBM-PC rápido y barato, que además introducía mejoras importantes al
lenguaje. Su sucesor, también de gran éxito, es Delphi, una herramienta de programación
visual basada en Object Pascal, una versión de Pascal con objetos.

   •   Alice Pascal es un viejo (1985) entorno de programación en Pascal con sintaxis dirigida
       para MS-DOS y Atari ST. También está disponible el código fuente.
   •   Autorun Pascal Builder es un entorno para Windows para crear aplicaciones RAD
       (presentaciones, tutoriales, álbumes multimedia, etc.) con un lenguaje de Script tipo Pascal
       integrado.
   •   DPas es un compilador gratuito para MS-DOS de 32 bits.
   •   Free Pascal es un compilador profesional de 32 y 64 bits compatible con Turbo Pascal 7 y
       con la mayoría de versiones de Delphi. Hay versiones para muchos sistemas, incluyendo
       Linux, Mac OS y Win32. Lazarus es un clon de Delphi basado en Free Pascal. Dev-Pascal
       es un entorno para Windows que usa Free Pascal o GNU Pascal.
   •   GNU Pascal es un compilador de 32/64 bits que funciona en todos los sistemas operativos
       soportados por GNU C, incluyendo Linux, FreBSD, DOS (con DJGPP o EMX), Windows
       (con Cygwin o mingw32) y OS/2 (con EMX). Soporta Pascal estándar, Pascal extendido,
       Turbo Pascal 7.0 y partes de Delphi, Mac Pascal y Pascal-SC.
   •   Kylix Open Edition es un entorno de desarrollo visual para Linux de Borland compatible
       con Delphi. Para hacer la descarga (90,7 Mb) hay que registrarse.
   •   Nemesis Pascal es un intérprete de Pascal escrito Delphi y Kylix y que funciona en
       Windows y Linux.
   •   Pascal Pro produce código ensamblador para DOS32. Requiere TASM/MASM o NASM
       así como TLink32 y WDOSX u otras herramientas para generar los ejecutables. Incluye
       casi todos los elementos de Pascal más algunas mejoras.
   •   Pascal X es un entorno de programación en Pascal para crear aplicaciones de consola de
       Windows. Incluye herramientas de ayuda para programadores noveles. Pueden usarse las
       palabras clave estándar en inglés o traducidas al portugués.
   •   Think Pascal es un compilador para Macintosh, desarrollado por Think Technologies (con
       el nombre de Lightspeed Pascal), empresa posteriormente absorbida por Symantec. En
       1997 dejó de distribuirse pero ahora se puede descargar gratuitamente.
   •   Turbo Pascal 5.5 es un viejo (1989) compilador para MS-DOS de Borland, ahora
       distribuido gratuitamente.
   •   Vector Pascal es una implementación de Pascal en Java pensada para aprovechar los
       juegos de instrucciones SIMD (Single Instruction-stream Multiple Data-stream) de los

                                                                                                 3
modernos microprocesadores, como los de MMX y AMD 3D Now!. Incluye características
       propias de APL y J y extensiones de Turbo Pascal y Pascal 90. Incluye también un entorno
       de desarrollo.
   •   Virtual Pascal es un compilador de 32 bits completamente compatible con Turbo Pascal 7
       y en gran parte con Delphi 2. Funciona en Windows y OS/2. Ya no está en desarrollo.

Características únicas

A diferencia de lenguajes de programación descendientes de C, Pascal utiliza el
símbolo:= para la asignación en vez de =. Si bien el segundo es más conciso, la
práctica ha demostrado que muchos usuarios utilizan el símbolo de igualdad para
comparar valores en lugar del comparador de C que es el símbolo ==. Esta
sintaxis conduce a muchos errores o bugs difíciles de rastrear en código C. Dado
que Pascal no permite asignaciones dentro de expresiones y utiliza sintaxis
distinta para asignaciones y comparaciones, no sufre estos errores.

Además sus programas tienen definidas dos partes: declarativa y ejecutiva. En la
primera debe aparecer todo lo que se usará en la segunda, de lo contrario se
detecta como desconocido y evita ciertas incomprensiones como veremos más
adelante. En la parte declarativa se enuncian Unit existentes, procedimientos,
funciones, variables, constantes y nuevos tipos de datos estructurados.

Otra diferencia importante es que en Pascal, el tipo de una variable se fija en su
definición; la asignación a variables de valores de tipo incompatible no están
autorizadas (En C, en cambio, el compilador hace el mejor esfuerzo para dar una
interpretación a casi todo tipo de asignaciones). Esto previene errores comunes
donde variables son usadas incorrectamente porque el tipo es desconocido; y
también evita la necesidad de notación húngara, que vienen a ser prefijos que se
añaden a los nombres de las variables y que indican su tipo.

Implementaciones

Las primeras versiones del compilador de Pascal, entre ellas la más distribuida fue
UCSD Pascal, traducían el lenguaje en código para una máquina virtual llamada
máquina-P. La gran ventaja de este enfoque es que para tener un compilador de
Pascal en una nueva arquitectura de máquina solo hacía falta reimplementar la
máquina-P. Como consecuencia de esto, solo una pequeña parte del interprete
tenía que ser reescrita hacia muchas arquitecturas.

En los años 1980, Anders Hejlsberg escribió el compilador Blue Label Pascal para
la Nascom-2. Más tarde fue a trabajar para Borland y reescribió su compilador que
se convirtió en Turbo Pascal para la IBM PC. Este nuevo compilador se vendió por
$49, un precio orientado a la distribución masiva.

El económico compilador de Borland tuvo una larga influencia en la comunidad de
Pascal que comenzó a utilizar principalmente en el IBM PC. En busca de un
                                                                                             4
lenguaje estructurado muchos aficionados al PC reemplazaron el BASIC por este
producto. Dado que Turbo Pascal, solo estaba disponible para una arquitectura,
traducía directamente hacia el código máquina del Intel 8088, logrando construir
programas que se ejecutaban mucho más rápidamente que los producidos en los
esquemas interpretados.

Durante los años 1990, estuvo disponible la tecnología para construir
compiladores que pudieran producir código para diferentes arquitecturas de
hardware. Esto permitió que los compiladores de Pascal tradujeran directamente
al código de la arquitectura en que corrieran.

Con Turbo Pascal versión 5.5, Borland, agregó programación orientada a objetos
a Pascal.

Sin embargo, Borland después decidió mejorar esa extensión del lenguaje
introduciendo su producto Delphi, diseñado a partir de estándar Object Pascal
propuesto por Apple como base. Borland también lo llamó Object Pascal en las
primeras versiones, pero cambio el nombre a lenguaje de programación Delphi en
sus últimas versiones

Ejemplo de código usando la estructura lineal:

 program raiz(input, output);
 uses crt;
 (*
    Obtener la raíz cuadrada de un número real x cualquiera.
 *)

 var x, y: real;
 respuesta: string;

 begin
   writeln('** Calcular la raíz cuadrada de x **');
   writeln('Entrar x (> 0): ');
   readln(x);
   y := sqrt(abs(x)); (* Raíz cuadrada del valor absoluto de x para
evitar raíces imaginarias *)
   writeln;
   if (x<0) then (* Si x es negativo, el resultado se notifica como
imaginario *)
       writeln('La raíz cuadrada de ', x, ' es el número imaginario ',
y,'i');
   else
       writeln('La raíz cuadrada de ', x, ' es ', y);
   writeln;
   writeln('** Fin **');
   readln; (* Espera a que el usuario pulse enter para salir del programa
*)
 end.



                                                                              5
5.2.- COMPILADORES PARA C

C fue creado en los Bell Telephone Laboratories al principio de los 70, por Dennis
M. Ritchie. Su nacimiento estuvo ligado al del sistema operativo Unix, que se
desarrolló paralelamente. Sus características debían ser: eficiencia (o sea, rapidez
en la ejecución de los programas), potencia (permite explotar a fondo las
posibilidades de la máquina) y portabilidad (el mismo código puede compilarse en
máquinas diferentes). Unix fue reescrito en C, lo cual supuso un gran éxito de este
lenguaje, a partir del cual se convirtió en uno de los más extendidos. La historia
del nacimiento de C, contada por Dennis M. Ritchie, puede leerse en http://cm.bell-
labs.com/cm/cs/who/dmr/chist.html.

A C se le ha criticado que los programas suelen ser poco legibles y propensos a
errores. Por contra, casi nadie le discute su potencia y su gran implantación, que a
menudo lo convierten en la elección inevitable para proyectos colectivos.

A partir de 1979, Bjarne Stroustrup, de AT&T, empezó a trabajar en un
descendiente de C con soporte para orientación a objetos y otras mejoras, que
sería conocido como C++ (la primera versión, interna de AT&T, data de 1983).

   •   ACC es un compilador de un subconjunto de C que genera código ensamblador
       en modo protegido para MS-DOS. El paquete también incluye el ensamblador
       A86.
   •   Tanto el compilador como el depurador de la versión 5.5 de Borland C++Builder
       son distribuidos gratuitamente por Borland.
   •   Ch es un superconjunto de C, interpretado y fácil de usar. Hay una versión
       estándar gratuita para todos los usos, y una profesional, sólo gratuita para uso
       académico. Está disponible para varios sistemas, incluyendo Windows, Linux y
       MacOS X.
   •   Cilk es un lenguaje para programación paralela multihilo basado en ANSI C. Se
       distribuye sólo el código fuente y se ha instalado en varios sistemas POSIX
       incluyendo Linux y MacOS X (no les vayas a preguntar si se puede instalar en
       Windows NT, que parece que no les gusta).
   •   CINT es un intérprete de C y C++ que cubre el 95% de ANSI C y el 85% de C++.
       Funciona en muchas plataformas, incluyendo Windows, MS-DOS, Linux y MacOS.
       Se distribuye el código fuente y un ejecutable para Windows.
   •   Cyclone es un lenguaje basado en C diseñado para ser seguro. Funciona en
       Linux y Windows con Cygwin. Sólo se distribuye el código fuente.
   •   Digital Mars distribuye en un solo paquete compiladores de C y C++ para DOS16,
       DOS32, Win16 y Win32.
   •   eC es un subconjunto de C++, diseñado para servir como herramienta para
       aprender este lenguaje. Está especialmente pensado para que sea fácil la
       transición desde Pascal. Se distribuyen en un solo paquete compiladores e
       intérpretes para DOS y Windows (y muchos ejemplos).


                                                                                     6
•   EiC es un C interpretado que puede usarse de forma interactiva. Hay versiones
    para varios sistemas Unix, Win32 y DOS con DJGPP. También se distribuye el
    código fuente.
•   GCC (GNU Compiler Collection) es un paquete GNU que incluye compiladores
    de C, C++ y otros lenguajes. Los compiladores de C (gcc, con minúsculas) y C++
    (g++) van incluidos en todas las distribuciones de Linux, y sirven como lenguajes
    de programación para la mayor parte del trabajo desarrollado en GNU/Linux,
    incluyendo el kernel de Linux. Hay también adaptaciones para DOS (DJGPP) y
    Win32 (Cygwin y MinGW). Dev-C++ es un entorno de desarrollo que puede usarse
    con cualquier versión de GCC para Windows (incluye MinGW).
•   LadSoft (David Lindauer) distribuye cc386 (código fuente y ejecutable), un
    compilador de ANSI C para Windows y MSDOS con DPMI, y CC68K, un cross-
    compiler para Windows de código ejecutable de Motorola 68K (incluye también un
    simulador que puede ejecutar el resultado).
•   lcc, por Chris Fraser y David Hanson, es un compilador de ANSI C. Se distribuye
    el código fuente, así como archivos binarios para Windows. lcc está descrito en el
    libro A Retargetable C Compiler: Design and Implementation.
•   LCC-Win32 es un compilador de C ampliamente documentado, desarrollado por
    Jacob Navia a partir del documento A portable C compiler, de Dave Hanson y
    Chris Fraser (supongo que es una versión antigua del libro citado anteriormente).
    Es gratuito para uso no comercial.
•   Leonardo es un entorno integrado para Macintosh (con PowerPC) basado en
    ANSI C, incluyendo también el lenguaje de visualización ALPHA (que se inserta
    dentro del código fuente en comentarios especiales). Está indicado para el
    aprendizaje de C, la depuración de programas y la programación de «algoritmos
    animados». Permite la ejecución hacia atrás (!). Este proyecto ha sido abandonado
    en favor de Leonardo Computing Environment (a continuación).
•   Leonardo Computing Environment es el sucesor de Leonardo y tiene
    características similares. Está siendo desarrollado en Windows, Linux y MacOS.
•   Macintosh Programmer's Workshop es un conjunto de herramientas para
    programación de Macintosh. Incluye compiladores de C y C++ para micros 68k y
    Power PC para sistemas 7.x, 8.x y 9.x.
•   Open Watcom C/C++ es el sucesor de código abierto de una famosa versión
    comercial de C y C++. Se distribuyen gratuitamente (aunque se solicitan
    donaciones) el código fuente y paquetes instalables para Windows y OS/2.
    También se distribuye la versión 11.0c de Watcom.
•   Pacific C es un compilador gratuito para MS-DOS, distribuido anteriormente como
    shareware por HI-TECH. Incluye un entorno de desarrollo integrado.
•   Pelles C es un completo kit de desarrollo para Windows y Pocket PC. El
    compilador está basado en lcc.
•   Sphinx C-- es un lenguaje de medio a bajo nivel para ordenadores con
    microprocesadores 80x86, una especie de mezcla entre C y ensamblador. El autor
    original, Peter Cellik, abandonó en 1996 su desarrollo, pero otros programadores
    han continuado su trabajo. Parece que C-- es un lenguaje más general.
•   Small C es un pequeño compilador de C con códigos fuentes para distintas
    plataformas, entre ellas MS-DOS y CP/M.
•   Tiny C es un compilador para Linux muy pequeño y rápido.


                                                                                    7
•   Turbo C es el viejo compilador C de Borland para MS-DOS. Borland distribuye
       ahora gratuitamente algunas versiones. Aquí se encuentra la 2.01.
   •   El Visual C++ Toolkit 2003 de Microsoft incluye todas las herramientas
       necesarias para compilar y enlazar aplicaciones basadas en C++ para Windows
       y .NET Common Language Runtime. Son 32 Mb.

Características

La popularidad del lenguaje C se debe a sus características:

   •   Compacto: sólo tiene 32 palabras reservadas.
   •   Estructurado: se basa en el empleo de funciones, que son bloques de
       código independientes.
   •   Portable: los programas ejecutables obtenidos funcionan en cualquier
       máquina (utilizando las librerías y funciones estándar). El código fuente
       tampoco dependerá del compilador o del sistema operativo utilizado.
   •   Flexible: tiene pocas restricciones.
   •   Lenguaje de tipo medio: dispone de potentes sentencias propias de los
       lenguajes de alto nivel y características de lenguajes de bajo nivel como el
       ensamblador (permite el control de la CPU a nivel de registros, e incluso a
       nivel de bits), con plena disponibilidad de la memoria y puertos conectados
       a la CPU.
   •   Extensión: el C es un lenguaje muy extendido. Los compiladores son
       relativamente sencillos y reducidos, y cuando surge una nueva máquina o
       sistema operativo, es uno de los primeros programas que se diseñan.

Elementos y terminología en C

Esto es solo para introduciros un poco a los elementos que usaremos en nuestros
programas, cada elemento se verá en profundidad en los siguientes capítulos.

Funciones
En C es la unidad básica de programación. Los programas se construyen a base
de funciones que reciben unos valores de entrada y devuelven unos de salida. En
nuestro primer programa hemos visto la función main, que es siempre la primera
que toma el control del programa está en todos los programas.

Variables
Como muchos sabréis, las variables son espacios que guardan un valor que
puede cambiar (variar) a lo largo del programa. Tienen un nombre (etiqueta o
identificador) que identifica a la porción de memoria ocupada por la variable.

Constantes
Como podéis imaginar las constantes, a diferencia de las variables, guardan un
valor que no se puede alterar a lo largo del programa.


                                                                                 8
Identificadores o etiquetas
Los identificadores o etiquetas son los nombres que identifican a las variables,
constantes y funciones. Deben respetar las siguientes condiciones:

   •   Deben empezar con una letra o con la barra baja "_", y pueden construirse
       con letras, números y barras bajas.
   •   IMPORTANTE: el C es sensible a las mayúsculas y minúsculas
       (denominado case sensitive), así que no sería lo mismo Variable que
       variable.
   •   No se pueden usar palabras reservadas como identificadores.
   •   Las funciones creadas por el programador pueden comenzar con
       mayúscula para diferenciarla de las funciones definidas en el compilador.
   •   Las etiquetas o identificadores definidas en el compilador, también llamadas
       constantes simbolicas (como por ejemplo FILE), suelen escribirse en
       mayúscula.

Sentencias
Una sentencia es un conjunto de identificadores, símbolos, etc., escritos en una
línea. En C las sentencias terminan con punto y coma ";". Las sentencias pueden
ir en una línea cada una como es habitual, o varias en una línea, separadas por
punto y coma.

Operadores
Son todos aquellos símbolos para realizar operaciones aritméticas o lógicas: +,
*, /, etc.

Bloques de sentencias
Son conjuntos de sentencias agrupadas entre llaves "{}" que forman una unidad
inseparable y se evalúan como una única sentencia más compleja.

Comentarios
Los comentarios sirven sólo para aclarar aspectos del código fuente y son
ignorados por el compilador. Son de gran importancia, ya que si el código fuente
debe ser modificado después de un tiempo, o si es pasado de un programador a
otro, los comentarios pueden facilitarle mucho la tarea de entenderlo. Los
comentarios van delimitados por las marcas "/*" y "*/", por ejemplo:

/* Esto es un comentario */

Tabulación o identación
Consiste en estructurar mediante tabulaciones el código del programa para facilitar
su lectura. El criterio general de tabulación es tabular más las sentencias
subordinadas a otras (se verá más adelante en los ejemplos).

Directivas del preprocesador
Son sentencias ubicadas al principio del programa y que indican al compilador
                                                                                  9
cómo debe actuar sobre el programa fuente. En el ejemplo de este capítulo hemos
visto la directiva #include. Las directivas del preprocesador no finalizan con punto
y coma.

5.3.- LOS COMPILADORES DE FORTRAN

Fortran (Inglés: Formula Translating System) es un lenguaje características. Está
fuertemente orientado al cálculo y por ende es uno de los de mayor eficiencia en la
ejecución.

Algunas otras versiones subsiguientes fueron:

   •   FORTRAN IV
   •   FORTRAN 80
   •   FORTRAN 77
   •   FORTRAN 90

de programación de alto nivel y procedural, desarrollado para propósitos generales por
IBM en 1957 para el equipo IBM 704. [1] Fue el primero desarrollado con estas FORTRAN
95

Fortran ha sido ampliamente adoptado por la comunidad científica para escribir
aplicaciones de cálculos intensivos. La inclusión en el lenguaje de la aritmética de
números complejos amplió la gama de aplicaciones para las cuales el lenguaje se adapta
especialmente; muchas técnicas de compilación de lenguajes se han implementado para
mejorar la calidad del código generado por los compiladores de Fortran.

Un sencillo ejemplo




Principales características

El lenguaje fue diseñado teniendo en cuenta que los programas serían escritos en tarjetas
perforadas de 80 columnas. Así por ejemplo, las líneas debían ser numeradas y la única
                                                                                       10
alteración posible en el orden de ejecución era producida con la instrucción goto. Estas
características han evolucionado de versión en versión. Las actuales contienen
subprogramas, recursión y una variada gama de estructuras de control.

Tipos de datos soportados:

   •   Numéricos (enteros, reales, complejos y doble precisión).
   •   Booleanos (logical)
   •   Arreglos
   •   Cadenas de caracteres
   •   Archivos

FORTRAN 90 ya es estructurado, y no requiere sentencias GOTO. Sólo admite dos
ámbitos para las variables: local y global.

Ejemplo más extenso:




Variables y constantes

   •   FORTRAN no es sensible a mayúsculas y minúsculas. Los nombre de variables
       tienen de 6 a 31 caracteres máximo y deben comenzar por una letra. Los blancos
       son significativos.
   •   Declaración explicita de variables.
   •   Enteras (I-N), el resto reales. (se modifica con IMPLICIT).

                                                                                     11
•   Punteros: en los primeros FORTRAN no hay punteros y todas las variables se
       almacenan en memoria estática. En FORTRAN 90 se declaran INTEGER,
       POINTER::P.
   •   Para memoria dinámica ALLOCATE y DEALLOCATE


Tipos de datos

   •   Arrays, pueden tener hasta 7 dimensiones y se guardan por colummnas.
            REAL M(20),N(-5:5)
            DIMENSION I(20,20) (tipo por nomenclatura implícita)
   •   Cadenas de caracteres, el primer carácter es el 1, el operador // permite
       concatenar cadenas.
            CHARACTER S*10, T*25
   •   Almacenamiento de datos. Se usa COMMON para datos compartidos y
       EQUIVALENCE cuando almacenamos una variable con dos posibles tipos en la
       misma posición de memoria (como union en C). Se usa DATA para inicializar
       datos estáticos.
            DATA X/1.0/,Y/3.1416/,K/20/
   •   Tipos definidos por el usuario, con TYPE <nombre>... END TYPE <nombre>

Control de secuencia

EL conjunto de estructuras de control es limitado:

   •   Expresiones, prioridad de operadores
   •   Enunciados
           • Asignación, cuando se hace entre cadenas hay ajuste de tamaño con
               blancos o truncamiento.
           • Condicional. Permite IF ELSE IF... Para selección múltiple SELECT CASE
               CASE.....CASE DEFAULT.... END SELECT
           • Iteración. DO....END DO
           • Nulo, se usa solo para la etiqueta. CONTINUE.
   •   Control de subprogramas. CALL invoca al subprograma y RETURN devuelve un
       valor al programa llamante.
   •   Construcciones propensas a error: GOTO.

Entrada y salida

   •   Tipos de archivos:
            Secuenciales
            De acceso directo
   •   Comandos: READ, WRITE, PRINT, OPEN , CLASE, INQUIRE (propiedades o
       estado del archivo) REWIND y ENDFILE (para ubicar el puntero del fichero).
   •   Para el tratamiento de excepciones en las sentencias READ/WRITE se puede
       introducir la posición de la rutina de dicho tratamiento (ERR=90).

Subprogramas

   •   Hay tres tipos de subprogramas:
                                                                                12
  Function, devuelven un solo valor de tipo numérico, lógico o cadena de
              caracteres.
           Subroutine, devuelve valores a través de variables no locales COMMON.
           Función de enunciado, permite calcular una sola expresión aritmética o
              lógica.
                  • FN(X,Y)=SIN(X)**2-COS(Y)**2
   •   Gestión de almacenamiento.
           Las variables son locales o globales (COMMON)
           Recursividad: RECURSIVE FUNCTION FACTORIAL(X)
           Parámetros de subprograma. Paso por referencia.

Abstracción y encapsulación. Evaluación del lenguaje

   •   La abstracción es posible mediante los subprogramas y el uso de variables
       COMMON, aunque su uso es propenso a errores.
   •   FORTRAN sigue siendo utilizado en el ámbito científico y es muy eficiente
       realizando cálculos.
            La estructura del programa suele ser dificil de entender.
            En FORTRAN 90 se incluye la recursividad y la memoria dinámica.
            Las etiquetas de las sentencias ya no son necesarias, ni el GOTO, pues se
               ha transformado en un lenguaje estructurado.
            El aspecto de los programas sigue siendo de procesamiento por lotes




Ventajas e inconvenientes de su sintaxis

Lo que fue la primera tentativa de proyección de un lenguaje de programación de alto
nivel, tiene una sintaxis considerada arcaica por muchos programadores que aprenden
lenguajes más modernos. Es difícil escribir un bucle "for", y errores en la escritura de sólo
un carácter pueden llevar a errores durante el tiempo de ejecución en vez de errores de
compilación, en el caso de que no se usen las construcciones más frecuentes. Algunas de
las versiones anteriores no poseían facilidades que son consideradas como útiles en las
máquinas modernas, como la asignación dinámica de memoria.

Se debe tener en cuenta que la sintaxis de Fortran fue afinada para el uso en trabajos
numéricos y científicos. Muchas de sus deficiencias han sido abordadas en revisiones
recientes del lenguaje. Por ejemplo, Fortran 95 posee comandos mucho más breves para
efectuar operaciones matemáticas con matrices y dispone de tipos. Esto no sólo mejora
mucho la lectura del programa sino que además aporta información útil al compilador.

Por estas razones Fortran no es muy usado fuera de los campos de la informática y el
análisis numérico, pero permanece como el lenguaje a escoger para desempeñar tareas
de computación numérica de alto rendimiento.




                                                                                          13
5.4.- COMPILADOR OPTIMIZADOR DE MODULA-2

Modula-2 es una computadora lenguaje de programación inventado cerca Niklaus
Wirth en ETH alrededor 1978, como sucesor a Modula, una lengua intermedia de
él. Modula-2 fue puesto en ejecución en el an o 80 para Lilith computadora,
comercializada en 1982 por la compañía de lanzamiento DISER (Dato-Imagen-
Sonido-Procesador-y el Emisor-Receptor-Sistema) como MC1 y MC2. DISER
vendió 120 unidades por todo el mundo. La lengua Modula-2 se basa libremente
sobre Lenguaje de programación del Mesa, de Xerox, ese Wirth vio durante su
1976 año sabbatical en Xerox PARC.

Descripción

Modula-2 es fines generales lengua procesal, suficientemente flexible hacer la
programación de sistemas, pero con un uso mucho más amplio. Particularmente,
fue diseñado para apoyar la abstracción separada de la compilación y de los datos
de una manera directa. Mucho del sintaxis se basa en la lengua anterior y mejor-
sabida de Wirth, PASCAL. Modula-2 fue diseñado para ser ampliamente similar al
PASCAL, con algunos elementos quitados y la adición importante del módulo
concepto, y ayuda directa de la lengua para multiprogramación.

El Modula-2 módulo puede ser utilizado encapsulan un sistema de subprogramas
y de estructuras de datos relacionados, y restringen su visibilidad de otras
porciones del programa. El diseño del módulo puso la característica de la
abstracción en ejecución de los datos de Modula-2 de una manera muy limpia. Los
programas Modula-2 se componen de módulos, que se compone de dos
porciones: a módulo de la definición, la porción del interfaz, que contiene
solamente esas partes del subsistema que sean exportado (visible a otros
módulos), y módulo de la puesta en práctica, que contiene el código de trabajo
que es interno al módulo.

La lengua tiene control terminante del alcance. Particularmente el alcance de un
módulo se puede considerar como pared impenetrable: A excepción de
identificadores estándares no hay objeto del mundo externo visible dentro de un
módulo a menos que esté importado explícitamente; no hay objeto interno del
módulo visible del exterior a menos que esté exportado explícitamente.

Dialectos

Hay dos dialectos importantes de Modula-2. El primer es PIM, nombrado después
del libro “que programa en Modula-2” cerca Niklaus Wirth. Había tres ediciones
importantes de PIM, las ediciones del segundo, el tercer (corregido) y el cuarto,
cada las variantes leves que describían de la lengua. El segundo dialecto principal

                                                                                14
es ISO, del esfuerzo de la estandardización por International Organization for
Standardization.

   •   PIM2 (1983)
          o Explícito requerida EXPORTACIÓN cláusula en módulos de la
             definición.
   •   PIM3 (1985)
          o Quitó EXPORTACIÓN cláusula de los módulos de la definición por la
             observación que todo dentro de un módulo de la definición define el
             interfaz a ese módulo, por lo tanto EXPORTACIÓN la cláusula era
             redundante.
   •   PIM4
          o El comportamiento del MOD y REM especificaron a los operadores
             cuando sus operandos eran negativos.
   •   ISO
          o La ISO Modula-2 resolvió la mayor parte de las ambigüedades en
             PIM Modula-2. Agregó los tipos de datos COMPLEJO y
             LONGCOMPLEX, excepciones, terminación del módulo
             (FINALMENTE cláusula) y una biblioteca completa de la entrada-
             salida del estándar. Hay diferencias y clarificaciones de menor
             importancia numerosas.

Elementos de lengua       Palabras reservadas

PIM3 contuvo las 40 palabras reservadas siguientes:

Y     ELSIF      LAZO    REPITA
EL ARSENAL     EXTREMO         MOD     VUELVA
COMIENZAN      SALIDA       MÓDULO FIJE
CERCA       EXPORTACIÓN        NO    ENTONCES
CASO      PARA        DE
A CONST     DE      O     MECANOGRAFÍE
LA DEFINICIÓN SI       INDICADOR HASTA
EL DIV     EL PROCEDIMIENTO VAR DE LA PUESTA EN PRÁCTICA
     IMPORTACIÓN        CALIFICADO MIENTRAS QUE
    EN        EXPEDIENTE CON

Idiomas relacionadas

Aunque Modula-2 es la variante en gran medida el más conocida y más
ampliamente utilizada, hay varias idiomas que se relacionan de un modo u otro: el
la original, y absolutamente diferente, Modula (previsto para la puesta en práctica
de sistemas), Modula-2+, Modula-2* (extensión paralela), ISO Modula-2 OO y
extensiones genéricas, Modula-3 (por la DEC y Olivetti; agregando la colección,
objetos, y generics de la basura), Oberon (diseño otros, más último, de Wirth),
Oberon-2 (Oberon con extensiones de OO), Modula-2 objetivo (un híbrido de
                                                                                15
Modula-2 y Palique) y un número de otros. Éstos no se deben mirar como
“versiones mejores” o “reemplazos” para Modula-2; la mayoría son diversas
idiomas con diversos propósitos, y con fuerzas y debilidades sus el propios.

Modula-2 fue desarrollado como la lengua del sistema para Lilith sitio de trabajo, y
formado el antepasado para Oberon lengua y proyecto del sitio de trabajo
(Sistema Oberon) convertido en ETH Zurich. Muchos lenguajes de programación
actuales han adoptado características de Modula-2.

MODULA-GM

Electrónica de Delco, entonces un subsidiario del GM Hughes Electrónica,
desarrollada una versión de Modula-2 para los sistemas de control encajados que
comienzan en 1985. Delco lo nombró Modula-GM. Era el primer idioma de alto
nivel usado para substituir el código de la terminología de la informática para los
sistemas encajados en las unidades de control de motor de Delco (los ECUs).
Esto era significativo porque Delco producía sobre los 28.000 ECUs por día en
1988 para el GM; éste era entonces el productor más grande del mundo de los
ECUs[1]. El primer uso experimental del Modula-GM en un regulador encajado
estaba en los 1993 Gen-4 el ECU usados por CARRO (Automóvil del campeonato
que compite con a equipos) y IRL (Indy que compite con a liga) equipos[2]. El
primer uso de la producción del Modula-GM era su uso en carros del GM
comenzando con los 1990 años modelo VCM (módulo de control del vehículo)
usados para manejar GM Powertrain Vortec motores. El Modula-GM también fue
utilizado en todos los ECUs para los GM Familia de 90° Buick V6 3800 la serie II
utilizó en el año modelo 1997-2005 Avenida de parque de Buick. Los recopiladores
Modula-GM y las herramientas de gerencia asociadas del software eran sourced
por Delco de Intermetrics.

Modula-2 fue seleccionado como la base para el idioma de alto nivel de Delco
debido a sus numerosos fuerzas sobre otras opciones alternativas de la lengua en
1986. Después de Delco la electrónica fue hecha girar apagado del GM (con otras
divisiones componentes) para formar Delphi en 1997, el sourcing global requirió
que una lengua de alto nivel no propietaria del software esté utilizada. El ECU
encajó el software ahora desarrollado en los compiladores C del anuncio del uso
de Delphi.

Recopiladores continuados

   •   Prueba patrón Modula-2 para Amiga
   •   Borland Turbo Modula-2 para CP/M (abandonware)
   •   Borland Turbo Modula-2 para el MS-DOS (vendido a Jensen y a los socios,
       se convirtió TopSpeed Modula-2)
   •   Logitech tenía una serie de los recopiladores Modula-2
   •   M2S para Amiga
   •   Arroyo pedregoso Modula-2
                                                                                 16
•   TDI Modula-2 para Amiga y Atari ST
   •   Modula Corporation tenía una serie de los recopiladores Modula-2 para MS-
       DOS (M2M-PC), Apple II y Macintosh

5.5.- COMPILADORES PARA BASIC

El lenguaje BASIC fue creado en 1964 por los norteamericanos John Kemeny y
Thomas Kurtz, en el Dartmouth College. Su intención era diseñar un lenguaje
adecuado para principiantes. No tenía, por tanto, pretensiones de gran potencia,
pero era fácil de aprender y permitía abordar pronto pequeños proyectos. BASIC
son las iniciales de Beginner's All-purpose Symbolic Instruction Code.

El BASIC tuvo una gran expansión en los años 80, cuando se impuso como
lenguaje estándar para los microordenadores domésticos de ocho bits. Se usó
ampliamente en la enseñanza y también en la programación profesional. Sin
embargo, era un lenguaje poco estructurado y recibió muchas críticas por
promover malos hábitos de programación. Pero en lugar de desaparecer, fueron
surgiendo versiones nuevas con características más avanzadas. Aún hoy, Visual
Basic y su sucesor, Visual Basic .NET (aunque son variantes ya muy alejadas del
original) son lenguajes de programación muy usados en entorno Windows.

   •   ACE es un compilador de BASIC para ordenadores Amiga que produce código
       fuente ensamblador 68000. Se puede bajar de aminet.
   •   Alvyn es un intérprete BASIC multiplataforma compatible con AMOS Professional.
       La página oficial indica un estado de desarrollo del 40%. Actualmente sólo se
       puede descargar una versión de desarrollo para Linux.
   •   AMOS y STOS fueron exitosas versiones comerciales de BASIC para la creación
       de juegos en los ordenadores Amiga y Atari ST. Clickteam (uno de cuyos
       fundadores es el autor de AMOS y STOS) distribuye ahora libremente el código
       fuente en ensamblador 68000. También permite la distribución de los disquetes
       originales de AMOS en forma de ficheros, principalmente dirigidos a la emulación.
   •   LithiumBasic es un lenguaje tipo Basic para Windows 95/98 ideal para novatos
       por su sencillez. Incluye un entorno integrado bastante completo. El sitio oficial
       desapareció pero se puede bajar de la página de THE BASICs PAGE
       anteriormente enlazada.
   •   MBasic (de Franck Charlet) es un intérprete para la consola de Windows hecho a
       partir de MINI-BASIC (de Sylvain Bizoirre), el cual, a su vez, es una adaptación de
       Palo Alto 8080 TINY BASIC (de Li-Chen Wang). Se distribuye también el código
       fuente en ensamblador.
   •   MediaBASIC es un entorno de programación para Windows similar a Visual Basic.
       Su desarrollo se detuvo en estado alfa y la página oficial hace tiempo que no
       funciona.
   •   MINI-BASIC, de Sylvain Bizoirre, es un intérprete muy simple para la consola de
       Windows basado en Palo Alto 8080 TINY BASIC (de Li-Chen Wang). Se
       suministra el ejecutable y el código en ensamblador para MASM32.
   •   Mole Basic (de Remco Schellekens) es un pequeño intérprete Basic basado en
       flex y yacc para Linux y otros sistemas. Se distribuye también el código fuente.

                                                                                       17
•   Mono es una plataforma de desarrollo libre, patrocinada por Novell, compatible
       con .NET de Microsoft. Incluye soporte para bastantes lenguajes de programación,
       Visual Basic .NET entre ellos. Funciona en Windows, Mac OS X, Solaris y distintas
       versiones de Linux.
   •   Profan es un lenguaje para Windows con sintaxis tipo Basic, pero con
       características de otros lenguajes, como Pascal y dBase III. Creo que la versión
       actual es de pago y las antiguas son gratis. Aunque las versiones originales están
       en alemán, hay una versión (muy antigua) completamente traducida al inglés y
       parches para traducir otras posteriores.
   •   uBASIC, de Adam Dunkels, es un intérprete de BASIC muy simple y pequeño
       creado para servir como lenguaje de script sencillo para aplicaciones con
       limitaciones importantes de memoria. Se distribuye el código fuente en C.
   •   Visual Studio Express es una versión limitada y gratuita del más importante
       entorno de programación de Microsoft, para la plataforma .NET. Incluye soporte
       para bastantes lenguajes de programación, Visual Basic .NET entre ellos. Para
       Windows.
   •   Visualwindows es un entorno de programación para Windows parecido a Visual
       Basic. Debido a la imposibilidad de seguir manteniéndolo y dando soporte a los
       usuarios, el autor decidió distribuirlo gratuitamente. La página oficial dejó de
       funcionar pero se puede bajar una copia (y leer la reseña) del sitio THE BASICs
       PAGE.
   •   VPBasicFREE (de Ricardo Ponce) es un intérprete y compilador para Windows
       dirigido a principiantes. Incluye entorno integrado y documentación en inglés y
       español. Existe una versión superior de pago.
   •   wxBasic (de David Cuny) es un intérprete de Basic estructurado para Linux
       (usando controles GTK) y Windows (usando controles nativos), escrito en C y la
       biblioteca wxWindows. Su sintaxis es parecida a QBasic. Se distribuyen
       ejecutables y código fuente.
   •   X11-Basic es un intérprete Basic con sintaxis similar al GFA-Basic de Atari-ST y
       gráficos para el sistema X Window. Funciona en varios tipos de Unix con
       X Window (incluyendo Linux, MacOS X y Windows con Cygwin). También hay una
       versión Windows pero está incompleta (no funcionan los gráficos).
   •   XBasic es un moderno Basic estructurado con un completo entorno de
       programación. Hay versiones para Windows y Linux y está disponible el código
       fuente.
   •   XBLite, de David Szafranski, es un compilador para Windows basado en XBasic.
       Incluye bastantes mejoras, como más velocidad y controles nativos. Se distribuye
       con licencias GPL y LGPL.
   •   XST 2 es un lenguaje para Windows orientado a videojuegos que incluye un
       entorno de desarrollo, un intérprete rápido (también produce ejecutables) y un
       traductor a código C (compilable con Visual C 6).
   •   Yabasic (de Marc-Oliver Ihm) es un intérprete tradicional de BASIC con algunas
       mejoras, como subrutinas y bibliotecas. También contiene algunas facilidades
       gráficas simples. Funciona en Unix y Windows. Hay también una versión para la
       PlayStation 2 que viene en un disco con la videoconsola. Entre otros…

Los ocho principios que rigeron el diseño de BASIC fueron:
   1. Ser fácil de usar para los principiantes.

                                                                                      18
2. Ser un lenguaje de propósito general (no orientado).
   3. Permitir a los expertos añadir características avanzadas, conservando simple el
      lenguaje para los principiantes.
   4. Ser interactivo.
   5. Proveer mensajes de error claros y amigables.
   6. Responder rápido en los programas pequeños.
   7. No requerir un conocimiento del hardware de la computadora.
   8. Proteger al usuario del sistema operativo.

El lenguaje fue en parte basado en FORTRAN II y parte en Algol 60, con adiciones
para hacerlo apropiado en sistemas de tiempo compartido y con elementos que
facilitaran la operación aritmética de matrices. BASIC fue implementado por
primera vez para la mainframe GE-265, máquina que soportaba múltiples
terminales.

Contrario a la creencia popular, BASIC inicialmente no era un lenguaje
interpretado sino compilado. Casi inmediatamente después de su lanzamiento, los
profesionales de computación comenzaron a alegar que BASIC era muy lento y
simple. Tal argumento, hasta no hace mucho, fue un tema recurrente en la
industria de las computadoras.

Aun así, BASIC se extendió hacia muchas máquinas y plataformas, y se
popularizó moderadamente en las minicomputadoras como las de la serie DEC
PDP y la Data General Nova. En estos casos, el lenguaje era implementado como
intérprete, en vez de un compilador, o alternativamente, en ambas formas de
funcionamiento.

Madurez

En este período se crearon versiones de BASIC nuevas y más poderosas.
Microsoft vendió varias versiones de BASIC para MS-DOS/PC-DOS, incluyendo
BASICA, GW-BASIC (una versión compatible con BASICA que no necesitaba la
ROM de IBM), y Quick BASIC. El fabricante de Turbo Pascal, Borland, publicó
Turbo BASIC 1.0 en 1985 (versiones sucesoras aún se venden bajo el nombre de
PowerBASIC por otra compañía). Aparecieron varias extensiones de BASIC para
computadores caseros, típicamente con capacidad para gráficos, sonido, y
comandos DOS, así como facilidades para Programación estructurada. Hubo
lenguajes que usaron la sintaxis de BASIC como base para otros sistemas
totalmente diferentes, por ejemplo GRASS.

Sin embargo a finales de la década de 1980 las computadoras nuevas eran mucho
más complejas, e incluían características (como la Interfaz gráfica de usuario) que
hacían a BASIC menos apropiado para programarlas. Al mismo tiempo las
computadoras progresaban de ser interés para aficionados a herramientas usadas
principalmente para ejecutar aplicaciones escritas por otros, y la programación en
sí se fue haciendo menos importante para una creciente mayoría de usuarios.

                                                                                  19
BASIC comenzó a desvanecerse, aunque numerosas versiones aún estaban
disponibles.

La suerte de BASIC dio un giro nuevamente con la introducción de Visual Basic de
Microsoft. Si bien este lenguaje utiliza prácticamente todas las palabras clave
(sentencias, estructuras de control y funciones intrínsecas) y forma de manejo y
tipo de datos que versiones BASIC anteriores (DOS); VB es abismalmente más
potente y evolucionado; y se ha convertido en uno de los lenguajes más utilizados
en la plataforma Windows; se estima que entre el 70 y el 80% del total de
aplicaciones comerciales son programadas en VB. A partir de 2002, y con la
introducción de la plataforma .NET Framework de Microsoft, VB comienza a
utilizar el paradigma "orientado a objetos", aumentando la potencia del lenguaje y
haciéndolo multiplataforma. Visual Basic for Applications (VBA) fue añadido a
Microsoft Excel 5.0 en 1993 y al resto de la línea de productos de Microsoft Office
en 1997. Windows 98 incluyó un intérprete de VBScript. La versión más reciente
de Visual Basic es llamada VB.NET. Por otra parte, también existe la variante
OpenOffice.org Basic menos poderosa pero similar a VBA de Microsoft.

El Lenguaje Sintaxis

La sintaxis mínima de BASIC sólo necesita los comandos LET, INPUT, PRINT, IF
y GOTO. Un intérprete que ejecuta programas con esta sintaxis mínima no
necesita una pila. Algunas de las primeras implementaciones eran así de simples.
Si se le agrega una pila, se pueden agregar también ciclos FOR anidados y el
comando GOSUB. Un intérprete de BASIC con estas características necesita que
el código tenga números de línea.

Los números de línea fueron un aspecto muy distintivo del BASIC clásico. Sin
embargo, el uso de números de línea tiene la desventaja de requerir que el
programador estime cuántas líneas ocupará la parte del programa que escribe.
Este requerimiento se cumple generalmente incrementando los números de línea
en un intervalo regular, como 10, pero esto lleva a problemas a la hora que el
código después agregado exceda el espacio disponible entre las líneas originales.
Para aliviar este problema de los primeros intérpretes de BASIC, los usuarios
expertos pronto escribieron sus propios programas utilitarios para renumerar sus
programas, después del ingreso inicial. Más tarde aparecieron intérpretes de
BASIC que incluían un comando específico RENUMBER, el que permitía
renumerar rápidamente (y las veces que se quisiera) todo el código nuevamente,
con cualquier intervalo entre líneas indicado y a partir de un número entero dado;
eliminando así el principal problema de la numeración de líneas obligatoria.


En los dialectos modernos de BASIC MIUN ya no es necesario incluir números de
línea (aunque son permitidos), y la mayoría (o todos) han añadido control de flujo
estructurado y los constructores de declaración de datos similares a los de otros
lenguajes, tales como C y Pascal:
                                                                                20
•   do
          •   loop
          •   while
          •   until
          •   exit
          •   on... goto
          •   gosub
          •   select ... case

Variantes recientes como Visual Basic han introducido algunas características
orientadas a objetos, y hasta herencia en la última versión. La administración de
memoria es más fácil que con muchos otros lenguajes de programación
procedurales por el uso de un Recolector de basura (y a costas de la velocidad de
ejecución).

Procedimientos y Control de Flujo

BASIC no tiene una biblioteca externa estándar como otros lenguajes como C. En
cambio, el intérprete (o compilador) contiene una biblioteca incorporada de
procedimientos intrínsecos. Estos procedimientos incluyen la mayoría de las
herramientas que un programador necesita para aprender a programar y escribir
aplicaciones sencillas, así como funciones para realizar cálculos matemáticos,
manejar cadenas, entrada desde la consola, gráficos y manipulación de archivos.

Viejos dialectos de BASIC no permitían a los programadores escribir sus propios
procedimientos. Los programadores en cambio debían escribir sus programas con
un gran número de enunciados GOTO para hacer las derivaciones de flujo y
retorno del programa. Esto podía producir un código fuente muy confuso (la
mayoría de las veces era así), comúnmente conocido como Código espagueti; el
cual era sumamente difícil de mantener, mucho menos por programadores ajenos
al desarrollo del software.

Con la inclusión posterior de enunciados GOSUB (Go-Subroutine) se ramificaba el
programa a especies de subrutinas, sin parámetros o variables locales. Ellas
proveen una forma de implementar una suerte de procedimientos (realmente no lo
son, sencillamente es un "salto y retorno") y estructurar más el programa, evitando
bastante la utilización de la dañina sentencia GOTO.

La mayoría de las versiones de BASIC más modernas, como Microsoft
QuickBASIC (1985-1988) y BASIC PDS (Profesional Developmen System - 1990)
añadieron soporte completo para subrutinas, funciones y programación
estructurada. Esta es otra área donde BASIC difiere de muchos lenguajes de
programación. Sin embargo la primitiva GOSUB se ha mantenido hasta las
versiones actuales, por razones compatibilidad.



                                                                                21
BASIC, como Pascal, hace una distinción entre un procedimiento que no devuelve
un valor (llamado subrutina) y un procedimiento que lo hace (llamado función).
Muchos otros lenguajes (como C) no hacen esa distinción y consideran todo como
una función (algunas que devuelven un valor “void” [vacío]).

Mientras que las funciones que devuelven un valor son una adición relativamente
reciente a los dialectos de BASIC, muchos de los primeros sistemas soportaban la
definición de funciones matemáticas en línea, con DEF FN (“DEFine FunctioN”
[DEFinir FuncióN]). El Dartmouth BASIC original también soportaba funciones al
estilo de Algol, así como subrutinas desde sus primeros tiempos.

Tipos de Datos

BASIC es reconocido por tener muy buenas funciones para manipular cadenas de
caracteres. Los primeros dialectos ya tenían un juego de funciones fundamentales
(LEFT$, MID$, RIGHT$) para extraer y/o reemplazar subcadenas cadenas
fácilmente. Como las cadenas son utilizadas en aplicaciones diarias, esta era una
ventaja considerable sobre otros lenguajes al momento de su introducción.

El Dartmouth BASIC original soportaba únicamente datos de tipo numérico y
cadenas. No había un tipo entero. Todas las variables numéricas eran de punto
flotante. Las cadenas eran de tamaño dinámico. Soportaba arreglos de ambos,
números y cadenas, en una o dos dimensiones.

Cada dialecto moderno de BASIC posee al menos los tipos de datos numérico y
string (cadena). Estos tipos de datos se pueden distinguir usando un posfijo: los
identificadores de cadenas terminan con $ (signo pesos, ejemplo la variable
NOMBRE$), mientras que los numéricos sencillamente no llevan posfijo; a menos
que se requiera indicar y forzar explícitamente qué tipo de numérico es, por
ejemplo A% es entero, A! es real simple precisión y A# es real doble precisión.

En BASIC las variables no necesitan forzosamente ser declaradas antes de
usarse, excepto los arreglos de más de 10 elementos; aunque versiones BASIC
relativamente modernas poseen la opción (considerada buena práctica de
programación) para obligar al programador a declarar toda variable antes de su
uso (una directiva como OPTION EXPLICIT). La declaración de variables en
BASIC se hace usando la palabra clave DIM.

Muchos dialectos también soportan tipos numéricos adicionales, como enteros de
16 y 32 bits (simple y long, respectivamente), además de sus números de punto
flotante. Adicionalmente algunos permiten la utilización de tipos de datos definidos
por el usuario, similar a los "records" de Pascal, o las "structs" de C.

Versiones modernas de BASIC (como VBA) soportan una gran variedad de tipos
de datos primitivos (o intrínsecos), además de los definidos por el usuario.


                                                                                 22
La mayoría de los dialectos de BASIC soporta arreglos en todos sus tipos de
datos; es común también el soporte para arreglos mulidimensionales.


Ejemplos:

 DIM MatrizDeEnteros(100,100) AS INTEGER
 DIM VectorDeEnteros%(30)
 DIM ListaDeNombres(50) AS STRING
 DIM ListaDeCiudades$(50)

Dependiendo del dialecto de BASIC y del uso del enunciado OPTION BASE, el
primer índice de los arreglos que se declaren será 1, por defecto es cero.

En los ejemplos anteriores, si no se declara previamente "OPTION BASE 1", el
primero es un arreglo en dos dimensiones de enteros 16 bits, con índices que van
desde 0 hasta 100 (matriz de 101 x 101 elementos); en tanto que el segundo es
un arreglo de enteros en una sola dimensión, de 0 a 30 (vector de 31 elementos).
Observar que las dos formas de declaración de enteros son equivalentes,
explicitándolo o con el uso del posfijo %. Análogamente para cadenas o string de
caracteres, que en este caso además son de longitud variable (dinámicas, por
defecto).

Disponibilidad y variantes del lenguaje

BASIC está disponible para casi todas las plataformas y sistemas operativos
existentes. Una implementación gratuita que cumple con estándares y es
multiplataforma es Bywater BASIC (bwBASIC). El intérprete está escrito en C y
viene bajo la licencia GNU. Está diseñado para interfaz de texto o consola (no
gráfica), no incluye soporte para crear interfaces gráficas de usuario (GUI's,
Graphical User Interface). Hay un BASIC gratuito que si incluye soporte para GUI,
es similar a Visual Basic y se ejecuta en Windows y GNU/Linux, es Phoenix Object
BASIC.

Las versiones de intérpretes/compiladores más conocidos son la línea de
productos Quick BASIC y QBASIC, éste último es sólo intérprete, ambos son de
Microsoft. En la actualidad lo es el moderno Visual BASIC, que Microsoft ha
tratado de mantener al menos mínimamente compatible con incluso las primeras
versiones de sus BASIC (en realidad es escasamente compatible).

Otras versiones incluyen PowerBASIC de PowerBASIC, así como TrueBASIC de
TrueBASIC, que cumple con los últimos estándares oficiales de BASIC. (True
BASIC Inc. fue fundada por los creadores originales de Dartmouth BASIC.)

REALbasic es una variante disponible para Mac OS Classic, Mac OS X, Microsoft
Windows y GNU/Linux. Una versión de un dialecto simple de BASIC para la parrot
                                                                              23
virtual machine, muestra como se implementa un intérprete de BASIC en un
lenguaje similar al ensamblador. SmallBASIC es un dialecto que ejecuta en
muchas plataformas (Win32, DOS, GNU/Linux y PalmOS) y viene bajo la licencia
GNU (GPL).

FreeBASIC es un compilador libre, compatible en sintaxis con QuickBASIC.




Ejemplos de código fuente

Ejemplo 1: Simple Saludo
   PRINT "Hola mundo"

Ejemplo 2: BASIC original no estructurado (Applesoft BASIC)
10 INPUT "Cuál es su nombre:"; NN$
20 PRINT "Bienvenido al 'asterisquero' ";NN$
25 PRINT
30 INPUT "con cuántos astericos inicia [Cero sale]:"; N
40 IF N<=0 THEN GOTO 200
50 AS$=""
60 FOR I=1 TO N
70 AS$=AS$+"*"
80 NEXT I
90 PRINT "AQUI ESTAN:"; AS$
100 INPUT "Desea más asteriscos:";SN$
110 IF SN$="" THEN GOTO 100
120 IF SN$<>"S" AND SN$<>"s" THEN GOTO 200
130 INPUT "CUANTAS VECES DESEA REPETIRLOS [Cero sale]:"; VECES
140 IF VECES<=0 THEN GOTO 200
150 FOR I=1 TO VECES
160 PRINT AS$;
170 NEXT I
180 PRINT
185 REM A repetir todo el ciclo (comentario)
190 GOTO 25
200 END




                                    BIBLIOGRFIA

   •   K. N. Rey, Modula-2, un texto comprensivo y claramente escrito, continuamente en
       la impresión por ahora cerca de dos décadas, ISBN 0-669-11091-4
   •   Richard J. Sutcliffe, “Modula-2: Abstracciones para los datos y las estructuras de
       programación, “(con Modula-2 ISO-Estándar) edición 2004-2005

                                                                                      24
http://wapedia.mobi/es/Fortran

http://www.desarrolloweb.com/articulos/1550.php

http://www.worldlingo.com/ma/enwiki/es/Modula-2/1




                                                    25

Weitere ähnliche Inhalte

Was ist angesagt? (18)

Pascal [modo de compatibilidad]
Pascal [modo de compatibilidad]Pascal [modo de compatibilidad]
Pascal [modo de compatibilidad]
 
EXPO PERL UTT
EXPO PERL UTTEXPO PERL UTT
EXPO PERL UTT
 
3
33
3
 
Turbo Pascal 7
Turbo Pascal 7Turbo Pascal 7
Turbo Pascal 7
 
4035426 ejercicios-resueltos-en-pascal
4035426 ejercicios-resueltos-en-pascal4035426 ejercicios-resueltos-en-pascal
4035426 ejercicios-resueltos-en-pascal
 
Pascal
PascalPascal
Pascal
 
CSSED, PYTHON, PERL
CSSED, PYTHON, PERLCSSED, PYTHON, PERL
CSSED, PYTHON, PERL
 
Presentación1
Presentación1Presentación1
Presentación1
 
Clase 01
Clase 01Clase 01
Clase 01
 
Clase10 ejemplos asm con tasm y tlink
Clase10 ejemplos asm con tasm y tlinkClase10 ejemplos asm con tasm y tlink
Clase10 ejemplos asm con tasm y tlink
 
Data segment
Data segmentData segment
Data segment
 
Arquitecturas de ordenadores y compiladores cruzados
Arquitecturas de ordenadores y compiladores cruzadosArquitecturas de ordenadores y compiladores cruzados
Arquitecturas de ordenadores y compiladores cruzados
 
Programacion ensamblador-procesadoresk
Programacion ensamblador-procesadoreskProgramacion ensamblador-procesadoresk
Programacion ensamblador-procesadoresk
 
Pul123
Pul123Pul123
Pul123
 
Plantilla writer02bvbsoloindices
Plantilla writer02bvbsoloindicesPlantilla writer02bvbsoloindices
Plantilla writer02bvbsoloindices
 
Tarea3
Tarea3 Tarea3
Tarea3
 
Entorno Easy Code
Entorno Easy CodeEntorno Easy Code
Entorno Easy Code
 
Lengiajes de programacion valeria loaiza zuleta
Lengiajes de programacion valeria loaiza zuletaLengiajes de programacion valeria loaiza zuleta
Lengiajes de programacion valeria loaiza zuleta
 

Ähnlich wie A L G U N O S C O M P I L A D O R E S

Lógica De La Programación Y Lenguaje de Pascal
Lógica De La Programación Y Lenguaje de PascalLógica De La Programación Y Lenguaje de Pascal
Lógica De La Programación Y Lenguaje de PascalFernando Galvez
 
Trabajo laboratorio
Trabajo laboratorioTrabajo laboratorio
Trabajo laboratorioMelvinadalid
 
Lenguaje de programación Pascal
Lenguaje de programación PascalLenguaje de programación Pascal
Lenguaje de programación PascalJuan Vladimir
 
Herramientas de software libre
Herramientas de software libreHerramientas de software libre
Herramientas de software librejorge987456
 
Resolución de problemas de algoritmo.
Resolución de problemas de algoritmo.Resolución de problemas de algoritmo.
Resolución de problemas de algoritmo.francisco dixon
 
Manual Pascal
Manual PascalManual Pascal
Manual PascalCEUNISAL
 
Programacion
ProgramacionProgramacion
ProgramacionMirian
 
Historia del C++ y JAVA
Historia del C++ y JAVAHistoria del C++ y JAVA
Historia del C++ y JAVANohemi Cuesta
 
Lenguaje de programacion ( basic) apesteguia
Lenguaje de programacion ( basic) apesteguiaLenguaje de programacion ( basic) apesteguia
Lenguaje de programacion ( basic) apesteguiatonytenorio2
 
Top de lenguajes de programacion2
Top de lenguajes de programacion2Top de lenguajes de programacion2
Top de lenguajes de programacion2Saul Pereyra
 
Top de lenguajes de programacion
Top de lenguajes de programacionTop de lenguajes de programacion
Top de lenguajes de programacionSaul Pereyra
 
Top de lenguajes de programacion2
Top de lenguajes de programacion2Top de lenguajes de programacion2
Top de lenguajes de programacion2Saul Pereyra
 
Diapositivas de compiladores
Diapositivas de compiladoresDiapositivas de compiladores
Diapositivas de compiladoresHCL Technologies
 
Lenguajes De Programacion
Lenguajes De ProgramacionLenguajes De Programacion
Lenguajes De ProgramacionROSA859
 

Ähnlich wie A L G U N O S C O M P I L A D O R E S (20)

Lógica De La Programación Y Lenguaje de Pascal
Lógica De La Programación Y Lenguaje de PascalLógica De La Programación Y Lenguaje de Pascal
Lógica De La Programación Y Lenguaje de Pascal
 
Turbo Pascal
Turbo PascalTurbo Pascal
Turbo Pascal
 
Trabajo laboratorio
Trabajo laboratorioTrabajo laboratorio
Trabajo laboratorio
 
Trabajo laboratorio
Trabajo laboratorioTrabajo laboratorio
Trabajo laboratorio
 
Lenguaje de programación Pascal
Lenguaje de programación PascalLenguaje de programación Pascal
Lenguaje de programación Pascal
 
Lenguajes formales
Lenguajes formalesLenguajes formales
Lenguajes formales
 
Jag
JagJag
Jag
 
Herramientas de software libre
Herramientas de software libreHerramientas de software libre
Herramientas de software libre
 
Resolución de problemas de algoritmo.
Resolución de problemas de algoritmo.Resolución de problemas de algoritmo.
Resolución de problemas de algoritmo.
 
Manual Pascal
Manual PascalManual Pascal
Manual Pascal
 
Programacion
ProgramacionProgramacion
Programacion
 
INFORMATICA TRABAJO.docx
INFORMATICA TRABAJO.docxINFORMATICA TRABAJO.docx
INFORMATICA TRABAJO.docx
 
Historia del C++ y JAVA
Historia del C++ y JAVAHistoria del C++ y JAVA
Historia del C++ y JAVA
 
Lenguaje de programacion ( basic) apesteguia
Lenguaje de programacion ( basic) apesteguiaLenguaje de programacion ( basic) apesteguia
Lenguaje de programacion ( basic) apesteguia
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Top de lenguajes de programacion2
Top de lenguajes de programacion2Top de lenguajes de programacion2
Top de lenguajes de programacion2
 
Top de lenguajes de programacion
Top de lenguajes de programacionTop de lenguajes de programacion
Top de lenguajes de programacion
 
Top de lenguajes de programacion2
Top de lenguajes de programacion2Top de lenguajes de programacion2
Top de lenguajes de programacion2
 
Diapositivas de compiladores
Diapositivas de compiladoresDiapositivas de compiladores
Diapositivas de compiladores
 
Lenguajes De Programacion
Lenguajes De ProgramacionLenguajes De Programacion
Lenguajes De Programacion
 

Kürzlich hochgeladen

POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 

Kürzlich hochgeladen (10)

POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 

A L G U N O S C O M P I L A D O R E S

  • 1. UNIVERSIDAD AUTÓNOMA DE TAMAULIPAS FACULTAD DE INGENIERÍA “ARTURO NARRO SILLER” INGENIERÍA EN SISTEMAS COMPUTACIONALES NOMBRE DE LA ASIGNATURA COMPILADORES INVESTIGACIÓN UNIDAD 5 ALGUNOS COMPILADORES TITULAR DE LA ASIGNATURA M.S.I. ARMANDO BECERRA DEL ANGEL NOMBRE DEL ALUMNO NAHUM VERA HERNANDEZ 17 de noviembre de 2009
  • 2. INDICE UNIDAD 5. ALGUNOS COMPILADORES 5.1.- COMPILADOR PARA PASCAL 3 • Características únicas • Implementaciones 5.2.- COMPILADORES PARA C 6 • Características • Elementos y terminología en C 5.3.- LOS COMPILADORES DE FORTRAN 9 • Principales características Tipos de datos soportados: • Control de secuencia • Subprogramas • Abstracción y encapsulación. Evaluación del lenguaje • Ventajas e inconvenientes de su sintaxis 5.4.- COMPILADOR OPTIMIZADOR DE MODULA-2 14 • Descripción • Dialectos • Elementos de lengua Palabras reservadas • Idiomas relacionadas • MODULA-GM • Recopiladores continuados 5.5.- COMPILADORES PARA BASIC • Los ocho principios que rigeron el diseño de BASIC 17 • Madurez • El Lenguaje Sintaxis • Procedimientos y Control de Flujo • Tipos de Datos • Disponibilidad y variantes del lenguaje BIBLIOGRFIA 2
  • 3. UNIDAD 5. ALGUNOS COMPILADORES 5.1.- COMPILADOR PARA PASCAL Pascal fue creado inicialmente por Niklaus Wirth como un lenguaje para la enseñanza de la programación al final de los años 60. Es un descendiente de Algol y a su vez influyó mucho en otros lenguajes posteriores, como Ada. Destaca por la claridad del código y por promover «buenos hábitos» de programación. Pascal alcanzó una gran popularidad cuando la empresa Borland lanzó Turbo Pascal, un compilador para IBM-PC rápido y barato, que además introducía mejoras importantes al lenguaje. Su sucesor, también de gran éxito, es Delphi, una herramienta de programación visual basada en Object Pascal, una versión de Pascal con objetos. • Alice Pascal es un viejo (1985) entorno de programación en Pascal con sintaxis dirigida para MS-DOS y Atari ST. También está disponible el código fuente. • Autorun Pascal Builder es un entorno para Windows para crear aplicaciones RAD (presentaciones, tutoriales, álbumes multimedia, etc.) con un lenguaje de Script tipo Pascal integrado. • DPas es un compilador gratuito para MS-DOS de 32 bits. • Free Pascal es un compilador profesional de 32 y 64 bits compatible con Turbo Pascal 7 y con la mayoría de versiones de Delphi. Hay versiones para muchos sistemas, incluyendo Linux, Mac OS y Win32. Lazarus es un clon de Delphi basado en Free Pascal. Dev-Pascal es un entorno para Windows que usa Free Pascal o GNU Pascal. • GNU Pascal es un compilador de 32/64 bits que funciona en todos los sistemas operativos soportados por GNU C, incluyendo Linux, FreBSD, DOS (con DJGPP o EMX), Windows (con Cygwin o mingw32) y OS/2 (con EMX). Soporta Pascal estándar, Pascal extendido, Turbo Pascal 7.0 y partes de Delphi, Mac Pascal y Pascal-SC. • Kylix Open Edition es un entorno de desarrollo visual para Linux de Borland compatible con Delphi. Para hacer la descarga (90,7 Mb) hay que registrarse. • Nemesis Pascal es un intérprete de Pascal escrito Delphi y Kylix y que funciona en Windows y Linux. • Pascal Pro produce código ensamblador para DOS32. Requiere TASM/MASM o NASM así como TLink32 y WDOSX u otras herramientas para generar los ejecutables. Incluye casi todos los elementos de Pascal más algunas mejoras. • Pascal X es un entorno de programación en Pascal para crear aplicaciones de consola de Windows. Incluye herramientas de ayuda para programadores noveles. Pueden usarse las palabras clave estándar en inglés o traducidas al portugués. • Think Pascal es un compilador para Macintosh, desarrollado por Think Technologies (con el nombre de Lightspeed Pascal), empresa posteriormente absorbida por Symantec. En 1997 dejó de distribuirse pero ahora se puede descargar gratuitamente. • Turbo Pascal 5.5 es un viejo (1989) compilador para MS-DOS de Borland, ahora distribuido gratuitamente. • Vector Pascal es una implementación de Pascal en Java pensada para aprovechar los juegos de instrucciones SIMD (Single Instruction-stream Multiple Data-stream) de los 3
  • 4. modernos microprocesadores, como los de MMX y AMD 3D Now!. Incluye características propias de APL y J y extensiones de Turbo Pascal y Pascal 90. Incluye también un entorno de desarrollo. • Virtual Pascal es un compilador de 32 bits completamente compatible con Turbo Pascal 7 y en gran parte con Delphi 2. Funciona en Windows y OS/2. Ya no está en desarrollo. Características únicas A diferencia de lenguajes de programación descendientes de C, Pascal utiliza el símbolo:= para la asignación en vez de =. Si bien el segundo es más conciso, la práctica ha demostrado que muchos usuarios utilizan el símbolo de igualdad para comparar valores en lugar del comparador de C que es el símbolo ==. Esta sintaxis conduce a muchos errores o bugs difíciles de rastrear en código C. Dado que Pascal no permite asignaciones dentro de expresiones y utiliza sintaxis distinta para asignaciones y comparaciones, no sufre estos errores. Además sus programas tienen definidas dos partes: declarativa y ejecutiva. En la primera debe aparecer todo lo que se usará en la segunda, de lo contrario se detecta como desconocido y evita ciertas incomprensiones como veremos más adelante. En la parte declarativa se enuncian Unit existentes, procedimientos, funciones, variables, constantes y nuevos tipos de datos estructurados. Otra diferencia importante es que en Pascal, el tipo de una variable se fija en su definición; la asignación a variables de valores de tipo incompatible no están autorizadas (En C, en cambio, el compilador hace el mejor esfuerzo para dar una interpretación a casi todo tipo de asignaciones). Esto previene errores comunes donde variables son usadas incorrectamente porque el tipo es desconocido; y también evita la necesidad de notación húngara, que vienen a ser prefijos que se añaden a los nombres de las variables y que indican su tipo. Implementaciones Las primeras versiones del compilador de Pascal, entre ellas la más distribuida fue UCSD Pascal, traducían el lenguaje en código para una máquina virtual llamada máquina-P. La gran ventaja de este enfoque es que para tener un compilador de Pascal en una nueva arquitectura de máquina solo hacía falta reimplementar la máquina-P. Como consecuencia de esto, solo una pequeña parte del interprete tenía que ser reescrita hacia muchas arquitecturas. En los años 1980, Anders Hejlsberg escribió el compilador Blue Label Pascal para la Nascom-2. Más tarde fue a trabajar para Borland y reescribió su compilador que se convirtió en Turbo Pascal para la IBM PC. Este nuevo compilador se vendió por $49, un precio orientado a la distribución masiva. El económico compilador de Borland tuvo una larga influencia en la comunidad de Pascal que comenzó a utilizar principalmente en el IBM PC. En busca de un 4
  • 5. lenguaje estructurado muchos aficionados al PC reemplazaron el BASIC por este producto. Dado que Turbo Pascal, solo estaba disponible para una arquitectura, traducía directamente hacia el código máquina del Intel 8088, logrando construir programas que se ejecutaban mucho más rápidamente que los producidos en los esquemas interpretados. Durante los años 1990, estuvo disponible la tecnología para construir compiladores que pudieran producir código para diferentes arquitecturas de hardware. Esto permitió que los compiladores de Pascal tradujeran directamente al código de la arquitectura en que corrieran. Con Turbo Pascal versión 5.5, Borland, agregó programación orientada a objetos a Pascal. Sin embargo, Borland después decidió mejorar esa extensión del lenguaje introduciendo su producto Delphi, diseñado a partir de estándar Object Pascal propuesto por Apple como base. Borland también lo llamó Object Pascal en las primeras versiones, pero cambio el nombre a lenguaje de programación Delphi en sus últimas versiones Ejemplo de código usando la estructura lineal: program raiz(input, output); uses crt; (* Obtener la raíz cuadrada de un número real x cualquiera. *) var x, y: real; respuesta: string; begin writeln('** Calcular la raíz cuadrada de x **'); writeln('Entrar x (> 0): '); readln(x); y := sqrt(abs(x)); (* Raíz cuadrada del valor absoluto de x para evitar raíces imaginarias *) writeln; if (x<0) then (* Si x es negativo, el resultado se notifica como imaginario *) writeln('La raíz cuadrada de ', x, ' es el número imaginario ', y,'i'); else writeln('La raíz cuadrada de ', x, ' es ', y); writeln; writeln('** Fin **'); readln; (* Espera a que el usuario pulse enter para salir del programa *) end. 5
  • 6. 5.2.- COMPILADORES PARA C C fue creado en los Bell Telephone Laboratories al principio de los 70, por Dennis M. Ritchie. Su nacimiento estuvo ligado al del sistema operativo Unix, que se desarrolló paralelamente. Sus características debían ser: eficiencia (o sea, rapidez en la ejecución de los programas), potencia (permite explotar a fondo las posibilidades de la máquina) y portabilidad (el mismo código puede compilarse en máquinas diferentes). Unix fue reescrito en C, lo cual supuso un gran éxito de este lenguaje, a partir del cual se convirtió en uno de los más extendidos. La historia del nacimiento de C, contada por Dennis M. Ritchie, puede leerse en http://cm.bell- labs.com/cm/cs/who/dmr/chist.html. A C se le ha criticado que los programas suelen ser poco legibles y propensos a errores. Por contra, casi nadie le discute su potencia y su gran implantación, que a menudo lo convierten en la elección inevitable para proyectos colectivos. A partir de 1979, Bjarne Stroustrup, de AT&T, empezó a trabajar en un descendiente de C con soporte para orientación a objetos y otras mejoras, que sería conocido como C++ (la primera versión, interna de AT&T, data de 1983). • ACC es un compilador de un subconjunto de C que genera código ensamblador en modo protegido para MS-DOS. El paquete también incluye el ensamblador A86. • Tanto el compilador como el depurador de la versión 5.5 de Borland C++Builder son distribuidos gratuitamente por Borland. • Ch es un superconjunto de C, interpretado y fácil de usar. Hay una versión estándar gratuita para todos los usos, y una profesional, sólo gratuita para uso académico. Está disponible para varios sistemas, incluyendo Windows, Linux y MacOS X. • Cilk es un lenguaje para programación paralela multihilo basado en ANSI C. Se distribuye sólo el código fuente y se ha instalado en varios sistemas POSIX incluyendo Linux y MacOS X (no les vayas a preguntar si se puede instalar en Windows NT, que parece que no les gusta). • CINT es un intérprete de C y C++ que cubre el 95% de ANSI C y el 85% de C++. Funciona en muchas plataformas, incluyendo Windows, MS-DOS, Linux y MacOS. Se distribuye el código fuente y un ejecutable para Windows. • Cyclone es un lenguaje basado en C diseñado para ser seguro. Funciona en Linux y Windows con Cygwin. Sólo se distribuye el código fuente. • Digital Mars distribuye en un solo paquete compiladores de C y C++ para DOS16, DOS32, Win16 y Win32. • eC es un subconjunto de C++, diseñado para servir como herramienta para aprender este lenguaje. Está especialmente pensado para que sea fácil la transición desde Pascal. Se distribuyen en un solo paquete compiladores e intérpretes para DOS y Windows (y muchos ejemplos). 6
  • 7. EiC es un C interpretado que puede usarse de forma interactiva. Hay versiones para varios sistemas Unix, Win32 y DOS con DJGPP. También se distribuye el código fuente. • GCC (GNU Compiler Collection) es un paquete GNU que incluye compiladores de C, C++ y otros lenguajes. Los compiladores de C (gcc, con minúsculas) y C++ (g++) van incluidos en todas las distribuciones de Linux, y sirven como lenguajes de programación para la mayor parte del trabajo desarrollado en GNU/Linux, incluyendo el kernel de Linux. Hay también adaptaciones para DOS (DJGPP) y Win32 (Cygwin y MinGW). Dev-C++ es un entorno de desarrollo que puede usarse con cualquier versión de GCC para Windows (incluye MinGW). • LadSoft (David Lindauer) distribuye cc386 (código fuente y ejecutable), un compilador de ANSI C para Windows y MSDOS con DPMI, y CC68K, un cross- compiler para Windows de código ejecutable de Motorola 68K (incluye también un simulador que puede ejecutar el resultado). • lcc, por Chris Fraser y David Hanson, es un compilador de ANSI C. Se distribuye el código fuente, así como archivos binarios para Windows. lcc está descrito en el libro A Retargetable C Compiler: Design and Implementation. • LCC-Win32 es un compilador de C ampliamente documentado, desarrollado por Jacob Navia a partir del documento A portable C compiler, de Dave Hanson y Chris Fraser (supongo que es una versión antigua del libro citado anteriormente). Es gratuito para uso no comercial. • Leonardo es un entorno integrado para Macintosh (con PowerPC) basado en ANSI C, incluyendo también el lenguaje de visualización ALPHA (que se inserta dentro del código fuente en comentarios especiales). Está indicado para el aprendizaje de C, la depuración de programas y la programación de «algoritmos animados». Permite la ejecución hacia atrás (!). Este proyecto ha sido abandonado en favor de Leonardo Computing Environment (a continuación). • Leonardo Computing Environment es el sucesor de Leonardo y tiene características similares. Está siendo desarrollado en Windows, Linux y MacOS. • Macintosh Programmer's Workshop es un conjunto de herramientas para programación de Macintosh. Incluye compiladores de C y C++ para micros 68k y Power PC para sistemas 7.x, 8.x y 9.x. • Open Watcom C/C++ es el sucesor de código abierto de una famosa versión comercial de C y C++. Se distribuyen gratuitamente (aunque se solicitan donaciones) el código fuente y paquetes instalables para Windows y OS/2. También se distribuye la versión 11.0c de Watcom. • Pacific C es un compilador gratuito para MS-DOS, distribuido anteriormente como shareware por HI-TECH. Incluye un entorno de desarrollo integrado. • Pelles C es un completo kit de desarrollo para Windows y Pocket PC. El compilador está basado en lcc. • Sphinx C-- es un lenguaje de medio a bajo nivel para ordenadores con microprocesadores 80x86, una especie de mezcla entre C y ensamblador. El autor original, Peter Cellik, abandonó en 1996 su desarrollo, pero otros programadores han continuado su trabajo. Parece que C-- es un lenguaje más general. • Small C es un pequeño compilador de C con códigos fuentes para distintas plataformas, entre ellas MS-DOS y CP/M. • Tiny C es un compilador para Linux muy pequeño y rápido. 7
  • 8. Turbo C es el viejo compilador C de Borland para MS-DOS. Borland distribuye ahora gratuitamente algunas versiones. Aquí se encuentra la 2.01. • El Visual C++ Toolkit 2003 de Microsoft incluye todas las herramientas necesarias para compilar y enlazar aplicaciones basadas en C++ para Windows y .NET Common Language Runtime. Son 32 Mb. Características La popularidad del lenguaje C se debe a sus características: • Compacto: sólo tiene 32 palabras reservadas. • Estructurado: se basa en el empleo de funciones, que son bloques de código independientes. • Portable: los programas ejecutables obtenidos funcionan en cualquier máquina (utilizando las librerías y funciones estándar). El código fuente tampoco dependerá del compilador o del sistema operativo utilizado. • Flexible: tiene pocas restricciones. • Lenguaje de tipo medio: dispone de potentes sentencias propias de los lenguajes de alto nivel y características de lenguajes de bajo nivel como el ensamblador (permite el control de la CPU a nivel de registros, e incluso a nivel de bits), con plena disponibilidad de la memoria y puertos conectados a la CPU. • Extensión: el C es un lenguaje muy extendido. Los compiladores son relativamente sencillos y reducidos, y cuando surge una nueva máquina o sistema operativo, es uno de los primeros programas que se diseñan. Elementos y terminología en C Esto es solo para introduciros un poco a los elementos que usaremos en nuestros programas, cada elemento se verá en profundidad en los siguientes capítulos. Funciones En C es la unidad básica de programación. Los programas se construyen a base de funciones que reciben unos valores de entrada y devuelven unos de salida. En nuestro primer programa hemos visto la función main, que es siempre la primera que toma el control del programa está en todos los programas. Variables Como muchos sabréis, las variables son espacios que guardan un valor que puede cambiar (variar) a lo largo del programa. Tienen un nombre (etiqueta o identificador) que identifica a la porción de memoria ocupada por la variable. Constantes Como podéis imaginar las constantes, a diferencia de las variables, guardan un valor que no se puede alterar a lo largo del programa. 8
  • 9. Identificadores o etiquetas Los identificadores o etiquetas son los nombres que identifican a las variables, constantes y funciones. Deben respetar las siguientes condiciones: • Deben empezar con una letra o con la barra baja "_", y pueden construirse con letras, números y barras bajas. • IMPORTANTE: el C es sensible a las mayúsculas y minúsculas (denominado case sensitive), así que no sería lo mismo Variable que variable. • No se pueden usar palabras reservadas como identificadores. • Las funciones creadas por el programador pueden comenzar con mayúscula para diferenciarla de las funciones definidas en el compilador. • Las etiquetas o identificadores definidas en el compilador, también llamadas constantes simbolicas (como por ejemplo FILE), suelen escribirse en mayúscula. Sentencias Una sentencia es un conjunto de identificadores, símbolos, etc., escritos en una línea. En C las sentencias terminan con punto y coma ";". Las sentencias pueden ir en una línea cada una como es habitual, o varias en una línea, separadas por punto y coma. Operadores Son todos aquellos símbolos para realizar operaciones aritméticas o lógicas: +, *, /, etc. Bloques de sentencias Son conjuntos de sentencias agrupadas entre llaves "{}" que forman una unidad inseparable y se evalúan como una única sentencia más compleja. Comentarios Los comentarios sirven sólo para aclarar aspectos del código fuente y son ignorados por el compilador. Son de gran importancia, ya que si el código fuente debe ser modificado después de un tiempo, o si es pasado de un programador a otro, los comentarios pueden facilitarle mucho la tarea de entenderlo. Los comentarios van delimitados por las marcas "/*" y "*/", por ejemplo: /* Esto es un comentario */ Tabulación o identación Consiste en estructurar mediante tabulaciones el código del programa para facilitar su lectura. El criterio general de tabulación es tabular más las sentencias subordinadas a otras (se verá más adelante en los ejemplos). Directivas del preprocesador Son sentencias ubicadas al principio del programa y que indican al compilador 9
  • 10. cómo debe actuar sobre el programa fuente. En el ejemplo de este capítulo hemos visto la directiva #include. Las directivas del preprocesador no finalizan con punto y coma. 5.3.- LOS COMPILADORES DE FORTRAN Fortran (Inglés: Formula Translating System) es un lenguaje características. Está fuertemente orientado al cálculo y por ende es uno de los de mayor eficiencia en la ejecución. Algunas otras versiones subsiguientes fueron: • FORTRAN IV • FORTRAN 80 • FORTRAN 77 • FORTRAN 90 de programación de alto nivel y procedural, desarrollado para propósitos generales por IBM en 1957 para el equipo IBM 704. [1] Fue el primero desarrollado con estas FORTRAN 95 Fortran ha sido ampliamente adoptado por la comunidad científica para escribir aplicaciones de cálculos intensivos. La inclusión en el lenguaje de la aritmética de números complejos amplió la gama de aplicaciones para las cuales el lenguaje se adapta especialmente; muchas técnicas de compilación de lenguajes se han implementado para mejorar la calidad del código generado por los compiladores de Fortran. Un sencillo ejemplo Principales características El lenguaje fue diseñado teniendo en cuenta que los programas serían escritos en tarjetas perforadas de 80 columnas. Así por ejemplo, las líneas debían ser numeradas y la única 10
  • 11. alteración posible en el orden de ejecución era producida con la instrucción goto. Estas características han evolucionado de versión en versión. Las actuales contienen subprogramas, recursión y una variada gama de estructuras de control. Tipos de datos soportados: • Numéricos (enteros, reales, complejos y doble precisión). • Booleanos (logical) • Arreglos • Cadenas de caracteres • Archivos FORTRAN 90 ya es estructurado, y no requiere sentencias GOTO. Sólo admite dos ámbitos para las variables: local y global. Ejemplo más extenso: Variables y constantes • FORTRAN no es sensible a mayúsculas y minúsculas. Los nombre de variables tienen de 6 a 31 caracteres máximo y deben comenzar por una letra. Los blancos son significativos. • Declaración explicita de variables. • Enteras (I-N), el resto reales. (se modifica con IMPLICIT). 11
  • 12. Punteros: en los primeros FORTRAN no hay punteros y todas las variables se almacenan en memoria estática. En FORTRAN 90 se declaran INTEGER, POINTER::P. • Para memoria dinámica ALLOCATE y DEALLOCATE Tipos de datos • Arrays, pueden tener hasta 7 dimensiones y se guardan por colummnas.  REAL M(20),N(-5:5)  DIMENSION I(20,20) (tipo por nomenclatura implícita) • Cadenas de caracteres, el primer carácter es el 1, el operador // permite concatenar cadenas.  CHARACTER S*10, T*25 • Almacenamiento de datos. Se usa COMMON para datos compartidos y EQUIVALENCE cuando almacenamos una variable con dos posibles tipos en la misma posición de memoria (como union en C). Se usa DATA para inicializar datos estáticos.  DATA X/1.0/,Y/3.1416/,K/20/ • Tipos definidos por el usuario, con TYPE <nombre>... END TYPE <nombre> Control de secuencia EL conjunto de estructuras de control es limitado: • Expresiones, prioridad de operadores • Enunciados • Asignación, cuando se hace entre cadenas hay ajuste de tamaño con blancos o truncamiento. • Condicional. Permite IF ELSE IF... Para selección múltiple SELECT CASE CASE.....CASE DEFAULT.... END SELECT • Iteración. DO....END DO • Nulo, se usa solo para la etiqueta. CONTINUE. • Control de subprogramas. CALL invoca al subprograma y RETURN devuelve un valor al programa llamante. • Construcciones propensas a error: GOTO. Entrada y salida • Tipos de archivos:  Secuenciales  De acceso directo • Comandos: READ, WRITE, PRINT, OPEN , CLASE, INQUIRE (propiedades o estado del archivo) REWIND y ENDFILE (para ubicar el puntero del fichero). • Para el tratamiento de excepciones en las sentencias READ/WRITE se puede introducir la posición de la rutina de dicho tratamiento (ERR=90). Subprogramas • Hay tres tipos de subprogramas: 12
  • 13.  Function, devuelven un solo valor de tipo numérico, lógico o cadena de caracteres.  Subroutine, devuelve valores a través de variables no locales COMMON.  Función de enunciado, permite calcular una sola expresión aritmética o lógica. • FN(X,Y)=SIN(X)**2-COS(Y)**2 • Gestión de almacenamiento.  Las variables son locales o globales (COMMON)  Recursividad: RECURSIVE FUNCTION FACTORIAL(X)  Parámetros de subprograma. Paso por referencia. Abstracción y encapsulación. Evaluación del lenguaje • La abstracción es posible mediante los subprogramas y el uso de variables COMMON, aunque su uso es propenso a errores. • FORTRAN sigue siendo utilizado en el ámbito científico y es muy eficiente realizando cálculos.  La estructura del programa suele ser dificil de entender.  En FORTRAN 90 se incluye la recursividad y la memoria dinámica.  Las etiquetas de las sentencias ya no son necesarias, ni el GOTO, pues se ha transformado en un lenguaje estructurado.  El aspecto de los programas sigue siendo de procesamiento por lotes Ventajas e inconvenientes de su sintaxis Lo que fue la primera tentativa de proyección de un lenguaje de programación de alto nivel, tiene una sintaxis considerada arcaica por muchos programadores que aprenden lenguajes más modernos. Es difícil escribir un bucle "for", y errores en la escritura de sólo un carácter pueden llevar a errores durante el tiempo de ejecución en vez de errores de compilación, en el caso de que no se usen las construcciones más frecuentes. Algunas de las versiones anteriores no poseían facilidades que son consideradas como útiles en las máquinas modernas, como la asignación dinámica de memoria. Se debe tener en cuenta que la sintaxis de Fortran fue afinada para el uso en trabajos numéricos y científicos. Muchas de sus deficiencias han sido abordadas en revisiones recientes del lenguaje. Por ejemplo, Fortran 95 posee comandos mucho más breves para efectuar operaciones matemáticas con matrices y dispone de tipos. Esto no sólo mejora mucho la lectura del programa sino que además aporta información útil al compilador. Por estas razones Fortran no es muy usado fuera de los campos de la informática y el análisis numérico, pero permanece como el lenguaje a escoger para desempeñar tareas de computación numérica de alto rendimiento. 13
  • 14. 5.4.- COMPILADOR OPTIMIZADOR DE MODULA-2 Modula-2 es una computadora lenguaje de programación inventado cerca Niklaus Wirth en ETH alrededor 1978, como sucesor a Modula, una lengua intermedia de él. Modula-2 fue puesto en ejecución en el an o 80 para Lilith computadora, comercializada en 1982 por la compañía de lanzamiento DISER (Dato-Imagen- Sonido-Procesador-y el Emisor-Receptor-Sistema) como MC1 y MC2. DISER vendió 120 unidades por todo el mundo. La lengua Modula-2 se basa libremente sobre Lenguaje de programación del Mesa, de Xerox, ese Wirth vio durante su 1976 año sabbatical en Xerox PARC. Descripción Modula-2 es fines generales lengua procesal, suficientemente flexible hacer la programación de sistemas, pero con un uso mucho más amplio. Particularmente, fue diseñado para apoyar la abstracción separada de la compilación y de los datos de una manera directa. Mucho del sintaxis se basa en la lengua anterior y mejor- sabida de Wirth, PASCAL. Modula-2 fue diseñado para ser ampliamente similar al PASCAL, con algunos elementos quitados y la adición importante del módulo concepto, y ayuda directa de la lengua para multiprogramación. El Modula-2 módulo puede ser utilizado encapsulan un sistema de subprogramas y de estructuras de datos relacionados, y restringen su visibilidad de otras porciones del programa. El diseño del módulo puso la característica de la abstracción en ejecución de los datos de Modula-2 de una manera muy limpia. Los programas Modula-2 se componen de módulos, que se compone de dos porciones: a módulo de la definición, la porción del interfaz, que contiene solamente esas partes del subsistema que sean exportado (visible a otros módulos), y módulo de la puesta en práctica, que contiene el código de trabajo que es interno al módulo. La lengua tiene control terminante del alcance. Particularmente el alcance de un módulo se puede considerar como pared impenetrable: A excepción de identificadores estándares no hay objeto del mundo externo visible dentro de un módulo a menos que esté importado explícitamente; no hay objeto interno del módulo visible del exterior a menos que esté exportado explícitamente. Dialectos Hay dos dialectos importantes de Modula-2. El primer es PIM, nombrado después del libro “que programa en Modula-2” cerca Niklaus Wirth. Había tres ediciones importantes de PIM, las ediciones del segundo, el tercer (corregido) y el cuarto, cada las variantes leves que describían de la lengua. El segundo dialecto principal 14
  • 15. es ISO, del esfuerzo de la estandardización por International Organization for Standardization. • PIM2 (1983) o Explícito requerida EXPORTACIÓN cláusula en módulos de la definición. • PIM3 (1985) o Quitó EXPORTACIÓN cláusula de los módulos de la definición por la observación que todo dentro de un módulo de la definición define el interfaz a ese módulo, por lo tanto EXPORTACIÓN la cláusula era redundante. • PIM4 o El comportamiento del MOD y REM especificaron a los operadores cuando sus operandos eran negativos. • ISO o La ISO Modula-2 resolvió la mayor parte de las ambigüedades en PIM Modula-2. Agregó los tipos de datos COMPLEJO y LONGCOMPLEX, excepciones, terminación del módulo (FINALMENTE cláusula) y una biblioteca completa de la entrada- salida del estándar. Hay diferencias y clarificaciones de menor importancia numerosas. Elementos de lengua Palabras reservadas PIM3 contuvo las 40 palabras reservadas siguientes: Y ELSIF LAZO REPITA EL ARSENAL EXTREMO MOD VUELVA COMIENZAN SALIDA MÓDULO FIJE CERCA EXPORTACIÓN NO ENTONCES CASO PARA DE A CONST DE O MECANOGRAFÍE LA DEFINICIÓN SI INDICADOR HASTA EL DIV EL PROCEDIMIENTO VAR DE LA PUESTA EN PRÁCTICA IMPORTACIÓN CALIFICADO MIENTRAS QUE EN EXPEDIENTE CON Idiomas relacionadas Aunque Modula-2 es la variante en gran medida el más conocida y más ampliamente utilizada, hay varias idiomas que se relacionan de un modo u otro: el la original, y absolutamente diferente, Modula (previsto para la puesta en práctica de sistemas), Modula-2+, Modula-2* (extensión paralela), ISO Modula-2 OO y extensiones genéricas, Modula-3 (por la DEC y Olivetti; agregando la colección, objetos, y generics de la basura), Oberon (diseño otros, más último, de Wirth), Oberon-2 (Oberon con extensiones de OO), Modula-2 objetivo (un híbrido de 15
  • 16. Modula-2 y Palique) y un número de otros. Éstos no se deben mirar como “versiones mejores” o “reemplazos” para Modula-2; la mayoría son diversas idiomas con diversos propósitos, y con fuerzas y debilidades sus el propios. Modula-2 fue desarrollado como la lengua del sistema para Lilith sitio de trabajo, y formado el antepasado para Oberon lengua y proyecto del sitio de trabajo (Sistema Oberon) convertido en ETH Zurich. Muchos lenguajes de programación actuales han adoptado características de Modula-2. MODULA-GM Electrónica de Delco, entonces un subsidiario del GM Hughes Electrónica, desarrollada una versión de Modula-2 para los sistemas de control encajados que comienzan en 1985. Delco lo nombró Modula-GM. Era el primer idioma de alto nivel usado para substituir el código de la terminología de la informática para los sistemas encajados en las unidades de control de motor de Delco (los ECUs). Esto era significativo porque Delco producía sobre los 28.000 ECUs por día en 1988 para el GM; éste era entonces el productor más grande del mundo de los ECUs[1]. El primer uso experimental del Modula-GM en un regulador encajado estaba en los 1993 Gen-4 el ECU usados por CARRO (Automóvil del campeonato que compite con a equipos) y IRL (Indy que compite con a liga) equipos[2]. El primer uso de la producción del Modula-GM era su uso en carros del GM comenzando con los 1990 años modelo VCM (módulo de control del vehículo) usados para manejar GM Powertrain Vortec motores. El Modula-GM también fue utilizado en todos los ECUs para los GM Familia de 90° Buick V6 3800 la serie II utilizó en el año modelo 1997-2005 Avenida de parque de Buick. Los recopiladores Modula-GM y las herramientas de gerencia asociadas del software eran sourced por Delco de Intermetrics. Modula-2 fue seleccionado como la base para el idioma de alto nivel de Delco debido a sus numerosos fuerzas sobre otras opciones alternativas de la lengua en 1986. Después de Delco la electrónica fue hecha girar apagado del GM (con otras divisiones componentes) para formar Delphi en 1997, el sourcing global requirió que una lengua de alto nivel no propietaria del software esté utilizada. El ECU encajó el software ahora desarrollado en los compiladores C del anuncio del uso de Delphi. Recopiladores continuados • Prueba patrón Modula-2 para Amiga • Borland Turbo Modula-2 para CP/M (abandonware) • Borland Turbo Modula-2 para el MS-DOS (vendido a Jensen y a los socios, se convirtió TopSpeed Modula-2) • Logitech tenía una serie de los recopiladores Modula-2 • M2S para Amiga • Arroyo pedregoso Modula-2 16
  • 17. TDI Modula-2 para Amiga y Atari ST • Modula Corporation tenía una serie de los recopiladores Modula-2 para MS- DOS (M2M-PC), Apple II y Macintosh 5.5.- COMPILADORES PARA BASIC El lenguaje BASIC fue creado en 1964 por los norteamericanos John Kemeny y Thomas Kurtz, en el Dartmouth College. Su intención era diseñar un lenguaje adecuado para principiantes. No tenía, por tanto, pretensiones de gran potencia, pero era fácil de aprender y permitía abordar pronto pequeños proyectos. BASIC son las iniciales de Beginner's All-purpose Symbolic Instruction Code. El BASIC tuvo una gran expansión en los años 80, cuando se impuso como lenguaje estándar para los microordenadores domésticos de ocho bits. Se usó ampliamente en la enseñanza y también en la programación profesional. Sin embargo, era un lenguaje poco estructurado y recibió muchas críticas por promover malos hábitos de programación. Pero en lugar de desaparecer, fueron surgiendo versiones nuevas con características más avanzadas. Aún hoy, Visual Basic y su sucesor, Visual Basic .NET (aunque son variantes ya muy alejadas del original) son lenguajes de programación muy usados en entorno Windows. • ACE es un compilador de BASIC para ordenadores Amiga que produce código fuente ensamblador 68000. Se puede bajar de aminet. • Alvyn es un intérprete BASIC multiplataforma compatible con AMOS Professional. La página oficial indica un estado de desarrollo del 40%. Actualmente sólo se puede descargar una versión de desarrollo para Linux. • AMOS y STOS fueron exitosas versiones comerciales de BASIC para la creación de juegos en los ordenadores Amiga y Atari ST. Clickteam (uno de cuyos fundadores es el autor de AMOS y STOS) distribuye ahora libremente el código fuente en ensamblador 68000. También permite la distribución de los disquetes originales de AMOS en forma de ficheros, principalmente dirigidos a la emulación. • LithiumBasic es un lenguaje tipo Basic para Windows 95/98 ideal para novatos por su sencillez. Incluye un entorno integrado bastante completo. El sitio oficial desapareció pero se puede bajar de la página de THE BASICs PAGE anteriormente enlazada. • MBasic (de Franck Charlet) es un intérprete para la consola de Windows hecho a partir de MINI-BASIC (de Sylvain Bizoirre), el cual, a su vez, es una adaptación de Palo Alto 8080 TINY BASIC (de Li-Chen Wang). Se distribuye también el código fuente en ensamblador. • MediaBASIC es un entorno de programación para Windows similar a Visual Basic. Su desarrollo se detuvo en estado alfa y la página oficial hace tiempo que no funciona. • MINI-BASIC, de Sylvain Bizoirre, es un intérprete muy simple para la consola de Windows basado en Palo Alto 8080 TINY BASIC (de Li-Chen Wang). Se suministra el ejecutable y el código en ensamblador para MASM32. • Mole Basic (de Remco Schellekens) es un pequeño intérprete Basic basado en flex y yacc para Linux y otros sistemas. Se distribuye también el código fuente. 17
  • 18. Mono es una plataforma de desarrollo libre, patrocinada por Novell, compatible con .NET de Microsoft. Incluye soporte para bastantes lenguajes de programación, Visual Basic .NET entre ellos. Funciona en Windows, Mac OS X, Solaris y distintas versiones de Linux. • Profan es un lenguaje para Windows con sintaxis tipo Basic, pero con características de otros lenguajes, como Pascal y dBase III. Creo que la versión actual es de pago y las antiguas son gratis. Aunque las versiones originales están en alemán, hay una versión (muy antigua) completamente traducida al inglés y parches para traducir otras posteriores. • uBASIC, de Adam Dunkels, es un intérprete de BASIC muy simple y pequeño creado para servir como lenguaje de script sencillo para aplicaciones con limitaciones importantes de memoria. Se distribuye el código fuente en C. • Visual Studio Express es una versión limitada y gratuita del más importante entorno de programación de Microsoft, para la plataforma .NET. Incluye soporte para bastantes lenguajes de programación, Visual Basic .NET entre ellos. Para Windows. • Visualwindows es un entorno de programación para Windows parecido a Visual Basic. Debido a la imposibilidad de seguir manteniéndolo y dando soporte a los usuarios, el autor decidió distribuirlo gratuitamente. La página oficial dejó de funcionar pero se puede bajar una copia (y leer la reseña) del sitio THE BASICs PAGE. • VPBasicFREE (de Ricardo Ponce) es un intérprete y compilador para Windows dirigido a principiantes. Incluye entorno integrado y documentación en inglés y español. Existe una versión superior de pago. • wxBasic (de David Cuny) es un intérprete de Basic estructurado para Linux (usando controles GTK) y Windows (usando controles nativos), escrito en C y la biblioteca wxWindows. Su sintaxis es parecida a QBasic. Se distribuyen ejecutables y código fuente. • X11-Basic es un intérprete Basic con sintaxis similar al GFA-Basic de Atari-ST y gráficos para el sistema X Window. Funciona en varios tipos de Unix con X Window (incluyendo Linux, MacOS X y Windows con Cygwin). También hay una versión Windows pero está incompleta (no funcionan los gráficos). • XBasic es un moderno Basic estructurado con un completo entorno de programación. Hay versiones para Windows y Linux y está disponible el código fuente. • XBLite, de David Szafranski, es un compilador para Windows basado en XBasic. Incluye bastantes mejoras, como más velocidad y controles nativos. Se distribuye con licencias GPL y LGPL. • XST 2 es un lenguaje para Windows orientado a videojuegos que incluye un entorno de desarrollo, un intérprete rápido (también produce ejecutables) y un traductor a código C (compilable con Visual C 6). • Yabasic (de Marc-Oliver Ihm) es un intérprete tradicional de BASIC con algunas mejoras, como subrutinas y bibliotecas. También contiene algunas facilidades gráficas simples. Funciona en Unix y Windows. Hay también una versión para la PlayStation 2 que viene en un disco con la videoconsola. Entre otros… Los ocho principios que rigeron el diseño de BASIC fueron: 1. Ser fácil de usar para los principiantes. 18
  • 19. 2. Ser un lenguaje de propósito general (no orientado). 3. Permitir a los expertos añadir características avanzadas, conservando simple el lenguaje para los principiantes. 4. Ser interactivo. 5. Proveer mensajes de error claros y amigables. 6. Responder rápido en los programas pequeños. 7. No requerir un conocimiento del hardware de la computadora. 8. Proteger al usuario del sistema operativo. El lenguaje fue en parte basado en FORTRAN II y parte en Algol 60, con adiciones para hacerlo apropiado en sistemas de tiempo compartido y con elementos que facilitaran la operación aritmética de matrices. BASIC fue implementado por primera vez para la mainframe GE-265, máquina que soportaba múltiples terminales. Contrario a la creencia popular, BASIC inicialmente no era un lenguaje interpretado sino compilado. Casi inmediatamente después de su lanzamiento, los profesionales de computación comenzaron a alegar que BASIC era muy lento y simple. Tal argumento, hasta no hace mucho, fue un tema recurrente en la industria de las computadoras. Aun así, BASIC se extendió hacia muchas máquinas y plataformas, y se popularizó moderadamente en las minicomputadoras como las de la serie DEC PDP y la Data General Nova. En estos casos, el lenguaje era implementado como intérprete, en vez de un compilador, o alternativamente, en ambas formas de funcionamiento. Madurez En este período se crearon versiones de BASIC nuevas y más poderosas. Microsoft vendió varias versiones de BASIC para MS-DOS/PC-DOS, incluyendo BASICA, GW-BASIC (una versión compatible con BASICA que no necesitaba la ROM de IBM), y Quick BASIC. El fabricante de Turbo Pascal, Borland, publicó Turbo BASIC 1.0 en 1985 (versiones sucesoras aún se venden bajo el nombre de PowerBASIC por otra compañía). Aparecieron varias extensiones de BASIC para computadores caseros, típicamente con capacidad para gráficos, sonido, y comandos DOS, así como facilidades para Programación estructurada. Hubo lenguajes que usaron la sintaxis de BASIC como base para otros sistemas totalmente diferentes, por ejemplo GRASS. Sin embargo a finales de la década de 1980 las computadoras nuevas eran mucho más complejas, e incluían características (como la Interfaz gráfica de usuario) que hacían a BASIC menos apropiado para programarlas. Al mismo tiempo las computadoras progresaban de ser interés para aficionados a herramientas usadas principalmente para ejecutar aplicaciones escritas por otros, y la programación en sí se fue haciendo menos importante para una creciente mayoría de usuarios. 19
  • 20. BASIC comenzó a desvanecerse, aunque numerosas versiones aún estaban disponibles. La suerte de BASIC dio un giro nuevamente con la introducción de Visual Basic de Microsoft. Si bien este lenguaje utiliza prácticamente todas las palabras clave (sentencias, estructuras de control y funciones intrínsecas) y forma de manejo y tipo de datos que versiones BASIC anteriores (DOS); VB es abismalmente más potente y evolucionado; y se ha convertido en uno de los lenguajes más utilizados en la plataforma Windows; se estima que entre el 70 y el 80% del total de aplicaciones comerciales son programadas en VB. A partir de 2002, y con la introducción de la plataforma .NET Framework de Microsoft, VB comienza a utilizar el paradigma "orientado a objetos", aumentando la potencia del lenguaje y haciéndolo multiplataforma. Visual Basic for Applications (VBA) fue añadido a Microsoft Excel 5.0 en 1993 y al resto de la línea de productos de Microsoft Office en 1997. Windows 98 incluyó un intérprete de VBScript. La versión más reciente de Visual Basic es llamada VB.NET. Por otra parte, también existe la variante OpenOffice.org Basic menos poderosa pero similar a VBA de Microsoft. El Lenguaje Sintaxis La sintaxis mínima de BASIC sólo necesita los comandos LET, INPUT, PRINT, IF y GOTO. Un intérprete que ejecuta programas con esta sintaxis mínima no necesita una pila. Algunas de las primeras implementaciones eran así de simples. Si se le agrega una pila, se pueden agregar también ciclos FOR anidados y el comando GOSUB. Un intérprete de BASIC con estas características necesita que el código tenga números de línea. Los números de línea fueron un aspecto muy distintivo del BASIC clásico. Sin embargo, el uso de números de línea tiene la desventaja de requerir que el programador estime cuántas líneas ocupará la parte del programa que escribe. Este requerimiento se cumple generalmente incrementando los números de línea en un intervalo regular, como 10, pero esto lleva a problemas a la hora que el código después agregado exceda el espacio disponible entre las líneas originales. Para aliviar este problema de los primeros intérpretes de BASIC, los usuarios expertos pronto escribieron sus propios programas utilitarios para renumerar sus programas, después del ingreso inicial. Más tarde aparecieron intérpretes de BASIC que incluían un comando específico RENUMBER, el que permitía renumerar rápidamente (y las veces que se quisiera) todo el código nuevamente, con cualquier intervalo entre líneas indicado y a partir de un número entero dado; eliminando así el principal problema de la numeración de líneas obligatoria. En los dialectos modernos de BASIC MIUN ya no es necesario incluir números de línea (aunque son permitidos), y la mayoría (o todos) han añadido control de flujo estructurado y los constructores de declaración de datos similares a los de otros lenguajes, tales como C y Pascal: 20
  • 21. do • loop • while • until • exit • on... goto • gosub • select ... case Variantes recientes como Visual Basic han introducido algunas características orientadas a objetos, y hasta herencia en la última versión. La administración de memoria es más fácil que con muchos otros lenguajes de programación procedurales por el uso de un Recolector de basura (y a costas de la velocidad de ejecución). Procedimientos y Control de Flujo BASIC no tiene una biblioteca externa estándar como otros lenguajes como C. En cambio, el intérprete (o compilador) contiene una biblioteca incorporada de procedimientos intrínsecos. Estos procedimientos incluyen la mayoría de las herramientas que un programador necesita para aprender a programar y escribir aplicaciones sencillas, así como funciones para realizar cálculos matemáticos, manejar cadenas, entrada desde la consola, gráficos y manipulación de archivos. Viejos dialectos de BASIC no permitían a los programadores escribir sus propios procedimientos. Los programadores en cambio debían escribir sus programas con un gran número de enunciados GOTO para hacer las derivaciones de flujo y retorno del programa. Esto podía producir un código fuente muy confuso (la mayoría de las veces era así), comúnmente conocido como Código espagueti; el cual era sumamente difícil de mantener, mucho menos por programadores ajenos al desarrollo del software. Con la inclusión posterior de enunciados GOSUB (Go-Subroutine) se ramificaba el programa a especies de subrutinas, sin parámetros o variables locales. Ellas proveen una forma de implementar una suerte de procedimientos (realmente no lo son, sencillamente es un "salto y retorno") y estructurar más el programa, evitando bastante la utilización de la dañina sentencia GOTO. La mayoría de las versiones de BASIC más modernas, como Microsoft QuickBASIC (1985-1988) y BASIC PDS (Profesional Developmen System - 1990) añadieron soporte completo para subrutinas, funciones y programación estructurada. Esta es otra área donde BASIC difiere de muchos lenguajes de programación. Sin embargo la primitiva GOSUB se ha mantenido hasta las versiones actuales, por razones compatibilidad. 21
  • 22. BASIC, como Pascal, hace una distinción entre un procedimiento que no devuelve un valor (llamado subrutina) y un procedimiento que lo hace (llamado función). Muchos otros lenguajes (como C) no hacen esa distinción y consideran todo como una función (algunas que devuelven un valor “void” [vacío]). Mientras que las funciones que devuelven un valor son una adición relativamente reciente a los dialectos de BASIC, muchos de los primeros sistemas soportaban la definición de funciones matemáticas en línea, con DEF FN (“DEFine FunctioN” [DEFinir FuncióN]). El Dartmouth BASIC original también soportaba funciones al estilo de Algol, así como subrutinas desde sus primeros tiempos. Tipos de Datos BASIC es reconocido por tener muy buenas funciones para manipular cadenas de caracteres. Los primeros dialectos ya tenían un juego de funciones fundamentales (LEFT$, MID$, RIGHT$) para extraer y/o reemplazar subcadenas cadenas fácilmente. Como las cadenas son utilizadas en aplicaciones diarias, esta era una ventaja considerable sobre otros lenguajes al momento de su introducción. El Dartmouth BASIC original soportaba únicamente datos de tipo numérico y cadenas. No había un tipo entero. Todas las variables numéricas eran de punto flotante. Las cadenas eran de tamaño dinámico. Soportaba arreglos de ambos, números y cadenas, en una o dos dimensiones. Cada dialecto moderno de BASIC posee al menos los tipos de datos numérico y string (cadena). Estos tipos de datos se pueden distinguir usando un posfijo: los identificadores de cadenas terminan con $ (signo pesos, ejemplo la variable NOMBRE$), mientras que los numéricos sencillamente no llevan posfijo; a menos que se requiera indicar y forzar explícitamente qué tipo de numérico es, por ejemplo A% es entero, A! es real simple precisión y A# es real doble precisión. En BASIC las variables no necesitan forzosamente ser declaradas antes de usarse, excepto los arreglos de más de 10 elementos; aunque versiones BASIC relativamente modernas poseen la opción (considerada buena práctica de programación) para obligar al programador a declarar toda variable antes de su uso (una directiva como OPTION EXPLICIT). La declaración de variables en BASIC se hace usando la palabra clave DIM. Muchos dialectos también soportan tipos numéricos adicionales, como enteros de 16 y 32 bits (simple y long, respectivamente), además de sus números de punto flotante. Adicionalmente algunos permiten la utilización de tipos de datos definidos por el usuario, similar a los "records" de Pascal, o las "structs" de C. Versiones modernas de BASIC (como VBA) soportan una gran variedad de tipos de datos primitivos (o intrínsecos), además de los definidos por el usuario. 22
  • 23. La mayoría de los dialectos de BASIC soporta arreglos en todos sus tipos de datos; es común también el soporte para arreglos mulidimensionales. Ejemplos: DIM MatrizDeEnteros(100,100) AS INTEGER DIM VectorDeEnteros%(30) DIM ListaDeNombres(50) AS STRING DIM ListaDeCiudades$(50) Dependiendo del dialecto de BASIC y del uso del enunciado OPTION BASE, el primer índice de los arreglos que se declaren será 1, por defecto es cero. En los ejemplos anteriores, si no se declara previamente "OPTION BASE 1", el primero es un arreglo en dos dimensiones de enteros 16 bits, con índices que van desde 0 hasta 100 (matriz de 101 x 101 elementos); en tanto que el segundo es un arreglo de enteros en una sola dimensión, de 0 a 30 (vector de 31 elementos). Observar que las dos formas de declaración de enteros son equivalentes, explicitándolo o con el uso del posfijo %. Análogamente para cadenas o string de caracteres, que en este caso además son de longitud variable (dinámicas, por defecto). Disponibilidad y variantes del lenguaje BASIC está disponible para casi todas las plataformas y sistemas operativos existentes. Una implementación gratuita que cumple con estándares y es multiplataforma es Bywater BASIC (bwBASIC). El intérprete está escrito en C y viene bajo la licencia GNU. Está diseñado para interfaz de texto o consola (no gráfica), no incluye soporte para crear interfaces gráficas de usuario (GUI's, Graphical User Interface). Hay un BASIC gratuito que si incluye soporte para GUI, es similar a Visual Basic y se ejecuta en Windows y GNU/Linux, es Phoenix Object BASIC. Las versiones de intérpretes/compiladores más conocidos son la línea de productos Quick BASIC y QBASIC, éste último es sólo intérprete, ambos son de Microsoft. En la actualidad lo es el moderno Visual BASIC, que Microsoft ha tratado de mantener al menos mínimamente compatible con incluso las primeras versiones de sus BASIC (en realidad es escasamente compatible). Otras versiones incluyen PowerBASIC de PowerBASIC, así como TrueBASIC de TrueBASIC, que cumple con los últimos estándares oficiales de BASIC. (True BASIC Inc. fue fundada por los creadores originales de Dartmouth BASIC.) REALbasic es una variante disponible para Mac OS Classic, Mac OS X, Microsoft Windows y GNU/Linux. Una versión de un dialecto simple de BASIC para la parrot 23
  • 24. virtual machine, muestra como se implementa un intérprete de BASIC en un lenguaje similar al ensamblador. SmallBASIC es un dialecto que ejecuta en muchas plataformas (Win32, DOS, GNU/Linux y PalmOS) y viene bajo la licencia GNU (GPL). FreeBASIC es un compilador libre, compatible en sintaxis con QuickBASIC. Ejemplos de código fuente Ejemplo 1: Simple Saludo PRINT "Hola mundo" Ejemplo 2: BASIC original no estructurado (Applesoft BASIC) 10 INPUT "Cuál es su nombre:"; NN$ 20 PRINT "Bienvenido al 'asterisquero' ";NN$ 25 PRINT 30 INPUT "con cuántos astericos inicia [Cero sale]:"; N 40 IF N<=0 THEN GOTO 200 50 AS$="" 60 FOR I=1 TO N 70 AS$=AS$+"*" 80 NEXT I 90 PRINT "AQUI ESTAN:"; AS$ 100 INPUT "Desea más asteriscos:";SN$ 110 IF SN$="" THEN GOTO 100 120 IF SN$<>"S" AND SN$<>"s" THEN GOTO 200 130 INPUT "CUANTAS VECES DESEA REPETIRLOS [Cero sale]:"; VECES 140 IF VECES<=0 THEN GOTO 200 150 FOR I=1 TO VECES 160 PRINT AS$; 170 NEXT I 180 PRINT 185 REM A repetir todo el ciclo (comentario) 190 GOTO 25 200 END BIBLIOGRFIA • K. N. Rey, Modula-2, un texto comprensivo y claramente escrito, continuamente en la impresión por ahora cerca de dos décadas, ISBN 0-669-11091-4 • Richard J. Sutcliffe, “Modula-2: Abstracciones para los datos y las estructuras de programación, “(con Modula-2 ISO-Estándar) edición 2004-2005 24