stringtranslate.com

Editor de estructura

Un editor de estructura , también editor estructurado o editor de proyección , es cualquier editor de documentos que tenga en cuenta la estructura subyacente del documento . Los editores de estructura se pueden utilizar para editar texto jerárquico o marcado , programas informáticos , diagramas , fórmulas químicas y cualquier otro tipo de contenido con una estructura clara y bien definida. Por el contrario, un editor de texto es cualquier editor de documentos que se utilice para editar archivos de texto sin formato . [ Aclaración necesaria ]

Por lo general, los beneficios de la edición de texto y de 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 que se infieren del texto. Por el contrario, Dreamweaver es fundamentalmente un editor de estructura para documentos web marcados, pero también admite la visualización y manipulación de texto HTML sin formato. De manera similar, los editores de moléculas generalmente admiten 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 incómodas, por ejemplo, los sistemas CAD y PowerPoint . La edición de texto predomina cuando el contenido está en gran parte desprovisto de estructura, por ejemplo, los campos de texto en formularios web. Los sistemas de procesamiento de texto WYSIWYG como Word , que parecen editar texto formateado directamente, son esencialmente editores de estructura para el texto marcado subyacente.

En lingüística , la sintaxis es el estudio de la estructura de los enunciados gramaticales y, en consecuencia, editor dirigido por sintaxis 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 de Lisp del modo de edición para el lenguaje dado. Por el contrario, la sensibilidad al lenguaje en un editor XML está impulsada por un esquema DTD formal para el lenguaje dado.

Aunque los editores estructurados permiten la visualización y manipulación del documento subyacente de una manera estructurada, el formato de archivo en el que se almacena el documento en el disco puede o no estar muy estructurado y puede o no ser abierto o estandarizado (por ejemplo, texto simple versus documentos de Microsoft Word).

La edición de estructura se ha empleado a menudo en 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 cambio, 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 tiene típicamente 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 incluyeron Interlisp-D (para la sintaxis limitada de Lisp ) y Emily [1] (para la sintaxis rica de PL/I ).

Un editor dirigido por la sintaxis puede tratar las reglas gramaticales como generativas (p. ej., ofreciendo al usuario plantillas que corresponden a uno o más pasos en una derivación formal del texto del programa) o proscriptivas (p. ej., impidiendo que una frase de una parte dada del discurso se mueva a un contexto donde se requiere otra parte del discurso) o analíticas (p. ej., analizando ediciones textuales para crear una representación estructurada). Las características de edición de estructura en los editores de código fuente hacen que sea más difícil escribir programas con sintaxis no válida. Los editores sensibles al lenguaje pueden imponer la corrección sintáctica como un requisito absoluto (p. ej., como lo hizo Mentor [2] ), o pueden tolerar errores de sintaxis después de emitir una advertencia (p. ej., como lo hizo el sintetizador de programas Cornell [3] ). Los editores estructurados estrictos a menudo dificultan la realización de ediciones que son fáciles de realizar con editores de texto simple, 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 monitorean el cumplimiento de las restricciones sensibles al contexto de un lenguaje, como la corrección de tipos . Tales restricciones estático-semánticas pueden especificarse imperativamente mediante acciones (por ejemplo, como en Gandalf [4] [5] [6] ), o declarativamente mediante una gramática de atributos (por ejemplo, como en el Generador de Sintetizadores [7] [8] ) o mediante unificación en un álgebra de múltiples ordenamientos (por ejemplo, como en PSG [9] ) o un programa lógico (por ejemplo, como en Centaur [10] y Pan [11] ), con el cumplimiento verificado por la maquinaria 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 se vuelva sintáctica o semánticamente incorrecto.

Es común que un editor sensible al lenguaje represente un documento como un árbol de análisis 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 un DTD dado . Con frecuencia, la vista textual de ese árbol subyacente se genera mediante la impresión estética del árbol subyacente. 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 del dominio comparten muchas de las características de los editores sensibles al lenguaje, pero apuntan a 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 usuarios 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 del INRIA n.° 26 .
  3. ^ Teitelbaum, T.; T. Reps (septiembre de 1981). "El sintetizador de programas de Cornell: un entorno de programación dirigido por la sintaxis". Comunicaciones de la 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. doi :10.1109/TSE.1986.6313007. S2CID  11474349.
  5. ^ Medina Mora, Raul (1982). Edición dirigida por 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: Carnegie Mellon University (tesis doctoral).
  7. ^ Reps, T. (1984). Generación de entornos basados ​​en el lenguaje . Cambridge, MA: The MIT Press. (Premio ACM de tesis doctoral en 1983).
  8. ^ Reps, Thomas W. ; Teitelbaum, Tim (1988). El generador de sintetizadores: un sistema para construir editores basados ​​en lenguaje . Cambridge, MA: Springer-Verlag.
  9. ^ Snelting, Gregor; Henhapl, Wolfgang (1986). "Unificación en álgebras de múltiples ordenaciones como un dispositivo 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 lenguaje pan para 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.