Редактор структуры , также структурный редактор или проекционный редактор , — это любой редактор документов, который осознает базовую структуру документа . Редакторы структуры могут использоваться для редактирования иерархического или размеченного текста, компьютерных программ , диаграмм , химических формул и любого другого типа контента с четкой и четко определенной структурой. В отличие от этого, текстовый редактор — это любой редактор документов, используемый для редактирования простых текстовых файлов . [ необходимо разъяснение ]
Обычно преимущества редактирования текста и структуры объединяются в пользовательском интерфейсе одного гибридного инструмента. Например, Emacs по сути является текстовым редактором, но поддерживает обработку слов, предложений и абзацев как структур, которые выводятся из текста. Напротив, Dreamweaver по сути является редактором структуры для размеченных веб-документов, но также поддерживает отображение и обработку необработанного текста HTML . Аналогично, редакторы молекул обычно поддерживают как графический, так и текстовый ввод. Редактирование структуры преобладает, когда контент является графическим , а текстовые представления неудобны, например, системы САПР и PowerPoint . Редактирование текста преобладает, когда контент в значительной степени лишен структуры, например, текстовые поля в веб-формах. Системы обработки текста WYSIWYG, такие как Word , которые, как кажется, напрямую редактируют форматированный текст, по сути являются редакторами структуры для базового размеченного текста.
В лингвистике синтаксис — это изучение структуры грамматических высказываний, и, соответственно, редактор , ориентированный на синтаксис, является синонимом редактора структуры. Редактор на основе языка и редактор, чувствительный к языку, также являются синонимами. Функции редактора, основанного на языке, могут быть реализованы с помощью специального кода или формальной грамматики . Например, чувствительность к языку в Emacs реализована в определении Lisp режима редактирования для данного языка. Напротив, чувствительность к языку в редакторе XML управляется формальной схемой DTD для данного языка.
Хотя структурированные редакторы позволяют просматривать и обрабатывать базовый документ структурированным образом, формат файла, в котором документ хранится на диске, может быть или не быть сильно структурированным и может быть или не быть открытым или стандартизированным (например, простой текст по сравнению с документами Microsoft Word).
Редактирование структуры часто применялось в редакторах исходного кода , поскольку исходный код естественным образом структурирован синтаксисом компьютерного языка. Однако большинство редакторов исходного кода являются текстовыми редакторами с дополнительными функциями, такими как подсветка синтаксиса и сворачивание кода , а не редакторами структуры. Редакторы в некоторых интегрированных средах разработки анализируют исходный код и генерируют дерево разбора, что позволяет выполнять тот же анализ, что и редактор структуры, но фактическое редактирование исходного кода обычно выполняется как необработанный текст.
Каждый язык программирования обычно имеет четко определенный синтаксис, заданный контекстно-свободной грамматикой , и, соответственно, значимые структурные элементы в исходном коде, написанном на этом языке, соответствуют грамматическим фразам в тексте. Ранние редакторы исходного кода, ориентированные на синтаксис, включали Interlisp-D (для ограниченного синтаксиса Lisp ) и Emily [1] (для богатого синтаксиса PL/I ).
Редактор, ориентированный на синтаксис, может рассматривать правила грамматики как генеративные (например, предлагая пользователю шаблоны , которые соответствуют одному или нескольким шагам в формальном выводе текста программы) или предписывающие (например, предотвращая перемещение фразы заданной части речи в контекст, где требуется другая часть речи) или аналитические (например, анализируя текстовые правки для создания структурированного представления). Функции редактирования структуры в редакторах исходного кода затрудняют написание программ с недопустимым синтаксисом. Редакторы, чувствительные к языку, могут навязывать синтаксическую правильность как абсолютное требование (например, как это сделал Mentor [2] ), или могут допускать синтаксические ошибки после выдачи предупреждения (например, как это сделал Cornell Program Synthesizer [3] ). Строгие структурированные редакторы часто затрудняют выполнение правок, которые легко выполнить с помощью простых текстовых редакторов, что является одним из факторов, способствующих отсутствию принятия структурированного редактирования в некоторых областях, таких как редактирование исходного кода.
Некоторые редакторы, ориентированные на синтаксис, отслеживают соответствие контекстно-зависимым ограничениям языка, таким как корректность типа . Такие статические семантические ограничения могут быть заданы императивно действиями (например, как в Gandalf [4] [5] [6] ), или декларативно атрибутной грамматикой (например, как в Synthesizer Generator [7] [8] ), или объединением в многосортную алгебру (например, как в PSG [9] ) или логическую программу (например, как в Centaur [10] и Pan [11] ), с проверкой соответствия базовой машиной редактирования. Структурированные редакторы различаются по степени, в которой они позволяют своим пользователям выполнять правки, которые приводят к тому, что документ становится синтаксически или семантически неверным.
Редактор, чувствительный к языку, обычно представляет документ как дерево разбора относительно грамматики языка или как абстрактное синтаксическое дерево (AST). Например, дерево DOM по сути является AST относительно заданного DTD . Часто текстовое представление этого базового дерева генерируется путем довольной печати базового дерева. Редакторы, связанные с намеренным программированием [12] и языково-ориентированным программированием для языков общего назначения и предметно-ориентированных языков, разделяют многие черты редакторов, чувствительных к языку, но стремятся к большему разделению между базовым представлением ( намерением ) и поверхностным представлением (текстом на языке программирования).