Articulo de referencia

Editor de estructura

Un editor de estructura , también llamado editor estructurado o editor proyectivo , es cualquier editor de documentos que reconoce la estructura subyacente del documento . Los e...

Un editor de estructura , también llamado editor estructurado o editor proyectivo , es cualquier editor de documentos que reconoce la estructura subyacente del documento . Los editores de estructura se pueden usar para editar texto jerárquico o con formato , programas informáticos , diagramas , fórmulas químicas y cualquier otro tipo de contenido con una estructura clara y bien definida. En cambio, un editor de texto es cualquier editor de documentos que se usa para editar archivos de texto plano .

Por lo general, las ventajas de la edición de texto y estructura se combinan en la interfaz de usuario de una única herramienta híbrida. Por ejemplo, Emacs es fundamentalmente un editor de texto, pero admite la manipulación de palabras, oraciones y párrafos como estructuras inferidas del texto. En cambio, Dreamweaver es fundamentalmente un editor de estructura para documentos web con formato, pero también admite la visualización y manipulación de texto HTML sin formato. Del mismo modo, los editores moleculares suelen admitir tanto la entrada gráfica como la textual. La edición de estructura predomina cuando el contenido es gráfico y las representaciones textuales son complejas, por ejemplo, en sistemas CAD y PowerPoint . La edición de texto predomina cuando el contenido carece en gran medida de estructura, por ejemplo, en campos de texto de formularios web. Los sistemas de procesamiento de texto WYSIWYG , como Word , que aparentemente editan texto formateado directamente, son esencialmente editores de estructura para el texto con formato subyacente.

En lingüística , la sintaxis estudia la estructura de las expresiones gramaticales y, por lo tanto, un editor sintáctico es sinónimo de editor de estructura. Editor basado en lenguaje y editor sensible al lenguaje también son sinónimos. Las características de un editor basado en lenguaje pueden implementarse mediante código ad hoc o mediante una gramática formal . Por ejemplo, la sensibilidad al lenguaje en Emacs se implementa en la definición Lisp del modo de edición para el lenguaje en cuestión. En cambio, la sensibilidad al lenguaje en un editor XML se basa en un esquema DTD formal para dicho lenguaje.

Si bien los editores estructurados permiten visualizar y manipular el documento subyacente de forma estructurada, el formato de archivo en el que se almacena el documento en el disco puede estar o no muy estructurado, y puede ser o no abierto o estandarizado (por ejemplo, texto plano frente a documentos de Microsoft Word).

La edición de estructura se ha utilizado con frecuencia en los editores de código fuente , ya que el código fuente está estructurado naturalmente por la sintaxis del lenguaje de programación. Sin embargo, la mayoría de los editores de código fuente son, en realidad, editores de texto con funciones adicionales como resaltado de sintaxis y plegado de código , en lugar de editores de estructura. Los editores de algunos entornos de desarrollo integrados analizan el código fuente y generan un árbol de análisis, lo que permite el mismo análisis que un editor de estructura, pero la edición real del código fuente generalmente se realiza como texto sin formato.

Cada lenguaje de programación suele tener una sintaxis bien definida dada por una gramática libre de contexto , y, en consecuencia, los elementos estructurales significativos en el código fuente escrito en el lenguaje corresponden a las frases gramaticales del texto. Los primeros editores de código fuente dirigidos por la sintaxis incluían Interlisp-D (para la sintaxis limitada de Lisp ) y Emily [ 1 ] (para la rica sintaxis de PL/I ).

Un editor dirigido por la sintaxis puede tratar las reglas gramaticales como generativas (por ejemplo, ofreciendo al usuario plantillas que corresponden a uno o más pasos en una derivación formal del texto del programa) o proscriptivas (por ejemplo, impidiendo que una frase de una determinada parte de la oración se mueva a un contexto donde se requiere otra parte de la oración) o analíticas (por ejemplo, analizando ediciones textuales para crear una representación estructurada). Las características de edición de estructura en los editores de código fuente dificultan la escritura de programas con sintaxis inválida. Los editores sensibles al lenguaje pueden imponer la corrección sintáctica como un requisito absoluto (por ejemplo, como lo hizo Mentor [ 2 ] ), o pueden tolerar errores de sintaxis después de emitir una advertencia (por ejemplo, como lo hizo el Sintetizador de Programas de Cornell [ 3 ] ). Los editores estructurados estrictos a menudo dificultan la realización de ediciones que son fáciles de realizar con editores de texto plano, lo que es uno de los factores que contribuyen a la falta de adopción de la edición estructurada en algunos dominios, como la edición de código fuente.

