«Анализировать» язык Python для анализа сценария сборки Scons? - PullRequest
0 голосов
/ 25 марта 2012

Я думаю о том, чтобы попытаться преобразовать скрипт Scons (Python) в другую систему сборки, но мне было интересно, была ли доступна библиотека анализа Python для «допроса» скрипта Scons / Python?

То, что я [возможно] хочу, - это нечто вроде механизма отражения Java, на самом деле, если это возможно с помощью, скажем, Jython / Java, кодирования на Java, это было бы лучше всего для меня как разработчика Java (я не имеет реального опыта работы с Python).

Что мне нужно сделать, это извлечь значения переменных назначения и т. Д. Для определенных именованных типов классов и методов в сценарии, чтобы я мог перенести их в свой новый выходной формат.

Есть идеи?

Спасибо

Rich

Ответы [ 2 ]

0 голосов
/ 26 марта 2012

Я сомневаюсь, что это лучший инструмент для миграции scons, но модуль inspect в python предлагает некоторые возможности отражения.В остальном вы можете просто ткнуть в живые классы и объекты: в Python есть некоторые сокрытия данных, но не применяются ограничения доступа.

0 голосов
/ 26 марта 2012

Если ваши текущие файлы scons являются очень регулярными и последовательными, может быть проще сделать что-то «тупое» со стандартными инструментами редактирования текста. Если вы хотите стать умнее, вы должны заметить, что scons сам по себе является программой Python и загружает ваши файлы сборки, которые также являются Python. Таким образом, вы можете создать свою собственную «специальную» версию scons, которая реализует функции, которые используют ваши скрипты сборки (для добавления программ, библиотек и т. Д.). Затем вы можете запустить ваши скрипты сборки в вашей «поддельной» программе scons и заставить ваши функции выводить свои аргументы в формате, подходящем для вашей новой системы сборки.

Другими словами, не думайте о проблеме с точки зрения полного анализа грамматики Python - осознайте, что вы можете запустить свои скрипты сборки как код Python и угнать их поведение.

Легче сказать, чем сделать, я уверен.

...