Notre SD Source Code Search Engine (SCSE) peut facilement le faire.
SCSE est un outil de recherche de bases de code source de grande taille, beaucoup plus rapide que grep, en indexant les éléments des langages de code source d'intérêt. Des requêtes peuvent alors être posées, qui utilisent l'index pour permettre une localisation rapide des résultats de recherche. Les requêtes et les hits sont affichés dans une interface graphique, et un clic sur un hit affichera le bloc de code source contenant le hit.
Le SCSE connaît la structure lexicale de chaque langage qu'il a indexé avec la précision en tant que compilateur de ce langauge. (Il utilise front ends de la famille des processeurs de langage de programmation précis, cette famille est assez grande et inclut le langage cible OP de Python/Perl/Java/...). Ainsi, il sait exactement où sont les identifiants, les commentaires et les littéraux (intégrale, flottante, caractère ou chaîne), et exactement leur contenu.
Les requêtes SCSE sont composées de commandes représentant des séquences d'éléments de langage d'intérêt. La requête
'for' ... I '=' N=103
trouve un pour mot-clé près ("... ") un identifiant arbitraire (I) qui est initialisé ("= ") avec la valeur numérique (" N") de 103. En raison SCSE comprend la structure de la langue, il ignore les espaces-langues entre les jetons, par exemple, il peut trouver ceci indépendamment des espaces vides, des espaces, des retours à la ligne ou des commentaires. Les jetons de requête I, N, F, S, C représentent I (identifiant), Natural (nombre), F (drapé), S (tring) et C (omment) respectivement. La question initiale de l'OP, de trouver tous les flotteurs, est donc la presque triviale requête
F
De même pour trouver toutes les littéraux de chaîne (« S ») et littéraux intégrale (« N »).Si vous voulez trouver seulement des copies des valeurs proches de Pi, vous souhaitez ajouter des contraintes liées faible et supérieur:
F>3.14<3.16
(Il est assez drôle de l'exécuter sur les grands codes Fortran, vous voyez toutes sortes de mauvaises approximations de Pi).
SCSE ne trouve pas de flottant dans un commentaire ou une chaîne, car il connaît intimement la différence. Écrire une expression de type grep pour gérer toutes les combinaisons étranges afin d'éliminer les espaces ou les citations et les délimiteurs qui vous entourent devrait être évidemment beaucoup plus douloureux. Grep n'est pas le moyen de le faire.
Komodo a une recherche regex que vous pouvez utiliser avec un motif de recherche regex. – pyfunc
Ahh, je me doutais que ça viendrait à ça ... n'est-ce pas quelque chose d'habituel? Et existe-t-il une expression regex testée pour fonctionner en Python? – max