-
extraire une fonction?
bonjour,
voila, j'essaie d'extraire une fonction d'un fichier.
ce que je veux dire , c'est que je dois extaire (automatiquement) de sources une fonction dont j'ai le nom et dont j'ai le fichier dans lequel elle se trouve (c'est du java) et il faut que je la mettre dans un string.
en clair
dans le fichier
....
blabla
....
public NOM(x1){
// code java
{dqsdqd
}{dqdsq}{qds{dqdsqd}dqsd}
}
etc etc..
et moi dans mon prgramme je dois arrivé a mettre dans std::string nom toute la fonction cad
std::string ="
public NOM(x1){
// code java
{dqsdqd
}{dqdsq}{qds{dqdsqd}dqsd}
}
"
je dois arrivé a un truc comme cela
y a il des librairies qui font ca directement?? ou bien qqch qui me simplifierais la vie??
merci
a++
-
Il y a beaucoup de code qui fait ce genre de choses, et même bien plus. Trop même souvent. Regarde n'importe quel compilateur, analyseur de code à la doxygen, outil de coloration syntaxique... en code libre.
Mais en l'occurrence, ce n'est pas très dur à faire, soit semi-manuellement soit manuellement. Il s'agit d'abord de rechercher le nom de la fonction, puis de parcourir le texte manuellement. A chaque fois que tu trouves un {, tu incrémentes un compteur, un }, tu le décrémentes. Il arrive à 0 à la fin de la fonction. Après, faut tenir compte des { dans les commentaires et les littéraux, mais ça me semble tout de même assez simple.
-
Il faut aussi faire attention à ce qu'on ne soit pas dans une chaîne littérale.
-
-
hi,
excusez moi pour ma reponse tardive,
loufoque et JolyLoic >> c'est beaucoup plus compliquer que cela, par exemple si la fonction est appelé d'une autre fonction dans le meme fichier. il va d'abord s'arreté sur cette appelle. alors on pourrais dire qu'il faut que cela soit suivi d'une { oiu mais il il y en a qui ecrive comme cela.
....
blabla(e);
....
void
blabla(E x)
{
}
ou alors il faut faire caractere par caractere, mais alors on a plus la notion de tokens (et donc de literal.)
sinon, effectivement etags me sort des trucs interressants, vais voir en profondeur.
merci
a++
-
Effectivement, c'est plus complexe. Il y a aussi peut-être les cas où une même fonction est définie dans deux classes dans le même fichier, je ne sais pas si c'est possible en java.
Une alternative à la recherche du nom de fonction suivi d'une accolade pourrait être de maintenir le contexte courant, et d'ignorer le nom de la fonction si on est à l'intérieur d'une autre fonction. Je ne connais pas assez Java pour savoir si ce serait simple ou non.
Maintenant, [c/e]tags proposés par Luc sont probablement une meilleure solution.