Bonjour
Je souhaite optimiser un parseur de fichier que j'avais déjà mis en place. L'idée est de parser toutes les fonctions appelés dans un fichier source .c
Je souhaite réecrire le parseur en utilisant les regex via la librairie regex de java. Après brève lecture, j'ai pondu un premier code pour tester que voici:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
public void parserFonction(String file){
String regexFct = "^[\\w]+[\\s]*\\([\\s]*[\\w]*[\\s]*(,[\\s]*[\\w]*)*[\\s]*\\)" +
"[\\s]*;[\\s]*$";
//compilation de l'expression
Pattern fonction = Pattern.compile(regexFct);
//objet effectuant la recherche
Matcher match = fonction.matcher(file);
//Verification
if(!match.matches())
System.out.println("Pas de fonction !");
//match.reset();
while(match.matches()){
System.out.println(match.group(0));
}
} |
L'expression regulière :
"^[\\w]+[\\s]*\\([\\s]*[\\w]*[\\s]*(,[\\s]*[\\w]*)*[\\s]*\\)[\\s]*;[\\s]*$";
me permet de matcher les fonctions. Expression que j'ai testé avec le plugin regexutil d'Eclipse.
En testant sur une chaine de caractère comme celle ci:
"enuLocalGDUGetStDgo = GDU_tenuGetStDgo(u16LocalIndex);"
J'ai le résultat:
Preuve que la fonction n'est pas matchée. Savez vous pourquoi? J'ai cru comprendre que l'objet matcher permettait de matcher toutes les occurences des chaines qui correspondent au pattern(regex), présentes dans la chaine.
Cordialement
Partager