Ваша лучшая ставка на сегодня, вероятно, CLang .
Несмотря на то, что CLang известен как внешний интерфейс C / C ++ / Objective-C / Objective-C ++ поверх LLVM, он был разработан как набор библиотек конкретно , так что отдельные компоненты могут быть перезаписаны -используется вне самого компилятора.
Интересно, что libclang
- это библиотека C, которая оборачивает ядро предварительной обработки и семантического анализа, чтобы обеспечить "синтаксическое дерево" в C, потому что C является языком общения. libclang
, в частности, служит основой для привязок Python, поэтому, если вы действительно хотите это в Java, вы должны иметь возможность использовать JNI (если я правильно помню термины) для взаимодействия с ним. Кроме того, интерфейс libclang
является чрезвычайно стабильным (в отличие от внутренних представлений компилятора), поскольку означает для использования внешними пользователями.
Привязки Python уже использовались для создания clang_complete
, плагина vim для автозаполнения. Вы можете прочитать об этом статью блога , например, об этом (есть отличное видео, показывающее это в действии).
Примечание для инсайдера: привязки Python в настоящее время значительно улучшены Григорием Сзорком под руководством Тобиаса Гроссера, вы можете увидеть объявление Грегори здесь .