Ho una base di codice progettata attorno alla memoria condivisa. Ogni processo che deve accedere alla memoria lo mappa nel proprio spazio di indirizzamento. Le strutture dati nella memoria condivisa sono direttamente accessibili, cioè non c'è API. Ad esempio:
Supponi quanto segue:
typedef struct {
int x;
int y;
struct {
int a;
int b;
} z;
} myStruct;
myStruct s;
Quindi un processo potrebbe accedere a questa struttura come:
myStruct *s = mapGlobalMem();
E usalo come:
int tmpX = s->x;
La maggior parte delle informazioni nella struttura globale sono informazioni di configurazione che vengono impostate una volta e lette più volte. Vorrei memorizzare queste informazioni in un database e sviluppare un'API per accedere al database. Il problema è che questi riferimenti sono cosparsi in tutto il codice. Ho bisogno di un modo per analizzare il codice e identificare i riferimenti alle strutture globali che dovranno essere refactored.
Ho esaminato l'utilizzo di ANTLR per creare un parser che identificherà i riferimenti a un piccolo insieme di strutture e inserirli in un tabella dei simboli personalizzati. Potrei quindi utilizzare questa tabella dei simboli per identificare quali file di origine devono essere sottoposti a refactoring. Sembra un approccio promettente.
Quali altri approcci ci sono? Certo, sto cercando un approccio programmatico. Ci sono troppi file sorgente per esaminarli visivamente.
Questo è tutto normale ANSI C. Nient'altro.