Сергей Прохоренко писал(а):
Валерий Лаптев писал(а):
Ну и исследовательские работы по изучению возможных пользовательских операций вместо текстовых.
Что планируется в этом направлении?
Текстовый редактор позволяет быстро, полностью нарушая синтаксис языка, преобразовать одну конструкцию в другую.
Очевидно, что за этим преобразованием лежит некий смысл ("у меня есть это, я хочу это, delete/cut/copy/paste/d&d/rename/insert - если повезло, то синтаксис потом снова правильный").
В семантическом редакторе нельзя нарушить синтаксис, а, следовательно, и сделать такое быстрое преобразование вручную.
Кроме того, в целях обучения отключены copy/paste и drag&drop.
Но каждое действие имеет смысл и автоматизировано.
Рассмотрим пример:
Код:
функция Ф(): целое
# действия
вернуть имя;
конец
И тут нам пришло в голову, что перед тем как возвращать имя, надо его проверить на какое-то условие.
Действия в текстовом редакторе:
1) удаляем ключевое слово "вернуть"
2) вместо него пишем "если", после "имя" пишем "то"
3) добавляем "конец" (закрываем блок согласно синтаксису).
4) дописываем после "имя" нужное нам условие
5) реализуем логику, которую хотели, и возвращаем, что-надо.
В семантическом редакторе ключевые слова удалять нельзя. Поэтому придется удалить оператор "вернуть" (а представьте, что там было не просто имя, а очень длинное выражение),
вставить "если" и там заново написать выражение из "вернуть".
Но то, что мы проделали, имеет смысл. Даже можно тут увидеть много смыслов:
1) возвращаемое выражение надо проверить
2) выражение надо проверить
3) выражение надо присвоить новой переменной, чтобы проверить
4) выражение надо присвоить новой переменной (это прямо рефакторинг "extract variable").
5) и т.д.
Очевидно, семантический редактор должен должен поддерживать автоматизированные модификации, которые позволяют сделать такое преобразование.
Вот только ситуаций таких - не один десяток, каждую надо проанализировать и реализовать решение.