stringtranslate.com

Редактор структуры

Редактор структуры , также структурный редактор или проекционный редактор , — это любой редактор документов, который осознает базовую структуру документа . Редакторы структуры могут использоваться для редактирования иерархического или размеченного текста, компьютерных программ , диаграмм , химических формул и любого другого типа контента с четкой и четко определенной структурой. В отличие от этого, текстовый редактор — это любой редактор документов, используемый для редактирования простых текстовых файлов . [ необходимо разъяснение ]

Обычно преимущества редактирования текста и структуры объединяются в пользовательском интерфейсе одного гибридного инструмента. Например, 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] и языково-ориентированным программированием для языков общего назначения и предметно-ориентированных языков, разделяют многие черты редакторов, чувствительных к языку, но стремятся к большему разделению между базовым представлением ( намерением ) и поверхностным представлением (текстом на языке программирования).

Примеры

Смотрите также

Ссылки

  1. ^ Хансен, Вильфред Дж. (1971). «Принципы проектирования пользователей для интерактивных систем». Труды Осенней объединенной компьютерной конференции FJCC 39. AFIPS. С. 5623–532.
  2. ^ Донзо Гуж, В.; Юэ, Г.; Кан, Г.; Ланг, Б. (июль 1980 г.). «Программные среды на основе структурированных редакторов: опыт Mentor» (PDF) . Исследовательский отчет INRIA № 26 .
  3. ^ Тейтельбаум, Т.; Т. Репс (сентябрь 1981 г.). «Синтезатор программ Корнелла: среда программирования, управляемая синтаксисом». Сообщения ACM . 24 (9): 563–573. doi : 10.1145/358746.358755 .
  4. ^ Хаберманн, А. Нико; Ноткин, Дэвид (1986). «Гэндальф: Среды разработки программного обеспечения» (PDF) . IEEE Транс. Программное обеспечение англ . 12 (12): 1117–1127. дои :10.1109/TSE.1986.6313007. S2CID  11474349.
  5. ^ Медина Мора, Рауль (1982). Синтаксически-управляемое редактирование — к интеграции сред программирования . Питтсбург, Пенсильвания: Университет Карнеги-Меллона (диссертация на соискание степени доктора философии).
  6. ^ Кайзер, Гейл Элейн (1985). Семантика для сред редактирования структур . Питтсбург, Пенсильвания: Университет Карнеги-Меллона (кандидатская диссертация).
  7. ^ Репс, Т. (1984). Создание сред на основе языка . Кембридж, Массачусетс: Издательство MIT. (Награжден премией ACM Doctoral Dissertation Award 1983 года.).
  8. ^ Репс, Томас В .; Тейтельбаум, Тим (1988). Генератор синтезатора: система для создания редакторов на основе языка . Кембридж, Массачусетс: Springer-Verlag.
  9. ^ Снелтинг, Грегор; Хенхапл, Вольфганг (1986). «Унификация во многих сортных алгебрах как устройство для инкрементального семантического анализа». Труды 13-го симпозиума ACM SIGACT-SIGPLAN по принципам языков программирования (POPL) . Нью-Йорк, Нью-Йорк: ACM Press. С. 229–235.
  10. ^ Боррас, П.; Клемент, Д.; Деспейруз, Т.; Инсерпи, Дж.; Кан, Г.; Ланг, Б.; Паскуаль, В. (1989). "CENTAUR: Система". "Труды симпозиума по программной инженерии ACM SIGSOFT/SIGPLAN по практическим средам разработки программного обеспечения (PSDE) . Том 24. Нью-Йорк, Нью-Йорк: ACM Press. С. 14–24.
  11. ^ Балланс, Роберт А.; Грэхем, Сьюзен Л.; Ван Де Вантер, Майкл Л. (1990). «Система редактирования на основе панязыка для комплексной разработки». SDE 4: Труды четвертого симпозиума ACM SIGSOFT по средам разработки программного обеспечения . Ирвайн, Калифорния: ACM Press. С. 77–93.
  12. ^ Czarnecki, Krzysztof & Eisenecker, Ulrich (июнь 2000). Генеративное программирование: методы, инструменты и приложения, Глава 11 (Преднамеренное программирование) . Reading, MA: Addison-Wesley.