Re[7]: Здравствуйте товарищи разработчики R#.
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.11.04 19:50
Оценка:
Здравствуйте, Loislo, Вы писали:

L>Попробовал для начала просто пронаследовать RCompileUnit от RNamespace, почикал дубликаты ф-ий. Попатчил еще cs.atg в районе CS() дабы другая структура получалась. В принципе заработало. Но во первых правильнее как ты написал через RNamespaceBase сделать, во вторых возможно где-то в другом месте что-то отвалилось, Юнит тестов нет, фиг узнаешь.


Загрузи тот же RSParser и процентов 70 тестов тебе гарантировано. Погляди на результат рендеренга кода по АСТ (менял ты ведь только RCompileUnit и RNamespace, вот ни них и смотри).

L>Мои ощущения были такие что, каждый элемент дерева построен парсером из куска кода и все непосредственные дети этого элемента покрывают собой этот кусок кода но не пересекаются между собой. это мое ощущение и было нарушено .


AST не совсем отражение кода. Это отражение объектной модели кода. А она несколько более хитра нежели внешнее представление кода. К этому нужно привыкнуть.

L>Правильно я понимаю что:


L>для второго пункта надо иметь деревообразное пространство всего проекта


Правильно. Это уже делается в RSharp.Compiler/rsc и в CodeAnalyzer (если загружать проект, а не отдельный файл).

L>и импортированых в него сущностей


Правильно. Но это еще не делается. Хотя список внешних сборок получается.

L>(не знаю как это назвать)


Внешние сборки на которые ссылается проект.

L> и бегать по нему снизу вверх в поисках нужных ссылок.


Неправльно. Бегать нужно только от корня вниз. Если я не ошибаюсь, разрешение имен может быть сделано за 1 объход AST.

L> Алгоритм очевидно будет более сложный в силу множественности мест откуда могут приезжать типы и переменные и т.д.


Алгоритм осложняется только множественностью пространств имен.

L> Дерево проекта уже есть осталось только дерево импортированых сущностей и бегать.


Сложность в том чтобы написать правильный и в тоже время быстрый алгоритм объода.

L>для первого видимо нужна какая то другая структура где каждая переменная будет содержать список ссылок на места где она используется


Это называется областью видимости (scope). Где-то в форуме _Obelisk_ уже описывал примерный алогоритм.

L>либо каждый раз бегать по дереву и генерировать этот список.


Это медленно. Сейчас примерно так и делается. Причем разрешаются только типы описанные в проекте и только для заданного метса (где производится ссылка на тип).

L> Т.е. бегать придется всегда а вот сохранять или не сохранять?


Даже сейчас кое-что сохраняется. А надо сделать так чтобы после объхода вся информация была доступна с минимальными затратами.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.