Мужики! Научите уму-разуму, плиз!
Занимаюсь похожим с вами делом — пишу IDE для MSIL (пока никуда не выложена). С помощью простой
PEG-библиотечки генерю AST (уже есть грамматика почти для всего, кроме ОпКодов).
Есть редактор (FastColoredTextBox), где я буду жонглировать стилями. И вот в этом месте непонятно, куда впрягать лошадь! Вариант:
1. "Лошадь впереди телеги": Сразу засунуть весь текст в редактор, а потом оббежать всё AST (где ещё нужно сохранить позицию в тексте!) и применять стили там, где нужно.
2. "Лошадь позади телеги": брать AST и тупо восстанавливать текст, попутно применяя стили.
Влад говорил, что у вас ДВА дерева (как бы для редактора и компилятора). Теоретически, понимаю зачем, но практически — фик знает... Мне кажется, можно обойтись тем, что хранить "редакторскую" часть вместе с компилляционной (по кр. мере я не рассчитываю компилять мегабайтные простыни). В любом случае, интересно, каким способом вы раскрашиваете код?
Ну и если совсем не ноу-хау, что делать при изменении в редакторе? Вы что-то говорили про "высокоуровневую" структуру кода (типа уровня класса/деклараций), но если даже всунуть простую '{' в код, весь парсинг летит к чертям. Допускаю, что Nitra куда мощнее в плане распознавания, но это не избавляет от несуразности кода, который и человек-то может не понять!
![](/Forum/Images/smile.gif)
В общем, у меня при изменениях только одна идея —
трясти надо надо перекомпилять. Тем более, что "вклеенный" код может быть весьма большим и декларативно значимым (пару пропертей ввели, например!).
Можно особо не расписывать, только идею киньте. Если не жалко.
![](/Forum/Images/smile.gif)
Заранее спасибо!