Bonjour � tous,

je cherche � parser du code C sous CDT pour extraire un arbre d'appel des fonctions dans un programme C. Je sais, cela existe d�j� car une vue le fait d�j�, mais j'en ai besoin pour une autre fonction.

Pour cela j'utilise le code suivant:

Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  @Override
  protected void extractElements(ITranslationUnit translation) {
    IResource resource = translation.getResource();
    if (resource instanceof File) {
      IASTTranslationUnit ast;
      try {
        ast = CDOM.getInstance().getTranslationUnit((IFile) resource,true);
        FunctionNavigator navigator = new FunctionNavigator();
        navigator.parseFile((CASTTranslationUnit) ast,functionCollector);
      } catch (UnsupportedDialectException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    } else {
      System.out.println("Je n'ai pas pu obtenir la translation de la ressource " + resource);
    }
  }
cela fonctionne bien sauf que cela ne fonctionne pas quand les fonctions sont appel�es par l'interm�diaire d'une macro, comme l'exemple ci dessous

Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
#define MACRO() AppelUneFonction();
 
   case VALEUR:
     MACRO()
     if (.....)
Dans ce cas, le parser se plante car il croit que MACRO() est une fonction. Il me dit donc qu'il manque le ; apr�s l'appel de la fonction.

ma question est donc la suivante:
Pour r�soudre mon probl�me, il faut que j'obtienne une translationUnit du source preprocess�. Qui peut m'aider la dessus.


Pour info, la vue Call Hierarchy de CDT se plante aussi avec mon probl�me

merci