Оберон-клуб «ВЄДАsoft»
https://zx.oberon.org/forum/

Процедура для определения текущего контекста в исходном тексте
https://zx.oberon.org/forum/viewtopic.php?f=37&t=421
Страница 1 из 1

Автор:  budden [ 12 окт 2018, 11:01 ]
Заголовок сообщения:  Процедура для определения текущего контекста в исходном тексте

Курсор клавиатуры находится в некотором документе (окне, не знаю, как оно точно называется).
Нужно считать текущую строку, затем предыдущую строку, затем строку перед предыдущей и т.п.
Ищем среди них строку, которая имеет вид MODULE<эн пробелов>Идентификатор<что угодно>.
От этой строки запускаем парсер модуля, строим AST (заимствуем функционал из компилятора). Если нам удалось построить AST, то находим в нём место, в котором стоит курсор и возвращаем стек вложенных узлов AST. Если не удалось, то извлекаем слово под курсором (по правилам формирования идентификатора, с учётом возможности появления в нём кириллицы) и возвращаем что-нибудь по смыслу равное "слово такое-то в модуле таком-то" .

Постановка задачи кривая, поскольку на самом деле для этой задачи нужен парсер, способный построить AST для некорректного текста. Решение этой задачи в принципе существует, но это сложно. Поэтому пока будем так. Видимо, в ББ есть какое-то восстановление после ошибок.

Применить это можно будет для:
  • точного перехода к определению (функция из другого модуля с учётом переименования при импорте, переменная в этом модуле и т.п.)
  • показать документацию к идентификатору в виде hint-а или чего-то подобного.
  • показать документацию или интерфейс текущего модуля за одно нажатие
  • показать, в какой функции мы находимся
Ваши ставки.

Страница 1 из 1 Часовой пояс: UTC + 2 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/