Как получить AST из исходника?
От: catbert  
Дата: 12.05.10 11:48
Оценка:
Сабж.

Точнее, мне нужен скорее всего CompileUnit с правильными Location-ами на основе файла *.n.
Все ключевые слова, в том числе и от макросов должны быть определены.

Такая функциональность уже реализована в интеграции к студии и ШарпДевелопу, и каким-то магическим образом, с помощью десятка мутабельных констант с непонятными именами, в nemish.

В коде nemish у меня разобраться не вышло, интеграция к студии слишком большая, интеграцию к Шарпдевелопу почти осилил, но не до конца

«Для чего тебе оно?» — спросит любознательный читатель. Ответом ему будет: «Для правильной реализации браузера кода Nemerle с перекрёстными ссылками.»

Я не претендую на полный ответ, но если бы уважаемые авторы интеграции описали вкратце её архитектуру (особенно Nemerle.Compiler.Utils), я остался бы очень благодарен. Думаю, не только мне интересно будет.
Re: Как получить AST из исходника?
От: hardcase Пират http://nemerle.org
Дата: 12.05.10 12:10
Оценка: +1
Здравствуйте, catbert, Вы писали:

C>Сабж.


C>Точнее, мне нужен скорее всего CompileUnit с правильными Location-ами на основе файла *.n.

C>Все ключевые слова, в том числе и от макросов должны быть определены.

Полагаю, что тебе нужно захостить IEngine и отдать ему "проект" IIdeProject — интерфейс, с помощью которого этот компилятор добирается до исходников — ISource'ов.
Энжин работает асинхронно, в отдельном потоке. В некоторый момент времени он каждому ISource'у назначит CompileUnit. Из этого объекта доступны все TopDeclaration (на этом работает ClassView в SharpDevelop и фолдинг в редакторе), чуть позже, когда компилятор скажет TypedtreeCreated, из этих же юнитов можно будет добраться до соответствующих TypeBuilder-ов (я толком не проверял).
/* иЗвиНите зА неРовнЫй поЧерК */
Re: Как получить AST из исходника?
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.05.10 21:20
Оценка:
Здравствуйте, catbert, Вы писали:

C>«Для чего тебе оно?» — спросит любознательный читатель. Ответом ему будет: «Для правильной реализации браузера кода Nemerle с перекрёстными ссылками.»


Для этого мало парсинга. Для этого нужна типизация. А как справидливо заметил hardcase для этого нужно пользоваться всем движком интеграции или компилятором.

C>Я не претендую на полный ответ, но если бы уважаемые авторы интеграции описали вкратце её архитектуру (особенно Nemerle.Compiler.Utils), я остался бы очень благодарен. Думаю, не только мне интересно будет.


Вкратце тебе нужно реализовать указанные hardcase-ом интерфейсы (IEngine, IIdeProject, ISource). Для затравки можно поглядеть на проект тестирующий движок интеграции. Там это сделано, хотя и не в полном объеме.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Как получить AST из исходника?
От: hardcase Пират http://nemerle.org
Дата: 15.05.10 20:50
Оценка:
Здравствуйте, catbert, Вы писали:

Вообще я для реализации IIdeProject я бы попробовал взять ту часть SharpDevelop'а которая отвечает за работу с msbuild-проектами (см. EngineContext и NemerleProject), таким образом можно будет сразу бесплатно работать с nproj-файлами.
/* иЗвиНите зА неРовнЫй поЧерК */
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.