Мне нужен инструмент для нахождения дубликатов или подобных блоков текста в исключительном текстовом файле или наборе текстовых файлов

Я хочу автоматизировать движущийся дубликат или подобный код C в функции.

Это должно работать в соответствии с Linux.

5
задан luke 15 December 2009 в 17:17
поделиться

5 ответов

Подмножество вашей проблемы: Обнаружение повторяющегося кода:

Попробуйте: PMD

Может быть трудно найти повторяющийся код, особенно в большом проекте. Но детектор копирования / вставки (CPD) PMD может найти это за вас! CPD пережил три основных воплощения:

  • Сначала мы написали его, используя вариант алгоритма «жадной строковой мозаики Майкла Вайза» (наш вариант описан здесь)
  • . Затем он был полностью переписан Брайаном Юинсом с использованием преобразования Барроуза-Уиллера
  • Наконец, он был переписан Стивом Хокинсом для использования алгоритма сопоставления строк Карпа-Рабина.

...

Обратите внимание, что CPD работает с кодом Java, JSP, C, C ++, Fortran и PHP.

4
ответ дан 14 December 2019 в 04:39
поделиться

Be aware that you can't just compare lines of text. You will have to parse the code, in this manner, you could also detect segments that are semantically correct but may have different named identifiers.

For example, given two functions that are equivalent but use different identifiers, a text search will not see them as identical, but a parser can.

Also note that writing a C++ parser is not a trivial task, even when given the grammar. I suggest the advice of others and seek out a tool for this. Also search for refactoring tools.

1
ответ дан 14 December 2019 в 04:39
поделиться

Обезьяна (отмеченная ранее) - хороший инструмент для этого. Я использую CloneDetective в своем проекте, и он отлично работает. CloneDetective распространяется бесплатно, поэтому не помешает попробовать.

1
ответ дан 14 December 2019 в 04:39
поделиться

Вы захотите взглянуть на Симиан . Это бесплатно для некоммерческих проектов. Попробуйте что-нибудь вроде:

# Find all C source files and identify similarities/duplicate code.
simian -includes=**/*.c -excludes=**/*_test.c
1
ответ дан 14 December 2019 в 04:39
поделиться

Смотрите CloneDR, инструмент для поиска точных копий и близких к ним (copy-paste-edit) клонов в исходном коде. Он использует полный разбор языка, что позволяет ему находить клоны в соответствии со структурой языка, минимизируя количество ложных срабатываний, и быть полностью независимым от того, как код прокомментирован или отформатирован, тем самым максимизируя истинное обнаружение. CloneDR находит клоны, если в клонированном блоке изменена переменная, вставлены статусы или блоки кода.

Он имеет языковые интерфейсы для C, C++, COBOL, C#, Java, PHP и ряда других языков.

Примеры отчетов об обнаружении клонов можно посмотреть на сайте.

1
ответ дан 14 December 2019 в 04:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: