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:

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
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
"^[\\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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
"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