Algunos editores dirigidos por la sintaxis supervisan el cumplimiento de las restricciones sensibles al contexto de un lenguaje, como la corrección de tipos . Estas restricciones estáticas-semánticas pueden especificarse imperativamente mediante acciones (p. ej., como en Gandalf [ 4 ] [ 5 ] [ 6 ] ), o declarativamente mediante una gramática de atributos (p. ej., como en Synthesizer Generator [ 7 ] [ 8 ] ), o mediante la unificación en un álgebra multisortada (p. ej., como en PSG [ 9 ] ), o un programa lógico (p. ej., como en Centaur [ 10 ] y Pan [ 11 ] ), y el cumplimiento es verificado por el mecanismo de edición subyacente. Los editores estructurados varían en el grado en que permiten a sus usuarios realizar ediciones que hacen que el documento sea sintáctica o semánticamente incorrecto.

Es común que un editor sensible al lenguaje represente un documento como un árbol de análisis sintáctico con respecto a la gramática del lenguaje, o como un árbol de sintaxis abstracta (AST). Por ejemplo, un árbol DOM es esencialmente un AST con respecto a una DTD dada . Con frecuencia, la vista textual de ese árbol subyacente se genera mediante la formateo del mismo. Los editores asociados con la programación intencional [ 12 ] y la programación orientada al lenguaje para lenguajes de propósito general y lenguajes específicos de dominio comparten muchas de las características de los editores sensibles al lenguaje, pero buscan una mayor separación entre la representación subyacente (la intención ) y la representación superficial (texto en un lenguaje de programación).

Ejemplos

Véase también

Referencias

  1. Hansen, Wilfred J. (1971). "Principios de ingeniería de usuario para sistemas interactivos". Actas de la Conferencia Conjunta de Informática de Otoño FJCC 39. AFIPS. págs. 5623–532 . 
  2. Donzeau Gouge, V.; Huet, G.; Kahn, G.; Lang, B. (julio de 1980). "Entornos de programación basados ​​en editores estructurados: la experiencia de Mentor" (PDF) . Informe de investigación INRIA n.º 26 .
  3. Teitelbaum, T.; T. Reps (septiembre de 1981). "El sintetizador de programas de Cornell: un entorno de programación dirigido por sintaxis" . Communications of the ACM . 24 (9): 563– 573. doi : 10.1145/358746.358755 .
  4. ^ Habermann, A. Nico; Notkin, David (1986). "Gandalf: entornos de desarrollo de software" (PDF) . Traducción IEEE. Software. Ing . 12 (12): 1117– 1127. Bibcode : 1986ITSEn..12.1117H . doi : 10.1109/TSE.1986.6313007 . S2CID 11474349 . 
  5. Medina Mora, Raul (1982). Edición dirigida por la sintaxis: hacia la integración de entornos de programación . Pittsburgh, PA: Carnegie Mellon University (Tesis doctoral).
  6. Kaiser, Gail Elaine (1985). Semántica para entornos de edición de estructuras . Pittsburgh, PA: Universidad Carnegie Mellon (Tesis doctoral).
  7. Reps, T. (1984). Generating Language-Based Environments . Cambridge, MA: The MIT Press. (Galardonado con el Premio ACM a la Mejor Tesis Doctoral de 1983).
  8. Reps, Thomas W. ; Teitelbaum, Tim (1988). The Synthesizer Generator: A System for Constructing Language-Based Editors . Cambridge, MA: Springer-Verlag.
  9. Snelting, Gregor; Henhapl, Wolfgang (1986). «Unificación en álgebras de múltiples tipos como herramienta para el análisis semántico incremental». Actas del 13.º simposio ACM SIGACT-SIGPLAN sobre Principios de lenguajes de programación (POPL) . Nueva York, NY: ACM Press. págs. 229–235 . 
  10. Borras, P.; Clement, D.; Despeyrouz, Th.; Incerpi, J.; Kahn, G.; Lang, B.; Pascual, V. (1989). "CENTAUR: El sistema". "Actas del Simposio de Ingeniería de Software ACM SIGSOFT/SIGPLAN sobre Entornos Prácticos de Desarrollo de Software (PSDE)" . Vol. 24. Nueva York, NY: ACM Press. págs. 14–24 .  
  11. Ballance, Robert A.; Graham, Susan L.; Van De Vanter, Michael L. (1990). "Sistema de edición basado en múltiples lenguajes para el desarrollo integrado". SDE 4: Actas del cuarto simposio ACM SIGSOFT sobre entornos de desarrollo de software . Irvine, CA: ACM Press. págs. 77–93 . 
  12. Czarnecki, Krzysztof y Eisenecker, Ulrich (junio de 2000). Programación generativa: métodos, herramientas y aplicaciones, capítulo 11 (programación intencional) . Reading, MA: Addison-Wesley.