Библиотека для разбора объявлений типа C?

Я пытаюсь найти библиотеку с открытым исходным кодом (либо написано в C или же C++) чтобы помочь мне разобрать произвольно C/C++ объявления типа (например, объявления типа void *(*(*foo[])( int, void * [] ))[123]) который я тогда собираюсь метамоделировать.

Кто-нибудь может порекомендовать открытый исходный код C/C++ Библиотека синтаксического анализа объявлений типа?

Примечание: я не могу использовать лицензионный код GPL (например, cdecl инструмент), поскольку это для приложения с закрытым исходным кодом, и я надеюсь на более надежное решение того, что я могу написать сам.

3

Решение

Парсинг C общеизвестно труден, и чтобы делать то, что вы хотите, вам, вероятно, нужно разрешение имен и типов. Нужно иметь то, что составляет полный интерфейс компилятора, чтобы сделать это правильно;
на самом деле, вам даже нужен препроцессор, потому что код, который вы будете читать, будет содержать директивы препроцессора. Эти устройства — огромное количество работы, чтобы собрать вместе; вы правы в том, что вы действительно не хотите писать его самостоятельно, если у вас нет много свободного времени.

Ваш реалистичный выбор — пакеты с открытым исходным кодом, такие как GCC (сложный для вашей задачи), GCCXML (хочет создавать объявления из правильно сформированных программ) или Clang (аналогично); Eclipse CDT имеет синтаксический анализатор C (аналогично). Я не могу говорить, есть ли у них API или лицензии, которые удовлетворяют вас. Пакеты с закрытым исходным кодом могут более соответствовать вашим потребностям; EDG предоставляет внешние интерфейсы C и C ++ (все еще хочет обрабатывать только полностью правильно сформированные программы), и моя компания (Semantic Designs) также использует наш инструментарий реинжиниринга программного обеспечения DMS.

Из этого набора только DMS может упростить анализ объявлений типов изолированно; он может анализировать любой нетерминал своих грамматик (даже в том числе неоднозначные). Что еще более важно, если вы действительно хотите «перейти к метамодели», вы, вероятно, захотите проанализировать объявление и определить подтипы / ссылочные типы (например, если он использует typedef), поэтому вы хотите объединить полный анализ с разрешением имени / типа для предоставления определений фона, с последующим анализом конкретных объявлений, которые вас интересуют, с последующим разрешением имен и типов конкретных объявлений с использованием контекста таблицы символов, предоставленного определениями фона. Механизм DMS предоставляет все эти возможности.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector