Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Получение диаграммы классов по исходному коду

87K
17 января 2013 года
Externus
2 / / 17.01.2013
Доброго времени суток. Есть задача - обработать введенный пользователем на форме код, получить диаграмму классов со всеми полями, методами, константами. Т.е. на входе некоторый текст кода, а на выходе некая структура, в которой сохранена диаграмма описанных классов.

Есть мысли копать в сторону Reflection API, либо в сторону регулярных выражений, либо на крайняк в сторону конечных автоматов. А что посоветуете Вы? Или может есть какие статьи?
297
18 января 2013 года
koodeer
1.2K / / 02.05.2009
Цитата:
введенный пользователем на форме код


Имеется в виду исходный код C#?
Дело в том, что регулярные выражения предназначены для разбора регулярной грамматики. Исходный код C#, как и большинства языков программирования, не является регулярной грамматикой. Поэтому одними регулярками не обойтись (хотя отдельные части кода ими выкусывать можно).

Да, рефлексию использовать можно. Сперва компилируем исходник родным компилятором шарпа, используя класс CSharpCodeProvider, а затем исследуем полученную сборку рефлексией.


P.S. если задача не срочная, то можно подождать выхода компилятора Roslyn :). При этом станет доступна функция compiler as a service, то есть можно будет легко получать и обрабатывать AST кода. Майкрософт обещала Розлин уже в VS2012, но "не шмогла". Ждём-с в следующем релизе (годика два-три, да).

87K
19 января 2013 года
Externus
2 / / 17.01.2013
koodeer, спасибо.

Есть вопрос по рефлекции. Например.

Assembly loadedAssembly = Assembly.ReflectionOnlyLoadFrom( path );

Как сделать так, чтобы не прерывая работы программы можно было загрузить другую сборку?

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог