Re: AST <-> Editor непонятки
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.05.15 14:41
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K>1. "Лошадь впереди телеги": Сразу засунуть весь текст в редактор, а потом оббежать всё AST (где ещё нужно сохранить позицию в тексте!) и применять стили там, где нужно.


Примерно так и делается, но все сильно сложнее.

K>2. "Лошадь позади телеги": брать AST и тупо восстанавливать текст, попутно применяя стили.


Это совсем неверный путь.

K>Влад говорил, что у вас ДВА дерева (как бы для редактора и компилятора). Теоретически, понимаю зачем, но практически — фик знает... Мне кажется, можно обойтись тем, что хранить "редакторскую" часть вместе с компилляционной (по кр. мере я не рассчитываю компилять мегабайтные простыни). В любом случае, интересно, каким способом вы раскрашиваете код?


Для начала нужно понять какая функциональность требуется.

Если задача — подсветить ключевые слова, то для этого достаточно простенького лексера, который эти слова будет выявлять.
Если хочется полноценную IDE, с подсветкой типов, с автодополнением тех же типов и т.п. Это значительно сложнее и тут нужно знать очень много.

Если стоит вторая задача, а опыта в этой сфере нет, лучше просто взять Нитру и делать на ней. Она пока что не закончена, но скоро в ней появится все что нужно для начальной поддержке языков.


K>Ну и если совсем не ноу-хау, что делать при изменении в редакторе? Вы что-то говорили про "высокоуровневую" структуру кода (типа уровня класса/деклараций), но если даже всунуть простую '{' в код, весь парсинг летит к чертям. Допускаю, что Nitra куда мощнее в плане распознавания, но это не избавляет от несуразности кода, который и человек-то может не понять! В общем, у меня при изменениях только одна идея — трясти надо надо перекомпилять. Тем более, что "вклеенный" код может быть весьма большим и декларативно значимым (пару пропертей ввели, например!).


Начать надо с того, что в проекте может быть более одного файла. IDE должна отслеживать изменения в каждом из них и обновлять соответствующий AST.

K>Можно особо не расписывать, только идею киньте. Если не жалко.


Как раз общей идеи тут будет недостаточно. Нужно понимать принципы построения интеграции. Nitra, создается (в том числе) для того чтобы снять с создателя языка эту нагрузку. Но Nitra пока еще не закончена и не может снять всю нагрузку. Однако упростить жизнь она уже может. Только придется пользоваться нашими рабочими ветками, а не мастером (в нем все уже сильно устарело).

Описание о том как поднять язык на Nitra я оформил отдельной темой
Автор: VladD2
Дата: 22.05.15
.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.