Я пытаюсь проанализировать c++
файлы, используя мой собственный анализатор (написанный на c++
).Перед началом разбора я бы хотел избавиться от всего #define
.Я хочу, чтобы исходный файл был компилируемым после предварительной обработки.Поэтому лучшим способом будет запустить файл C Preprocessor
.
cpp myfile.cpp temp.cpp
// or
g++ -E myfile.cpp > templ.cpp
[Новые предложения приветствуются.]
Но из-за этого исходные строки и их номера строк будутпотеряно, поскольку файл будет содержать всю информацию заголовка также, и я хочу сохранить номера строк.Итак, выход, который я решил, это:
- Добавить специальный символ перед каждой строкой в исходном файле (кроме препроцессоров)
- Запустить препроцессор
- Извлечьстроки с этим специальным символом и проанализируйте их
Например, типичный исходный файл будет выглядеть следующим образом:
#include<iostream>
#include"xyz.h"
int x;
#define SOME value
/*
** This is a test file
*/
typedef char* cp;
void myFunc (int* i, ABC<int, X<double> > o)
{
//...
}
class B {
};
После добавления символа он будет выглядеть так:
#include<iostream>
#include"xyz.h"
@3@int x;
#define SOME value
@5@/*
@6@** This is a test file
@7@*/
@8@typedef char* cp;
@9@
@10@void myFunc (int* i, ABC<int, X<double> > o)
@11@{
@12@ //...
@13@}
@14@
@15@class B {
@16@};
Как только все макросы и комментарии будут удалены, у меня останутся тысячи строк, в которых несколько сотен будут исходным исходным кодом.
Правильный ли этот подход?Я пропустил какой-нибудь угловой шкаф?