Ho bisogno di uno strumento per trovare i duplicati o blocchi simili di testo in un file di testo singolare o una serie di file di testo

StackOverflow https://stackoverflow.com/questions/1908139

Domanda

Voglio automatizzare lo spostamento duplicato o codice C simile in funzioni.

Questo deve funzionare sotto Linux.

È stato utile?

Soluzione

Un sottoinsieme del problema: la rilevazione di codici duplicato:

Prova: PMD

  

Duplica codice può essere difficile da trovare, soprattutto in un grande progetto. Ma di PMD copia / incolla Detector (CPD) può trovare per voi! CPD è stato attraverso tre principali incarnazioni:

     
      
  • Per prima cosa abbiamo scritto usando una variante dell'algoritmo String rivestimenti Greedy di Michael Wise (il nostro variante è descritto qui)
  •   
  • Poi è stato completamente riscritto da Brian Ewins utilizzando il Burrows-Wheeler trasforma
  •   
  • Infine, è stato riscritto da Steve Hawkins di utilizzare l'algoritmo stringa corrispondente Karp-Rabin.
  •   
     

...

     

Si noti che CPD funziona con Java, JSP, C, C ++, Fortran e il codice PHP.

Altri suggerimenti

Ti consigliamo di dare un'occhiata a Simian . E 'gratuito per i progetti non commerciali. Provare qualcosa di simile:

# Find all C source files and identify similarities/duplicate code.
simian -includes=**/*.c -excludes=**/*_test.c

Simian (indicato in precedenza) è un buon strumento per questo. Sono stato con CloneDetective sul mio progetto e funziona benissimo. CloneDetective è libero, quindi non può far male a fare un tentativo.

Si tenga presente che non si può semplicemente confrontare righe di testo. Si dovrà analizzare il codice, in questo modo, si potrebbe anche rilevare i segmenti che sono semanticamente corretto, ma possono avere differenti identificatori di nome.

Per esempio, dati due funzioni che sono equivalenti, ma usano differenti identificatori, una ricerca testo non vederli come identici, ma un parser può.

Si noti inoltre che la scrittura di un parser C ++ non è un compito banale, anche se data la grammatica. Suggerisco i consigli degli altri e cercare uno strumento per questo. Cerca anche per strumenti di refactoring.

CloneDR , uno strumento per la ricerca di copia esatta e vicino-miss (copia-incolla -edit) cloni nel codice sorgente. Esso utilizza parser lingua completo per consentirgli di trovare cloni in base alla struttura del linguaggio, riducendo al minimo i falsi positivi, e di essere completamente indendent di come il codice è commentato o formattato, maximing così vero rilevamento. Il CloneDR troverà cloni quando il blocco clonato è cambiato variabile, statemens o blocchi di codice inserito.

E 'davanti lingua finisce per C, C ++, COBOL, C #, Java, PHP e una serie di altri linguaggi.

È possibile visualizzare i report di rilevamento del campione clone sul sito.

https://github.com/hudayou/fib

strumento per trovare blocchi di codice identiche in un file o una directory.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top