Asignatura: Entornos de programación

Entornos orientados a estructura

Características y ejemplos


Contenido

  1. Entornos basados en editores de estructura
    1. Editores de estructura
    2. Características de un entorno orientado a estructura
    3. Historia
    4. Ejemplos
    5. Lenguajes y entornos visuales
  2. El sintetizador de programas de Cornell
    1. Edición de la estructura
    2. Presentación como texto
    3. Microcomputador TERAK
    4. Movimiento del cursor
    5. Insertar elementos (frases)
    6. Insertar elementos (plantillas)
    7. Errores sintácticos (en frases)
    8. Transformación de la estructura
    9. Transformar mediante cortar y pegar
    10. Errores semánticos
    11. Edición de listas
    12. Plantilla de comentario
    13. Ejecución de programas
    14. Irregularidad texto / estructura (I)
    15. Irregularidad texto / estructura (II)
    16. Implementación. Representación de un nodo
    17. Implementación. Representación de un árbol
    18. Implementación. Presentación como texto
  3. Discusión
    1. Ventajas
    2. Inconvenientes

Entornos basados en editores de estructura

La idea de que un programa no es equivalente al texto de su código fuente, sino que lo esencial es la estructura lógica del cómputo que describe, ha llevado a la creación de los llamados entornos de programación orientados a estructura, en los que se manipula directamente la estructura lógica del código y no su representación como texto. La edición de la estructura se hace sobre elementos sintácticos tales como expresiones, sentencias o funciones y no sobre elementos textuales tales como caracteres, palabras o líneas.

Incluso hay casos en los que el código del programa no se representa como texto sino en forma gráfica, como ocurre en los llamados lenguajes visuales.

Editores de estructura

Los editores de estructura de código, llamados también editores sintácticos o más frecuentemente editores dirigidos por sintaxis (sintax-directed editors), permiten editar el código fuente manipulando directamente una representación interna de su estructura.

La representación habitual de la estructura del código es la de su árbol de sintaxis abstracta (AST). Ejemplo:

AST

Características de un entorno orientado a estructura

En general, los entornos orientados a estructura suelen ser específicos para un lenguaje de programación. Por lo tanto son un caso particular de entornos centrados en un lenguaje y comparten sus características generales, pero están concebidos de manera diferente:

Historia

La historia de estos entornos es relativamente reducida en el tiempo.

En la actualidad los lenguajes de marcado (tal como XML) pueden ser una buena forma de representar la estructura del código fuente con vistas a su manipulación. Existen editores y procesadores XML que podrían ser la base de nuevos entornos de programación orientados a estructura.

Ejemplos

Algunos ejemplos de entornos orientados a estructura son:

Como complemento se han llegado a desarrollar también generadores de entornos similares a los generadores de compiladores. En particular existe el Synthesizer Generator, capaz de generar entornos similares al sintetizador de Cornell para otros lenguajes de programación a partir de una descripción de la sintaxis y semántica del lenguaje mediante una gramática de atributos.

Lenguajes y entornos visuales

Este es un caso especial de entornos orientados a estructura. La representación externa del código fuente no es en forma de texto, sino gráfica. El editor permite ir construyendo el grafo que representa la estructura del código. El programa construido de esta manera se ejecuta directamente mediante un intérprete, o bien se exporta como texto en un lenguaje formal para ser compilado o interpretado externamente. Algunos ejemplos de este tipo de entornos son:

Tanto Prograph como Projector son lenguajes de flujo de datos. Un programa basado en flujo de datos se representa como un grafo en el que los nodos son operadores y los arcos son flujos de datos que conectan la salida de ciertos operadores con las entradas de otros. Una operación se ejecuta cuando hay datos presentes en todas las entradas requeridas. En ese momento se producen resultados que se transmiten por los arcos de salida, pudiendo entonces ejecutarse otras operaciones.

VFPE es un editor gráfico de la estructura (árbol sintáctico) de un programa funcional. El programa editado puede ejecutarse directamente o exportarse como código Haskell.

El sintetizador de programas de Cornell

Es el ejemplo más conocido y el más referenciado en la literatura. Sus características principales son:

Edición de la estructura

AST

Presentación como texto

Microcomputador TERAK

teclado TERAK

Movimiento del cursor

Insertar elementos (frases)

 

IF (condición)
   THEN sentencia
   ELSE sentencia

  k

IF (k )
   THEN sentencia
   ELSE sentencia

 > 0

IF (k > 0 )
   THEN sentencia
   ELSE sentencia

Insertar elementos (plantillas)

 

IF (k > 0)
   THEN sentencia
   ELSE sentencia

 ↓↓↓

IF (k > 0)
   THEN sentencia
   ELSE sentencia

 .p  return

IF (k > 0)
   THEN sentencia
   ELSE PUT SKIP LIST (lista-de-exp);

Errores sintácticos (en frases)

IF (k > 0)
   THEN sentencia
   ELSE PUT SKIP LIST (lista-de-exp);

 no positivo' 

 ERROR: comillas desajustadas

IF (k > 0)
   THEN sentencia
   ELSE PUT SKIP LIST (no positivo');

 ' 

IF (k > 0)
   THEN sentencia
   ELSE PUT SKIP LIST ('no positivo');

Transformación de la estructura

IF (k > 0)
   THEN PUT SKIP LIST ('positivo');
   ELSE PUT SKIP LIST ('no positivo');

en

DO WHILE (condición);
   IF (k > 0)
      THEN PUT SKIP LIST ('positivo');
      ELSE PUT SKIP LIST ('no positivo');
END;

Transformar mediante cortar y pegar

IF (k > 0)
  THEN PUT SKIP LIST ('positivo');
  ELSE PUT SKIP LIST ('no positivo');

 clip

sentencia

 .dw  return

DO WHILE (condición);
  {sentencia}
END;

   insert

DO WHILE (condición);
  IF (k > 0)
    THEN PUT SKIP LIST ('positivo');
    ELSE PUT SKIP LIST ('no positivo');
END;

Errores semánticos

DECLARE ( temp ) FIXED;
DECLARE ( m, n ) FLOAT;
temp = m;
m = n;
n = temp;

 borrar declaración de temp

DECLARE ( m, n ) FLOAT;
temp = m;
m = n;
n = temp;

 reinsertar temp en la otra declaración

DECLARE ( m, n, temp ) FLOAT;
temp = m;
m = n;
n = temp;

Edición de listas

{elemento}  0 o más elementos
x = 0;
y = 0;
               return
x = 0;
{sentencia}
y = 0;
               return
x = 0;
y = 0;
               return
x = 0;
y = 0;
{sentencia}

Plantilla de comentario

Plantilla:
/* comentario */
   {sentencia}
Equivale a una sentencia. Ejemplo:
/* Intercambiar m y n */
   temp = m;
   m = n;
   n = temp;
PUT SKIP LIST (m, n);

 ellipsis (folding)

/* Intercambiar m y n */
   ...
PUT SKIP LIST (m, n);

Ejecución de programas

Seguimiento sobre el texto del programa

Irregularidad texto / estructura (I)

nombre: PROCEDURE ( j );
   DECLARE ( j ) FIXED;
   DECLARE ( k ) FIXED;
   {sentencia}
END nombre;

Irregularidad texto / estructura (II)

Implementación. Representación de un nodo

Implementación. Representación de un árbol

Implementación. Presentación como texto

Discusión

Ventajas

Inconvenientes