2011-10-23 10 views
5

He oído que las expresiones S se pueden representar como árboles; por ejemplo (f 1 (g 2) 3) como¿Hay un "Editor de estructura de árbol" para Lisp?

 . 
. . . . 
f 1 .  3   [first level] 
     g 2    [second level] 

¿Hay un editor (preferiblemente libre) para la edición de este tipo de estructura directamente? Esto haría

  1. Evitar "todos esos paréntesis"
  2. Exhibit la elegancia He estado comprensión de Lisp.

Respuesta

2

Por lo que yo sé (y como confirma el artículo de Wikipedia), structure editing se utilizó en Interlisp-D. No estoy al tanto de ningún editor de estructura para Common Lisp ampliamente utilizado en la actualidad, pero tal vez haya algo que desconozco. Hay un example en el sitio de Pascal J. Bourguignon con el que querrá jugar. (No lo eché un vistazo más de cerca) Lo hice, sin embargo uso algo similar para XML en Oxygen hace algún tiempo.

(Además, no creo que la razón Interlisp utilizado este tenía nada que ver con la eliminación de los paréntesis, y puede haber problemas con los comentarios, por ejemplo.)

+0

supongo programa de Pascal podría ser útil, si puedo encontrar la manera de integrarlo en emacs. Aunque no es exactamente el editor de árbol que estaba buscando, creo que debería mantener la pregunta abierta por ahora. Confieso que realmente no entiendo Interlisp incluso después de buscar en Google; ¿era un sistema operativo para Lisp Machines?(Desafortunadamente, eso probablemente no ayude mucho! :) – scarlet

+0

Sí, Interlisp se ejecutaba en Lisp Machines y era uno de los sistemas en uso antes de Common Lisp. Common Lisp, sin embargo, estaba más fuertemente influenciado por Maclisp, y el uso de editores de estructuras no se hizo efectivo. Incluso si esto no "ayuda mucho", es bueno saber que la edición de estructuras no es una idea nueva, pero ya estaba en uso hace algunas décadas. (Recuerdo discusiones sobre esto en cll, por lo que es posible que desee buscar este tema en grupos de google.) – danlei

+0

Si realmente desea escribir un modo Emacs para algo como esto, tal vez también podría considerar un modo que simplemente cambie el camino el código se representa y edita, en lugar de cambiar sexps directamente, como lo hace el código de Pascal. (Ese es el enfoque de las herramientas XML, como Oxgen). Luego, podrías evitar posibles problemas con los comentarios dentro del código, y sería más fácil intercambiar código con otros, que no usan la edición de estructuras. – danlei

5

S-expresiones representan un árbol , no de la otra manera. Su ejemplo, formateado con saltos de línea:

(f 1 
    (g 2) 
    3) 

Representa la siguiente contras árbol:

+---+---+ +---+---+ +---+---+ +---+---+ 
--->| f | ----->| 1 | ----->| ¦ | ----->| 3 |NIL| 
    +---+---+ +---+---+ + ¦ +---+ +---+---+ 
           v 
          +---+---+ +---+---+ 
          | g | ----->| 2 |NIL| 
          +---+---+ +---+---+ 

Ésta es, al mismo tiempo, el árbol de sintaxis abstracta real del programa — algo que Compiladores para otras familias de lenguas tiene que construir a partir de reglas complejas.

Para editar, los paréntesis son todo lo que usted y su editor necesitan para operar a nivel de árbol. En Emacs es paredit-mode, pero supongo que otros editores tienen utilidades o complementos similares.

+0

Obtengo cómo los paréntesis son representativos de la estructura del árbol; Me preguntaba si había un editor que mostrara el árbol como un árbol de diagrama para que el usuario lo editara. (No estoy seguro de que los punteros sean fáciles de usar para tal cosa, pero creo que podría funcionar.) – scarlet

2

El modo ParEdit para emacs es esencialmente un editor estructurado.

Además, en their paper, Gomolka & Humm mencionar un prototipo de investigación que se extiende CUSP para Eclipse, pero no sé de una aplicación descargable.

+0

Eso es exasperante. Proporcione la descripción completa del editor de estructuras, incluidas las imágenes, las líneas de código, los resultados de la encuesta y, a continuación, no hay ninguna pista sobre dónde obtenerlo. (Para ser sincero, probablemente no cambiaría de emacs hoy en día, pero de todos modos.) Gracias por la actualización. – scarlet

2

Gingko as a Tree Structure editor for lisp

Estamos trabajando en que dejar write Lisp with Gingko (un editor de estructura de árbol general).

La conversión de árbol a fuente es trivial, por lo que realmente lo único que falta es más profundidad (Gingko actualmente está limitado a 3 niveles).

[Esto es todavía muy experimental, así que me encantaría retroalimentación & aportaciones de expertos Lisp.]

Cuestiones relacionadas