C ++ является очень сложным языком программирования (и отличается от C). Разбор это очень трудная задача ( много лет работы - возможно, всю жизнь, если работать в одиночку - если вы делаете это с нуля).
Итак, создайте свой инструмент на основе существующей технологии синтаксического анализа C ++ . Вы можете использовать GCC , возможно, через GCC плагины или Clang (см. this ) или Edison C ++ Свободное программное обеспечение Компиляторы C ++ - это огромные звери (несколько миллионов строк), которые постоянно развиваются и растут, и для их освоения требуется много работы. Кстати, вы можете использовать обычные межпроцессные коммуникации (например, JSONRPC или другие подходы) или интерфейсы сторонних функций методы (например, JNI ) использовать компиляторы C ++ из Java.
Однако я хочу использовать язык Java.
Будьте прагматичны. Так что кодируйте небольшую часть в C ++ (над существующими синтаксическими анализаторами, например, из компиляторов C ++), а остальные - в Java.
(для академического прототипа использование некоторого межпроцессного взаимодействия между адаптированным компилятором в C ++ и некоторым инструментом в Java, вероятно, является менее трудным, однако вам придется кодировать несколько тысяч строк на стороне компилятора в C ++, поскольку C ++ сложен, и вам нужно больше на стороне Java; кстати, вам, вероятно, нужно немного попрактиковаться в C ++, чтобы иметь возможность создавать полезные вещи для него ...)
(поскольку вы, вероятно, не найдете полных компиляторов C ++ или внешних интерфейсов в Java)
Даже если создать свою вещь выше существующего синтаксического анализатора C ++, задача не из легких и может занять несколько месяцев вашего времени. И существующие синтаксические анализаторы C ++ развиваются (например, внутренние представления GCC слегка меняются от одной версии к следующей). Так что вам нужно составить бюджет на развитие этих парсеров.
А синтаксический анализ C ++ сам по себе является плохо определенной задачей (подумайте о предварительной обработке, расширении шаблонов и т. Д ....). Вам необходимо определить, в какой форме представления кода, связанного с C ++, вы хотите работать. Конечно, стандарт C ++ имеет несколько выпусков и т. Д.
Возможно, вам следует подумать о том, чтобы попросить своего менеджера (или получить какой-либо исследовательский грант, если вы учитесь) работать над этим в течение нескольких лет. Но спросите себя, стоит ли это того ...
В качестве альтернативы, если вы ограничиваете себя одним проектом C ++, попробуйте вместо этого определить некоторые соглашения для конкретного проекта, сгенерировать некоторый код C ++ и некоторые тесты в нем. YMMV.
Другой подход (который работает в Linux, но, вероятно, не везде) - попросить вашего пользователя скомпилировать с включенной отладочной информацией (например, с g++ -g
, если он использует GCC ) и проанализировать DWARF отладочная информация.
Кстати, я работал над похожими целями: несколько лет назад в GCC MELT , а теперь в моем bismon github проекте (временное имя будет меняться). Не забудьте получить финансирование на несколько лет работы на полную ставку, так как ваша цель очень амбициозна.