(1 to: 24) inject: 1 into: [ :a :b | a * b ]
Это похоже на AST из кода C
Если вы привыкли к Java, antlr может легко преобразовать ваш код в абстрактное синтаксическое дерево, а затем применить преобразование к этому дереву. Преобразование AST по умолчанию - это просто распечатать исходный источник.
Вы можете использовать любой инструмент генератора синтаксического анализатора для создания синтаксического анализатора C ++ для вас, но сначала вы должны получить CFG (контекстно-свободную грамматику) для C ++, проверьте Antlr
Редактировать:
Вам нужна рабочая грамматика и синтаксический анализатор для C ++, что, однако, не так просто, как это может не может быть построен с использованием большинства генераторов синтаксического анализатора . Но как только у вас есть синтаксический анализатор, вы можете взять абстрактное синтаксическое дерево программы и изменить его практически любым способом, каким захотите.
В подходе на C # или общем .net, вы могли бы получить некоторую пользу от поставщика C ++ / CLI CodeDOM - если не использовали версия этого типа на C ++, я не знаю, насколько хорошо она будет обрабатывать код, содержащий много шаблонов.
В проекте Mozilla есть инструмент, который делает это .
Статический анализатор Clang теперь известен тем, что хорошо анализирует и переписывание C ++. Страуструп написал статью об исследовательском проекте в Texas A&M, но я не думаю, что он был опубликован.
ознакомьтесь с проектом doxygen , это проект с открытым исходным кодом, для анализа и документирования нескольких языков программирования, включая C ++. Я считаю, что использование лексера этого проекта поможет вам более чем на полпути
Надежный анализатор C ++ доступен в нашем DMS Software Reengineering Toolkit . Он анализирует множество диалектов C ++, включая ANSI, GNU 3/4, MSVS6 и MSVisual Studio 2005, а также управляемый C ++.
Он создает AST и таблицы символов (последнее намного сложнее, чем вы думаете). Вы можете перемещаться по AST, преобразовывать в различные допустимые программы C ++ и повторно создавать код, включая комментарии.