Je veux automatiser le double duplicata ou le code C similaire dans des fonctions. P>
Cela doit travailler sous Linux. P>
6 Réponses :
Un sous-ensemble de votre problème: détecter le code dupliqué: p>
Essayez: PMD P>
Le code dupliqué peut être difficile à trouver, en particulier dans un vaste projet. Mais le détecteur de copie / pâte de PMD (CPD) peut le trouver pour vous! Le CPD a traversé trois incarnations majeures: P> blockQuote>
- Nous l'avons d'abord écrit en utilisant une variante de l'algorithme de carrelage gourmand à chaîne gourmand de Michael Wise (Notre variante est décrite ici) LI> ul> blockQuote>
- Puis il a été complètement réécrit par Brian Ewins à l'aide de la transformation de Burrows-Wheeler Li>
- Enfin, il a été réécrit par Steve Hawkins pour utiliser l'algorithme correspondant à cordes Karp-Rabin. Li> ul>
... p> blockQuote>
Notez que la CPD fonctionne avec le code Java, JSP, C, C ++, FORTRAN et PHP. P> blockQuote>
J'ai utilisé le CPD pour des tâches similaires dans le code Java. La sortie peut être XML, il est donc «facile» d'automatiser.
Vous voulez jeter un coup d'œil à SIMIAN strong>. C'est gratuit pour des projets non commerciaux. Essayez quelque chose comme:
Le lien de ce message est cassé maintenant. : /
Correction du lien.
SIMIAN (noté précédemment) est un bon outil pour cela. J'utilise CloneDeTective sur mon projet et ça fonctionne bien. Clondetective est libre, il ne peut donc pas faire mal de le faire essayer. P>
Sachez que vous ne pouvez pas simplement comparer des lignes de texte. Vous devrez analyser le code, de cette manière, vous pouvez également détecter des segments sémantiquement corrects, mais peut avoir des identificateurs nommés différents. p>
Par exemple, donnée deux fonctions équivalentes mais utilisez différents identifiants, une recherche de texte ne les verra pas comme identique, mais un analyseur peut. p>
Notez également que la rédaction d'un analyseur C ++ n'est pas une tâche triviale, même lorsqu'elle est donnée la grammaire. Je suggère les conseils des autres et je recherche un outil pour cela. Également la recherche d'outils de refactoring. P>
Thomas est correct: vous voulez un analyseur et des analyseurs de construction sont assez difficiles pour de vrais langatuges. Voir Clonedr Réponse pour un outil de détection de clone qui analyse et gère C et C ++.
voir Clonedr , un outil de recherche de la copie exacte et proche de la manquante (Copy-coller -Dit) clones dans le code source. Il utilise des analyseurs de langue complète pour lui permettre de trouver des clones en fonction de la structure linguistique, de minimiser les faux positifs et d'être complètement indûment de la manière dont le code est commenté ou formaté, maximing la vraie détection. Le clonedr trouvera des clones lorsque le bloc cloné a changé de variable, insérée des statemens ou des blocs de code. P>
Il a des extrémités avant la langue pour C, C ++, Cobol, C #, Java, PHP et un certain nombre d'autres langueurs. P>
Vous pouvez voir des exemples de rapports de détection de clone sur le site Web. P>
https://github.com/hudayou/fib p>
outil pour trouver des blocs de code identiques dans un fichier ou un répertoire. P>
Je préconiserais d'utiliser un outil pour identifier simplement des sections similaires de code. L'automatisation de ce type de refactoring demande des problèmes.
Duplicaté possible: Stackoverflow.com/questions/546487/... < / a>
Idem pour C ++: Stackoverflow.com / Questions / 191614 / ...