2013-02-28 4 views
4

Как я могу получить абстрактное синтаксическое дерево программы c в gcc?
Я пытаюсь автоматически вставлять прагмы OpenMP в программу ввода c.
Мне нужно проанализировать вложенные петли for для поиска зависимостей, чтобы я мог вставлять соответствующие OpenMP-прагмы.
Итак, в основном, что я хочу сделать, это пройти и проанализировать абстрактное синтаксическое дерево ввода c-программы.
Как это достичь?Как получить абстрактное синтаксическое дерево программы `c` в` GCC`

+3

Говорят, что Clang лучше подходит для этой задачи, чем GCC. Я даже не пробовал, так что никаких гарантий. –

+0

Но мне нужно использовать только gcc –

+3

@VishalVijay: Это звучит как искусственное ограничение. Почему вы должны использовать только GCC? –

ответ

0

не совсем AST, но GCCXML может помочь http://linux.die.net/man/1/gccxml

редактировать: как заявил Ira Baxter gccxml не выводит информацию о функции/тел методами. Вот вилка, которая, кажется, исправляет недостаток http://sourceforge.net/projects/gccxml-bodies/

+0

gccxml не производит АСТ или на самом деле ничего для тел функций , OP явно хочет, чтобы АСТ его кода цикла. –

+1

Вы правы, спасибо, что указали, что. Я отредактировал ответ, чтобы указать на вилку gccxml, которая также выгружает тела функций. –

+0

ОК, так как он получает зависимости между вычислениями, использующими эти АСТ? –

1

Вам нужен полный поток данных, чтобы найти зависимости. Тогда вам нужно будет на самом деле вставить вызовы OpenMP.

Что вы хотите, это система преобразования программ. GCC, вероятно, имеет информацию о зависимостях, но для пользовательских проектов работать с ними довольно сложно. Другие упомянули Кланг и Роуз. Clang может быть достойным выбором, но пользовательский анализ/трансформация не является его основной целью. Роза предназначена для поддержки пользовательских инструментов, но IMHO - довольно сложная схема, используемая на практике из-за использования переднего конца EDG, которая не предназначена для поддержки преобразования.

[СЛЕДУЮЩИЙ ТЕКСТ БЫЛ УДАЛЕН МОДЕРАТОРОМ. Я ИМЕЮ ЭТО НАЗАД, ПОТОМУ ЧТО ЭТО ОДНА ДЕЙСТВИТЕЛЬНАЯ СИСТЕМА ТРАНСФОРМАЦИИ ДЛЯ ЭТОЙ ЗАДАЧИ. ФАКТ, ЧТО Я ОТВЕТСТВЕННО ЗА ЭТО, НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ НЕ ОТКАЗЫВАЕТСЯ СВОЕ ЗНАЧЕНИЕ КАК ПОЛЕЗНЫЙ ОТВЕТ НА ОПЫТ.]

Наш набор инструментов для реинжиниринга программного обеспечения DMS со своим передним концом C явно разработан как система преобразования программ. Он имеет полный анализ потока данных (включая анализ точек, анализ графика вызовов и анализ диапазона), привязанный к АСТ разумным образом. Он предоставляет исходные правила перезаписи, позволяющие изменять АСТ, выраженные в форме синтаксиса поверхности; вы можете читать преобразования, а не проверять кучу процедурного кода. С измененным AST, DMS может регенерировать исходный код, включая комментарии в компилируемой форме.

+0

OP четко заявляет, что хочет использовать только gcc ... Это кажется плохим выбором, но это его выбор. –

+0

@Ira Baxter благодарит за информацию. Я расскажу об этом с моей командой и вернусь к вам позже. –