Я хочу создать инструмент, который может анализировать код C и C ++ и обнаруживать нежелательное поведение на основе файла конфигурации. Я думал об использовании ANTLR для этой задачи, так как уже несколько лет с нуля создавал простой компилятор с ним go (переменные, условия, циклы и функции).
Я схватил C. g4 и CPP14.g4 из хранилища грамматик ANTLR. Однако я заметил, что они не поддерживают разбор предварительной обработки, так как это другой этап компиляции.
Я попытался найти грамматику, выполняющую часть предварительной обработки (обновлено до ANTLR4 ) без удачи. Более того, я также понял, что если я буду go с двухэтапным разбором, я не смогу сохранить исходные местоположения каждого символа, так как я уже изменил поток ввода.
I Интересно, есть ли хорошая грамматика или программа ANTLR (предпочтительно Python, но может работать и с другими языками), которая может помочь мне предварительно обработать код C. Я также думал об использовании gcc -E
, но тогда я не смогу проверить определения макросов (например, я хочу предупредить, если пользователь использовал #pragma GCC
(некоторые студенты в моем университете, для которых я пишу это запрограммировать, использовал это, чтобы обойти некоторые ограничения стиля кодирования курса. Более того, gcc -E
будет включать содержимое заголовка библиотеки, которое я не хочу обрабатывать.
Поэтому мой вопрос, если вы может порекомендовать мне грамматику / программу, которую я могу использовать для предварительной обработки C и кода на C ++. В качестве альтернативы, если вы можете подсказать мне, как создать грамматику самостоятельно, которая была бы идеальной. Я смог написать основы c #define
, #pragma
и c. Обработок, но я не могу разобраться с условиями и с макрос-функциями, так как не знаю, как с ними обращаться.
Заранее спасибо !