Как я могу получить абстрактное синтаксическое дерево программы c в gcc?
Я пытаюсь автоматически вставлять прагмы OpenMP в программу ввода c.
Мне нужно проанализировать вложенные петли for
для поиска зависимостей, чтобы я мог вставлять соответствующие OpenMP-прагмы.
Итак, в основном, что я хочу сделать, это пройти и проанализировать абстрактное синтаксическое дерево ввода c-программы.
Как это достичь?Как получить абстрактное синтаксическое дерево программы `c` в` GCC`
ответ
не совсем AST, но GCCXML может помочь http://linux.die.net/man/1/gccxml
редактировать: как заявил Ira Baxter gccxml не выводит информацию о функции/тел методами. Вот вилка, которая, кажется, исправляет недостаток http://sourceforge.net/projects/gccxml-bodies/
gccxml не производит АСТ или на самом деле ничего для тел функций , OP явно хочет, чтобы АСТ его кода цикла. –
Вы правы, спасибо, что указали, что. Я отредактировал ответ, чтобы указать на вилку gccxml, которая также выгружает тела функций. –
ОК, так как он получает зависимости между вычислениями, использующими эти АСТ? –
Вам нужен полный поток данных, чтобы найти зависимости. Тогда вам нужно будет на самом деле вставить вызовы OpenMP.
Что вы хотите, это система преобразования программ. GCC, вероятно, имеет информацию о зависимостях, но для пользовательских проектов работать с ними довольно сложно. Другие упомянули Кланг и Роуз. Clang может быть достойным выбором, но пользовательский анализ/трансформация не является его основной целью. Роза предназначена для поддержки пользовательских инструментов, но IMHO - довольно сложная схема, используемая на практике из-за использования переднего конца EDG, которая не предназначена для поддержки преобразования.
[СЛЕДУЮЩИЙ ТЕКСТ БЫЛ УДАЛЕН МОДЕРАТОРОМ. Я ИМЕЮ ЭТО НАЗАД, ПОТОМУ ЧТО ЭТО ОДНА ДЕЙСТВИТЕЛЬНАЯ СИСТЕМА ТРАНСФОРМАЦИИ ДЛЯ ЭТОЙ ЗАДАЧИ. ФАКТ, ЧТО Я ОТВЕТСТВЕННО ЗА ЭТО, НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ НЕ ОТКАЗЫВАЕТСЯ СВОЕ ЗНАЧЕНИЕ КАК ПОЛЕЗНЫЙ ОТВЕТ НА ОПЫТ.]
Наш набор инструментов для реинжиниринга программного обеспечения DMS со своим передним концом C явно разработан как система преобразования программ. Он имеет полный анализ потока данных (включая анализ точек, анализ графика вызовов и анализ диапазона), привязанный к АСТ разумным образом. Он предоставляет исходные правила перезаписи, позволяющие изменять АСТ, выраженные в форме синтаксиса поверхности; вы можете читать преобразования, а не проверять кучу процедурного кода. С измененным AST, DMS может регенерировать исходный код, включая комментарии в компилируемой форме.
OP четко заявляет, что хочет использовать только gcc ... Это кажется плохим выбором, но это его выбор. –
@Ira Baxter благодарит за информацию. Я расскажу об этом с моей командой и вернусь к вам позже. –
Говорят, что Clang лучше подходит для этой задачи, чем GCC. Я даже не пробовал, так что никаких гарантий. –
Но мне нужно использовать только gcc –
@VishalVijay: Это звучит как искусственное ограничение. Почему вы должны использовать только GCC? –