Question sur le parser de CDT
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:
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:
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