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:
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
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); } }
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.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5 #define MACRO() AppelUneFonction(); case VALEUR: MACRO() if (.....)
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
Partager