Здравствуйте, VladD2, Вы писали:
VD>ТутАвтор: WolfHound
Дата: 02.10.14
Вольфхаунд подкинул интересную мысль.
Я читал, но у меня пока нет понимания внутреннего устройства нитры, чтобы оценить.
VD>Препроцессор там должен быть примитивнийший. Думаю, его не составит труда написать и вручную. Предоставим АПИ позволяющее регистрировать эти виртуальные токены и вперед...
VD>Что касается декларативного варианта, то нужно придумать это самое декларативное описание, так чтобы с его помощью можно было покрыть имеющиеся юзкейсы.
В прошлое обсуждение сошлись на том, что надо придумать некий генерик-механизм и декларативное описание для него. Время прошло, а механизма, чтобы синтаксис на отступах был его частным случаем, никто не предоставил. И Вольфхаунд, как я понял, пишет про то, как безболезненно захардкодить отступы в парсер.
STD>>>>как дружить все это дело со студийной интеграцией
STD>>Вопрос открытый. Потому что нет идей, как, допустим, параметризовать SourceSnapshot кастомным препроцессором во время работы интеграции. Или, допустим, имея наследника SourceSnapshot с зашитой логикой препроцессинга и пересчета, указать интеграции, что надо использовать именно его?
VD>Ну, дернуть функцию перед работай парсера не сложно.
Я не понимаю. Я про Adding new language suppor (
http://confluence.jetbrains.com/display/Nitra/VsExtension). И как для своего язычка с отступами заставить все работать через свой препроцессор, понять пока не могу.
VD>Лучше, конечно, придумать декларативный вариант. Тогда и дергать ничего не пришлось бы.
Конечно лучше. Я это изначально обозвал как "Способ описания отступов в самой грамматике"
VD>Как вставить виртуальные скобки уже понятно. Это упрощает проблему. Осталось придумать как описывать принцип преобразования отступов в эти виртуальные скобки.
Полагаю, что надо начать с варианта "отступ больше текущего" = индент, и "отступ меньше текущего, равный вершине стека" = дедент, иначе — ошибка.
Я пытался как-то добрасывать дедентов и бэддедентов ради парсера, но это всё "эвристика".
Просто смотрел, в каком случае парсер больше всего разбирает и пришел к такому решению.
Не думаю, что парсер должен таким страдать.