Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Текст диплома магистра - 12 июня 2014.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.87 Mб
Скачать

3.8 Представление исходного кода в виде токенов

Пусть у нас есть две строки кода for(int a = 0; a <= bb + +) и for(int j = 0; (j — 1) < n;j + +). Очевидно, что у них одинаковая функциональность, и плагиатор мог из одной получить другую без особых усилий, а для ранее описанных представлений они совершенно различны. Чтобы бороться с такого рода средствами сокрытия плагиата, было придумано токенизированное представление кода. Основная идея этого представления — это сохранение существенных и игнорирование всех поверхностных (то есть легко модифицируемых) деталей кода программы. Процедура токенизации выглядит примерно так:

  • Каждому оператору языка (кроме пустого — его игнорируем), который не является операндом, приписываем код, назначенный заранее для каждого класса операторов. Также коды можно приписывать блочным операторам (наприме, begin/end, {}), подключениям библиотек и заголовочных файлов.

  • Строим строку из полученных кодов, сохраняя порядок следования их в исходном коде программы. Один символ строки (токен) — код одного оператора.

Таким образом, автоматически игнорируются названия функций и переменных (классов, объектов и так далее), разделительные символы, предотвращаем влияние мелких изменений кода программы (см. пример выше). Процесс токенизации и разбиение операторов на классы зависят от используемого в исходном коде языка программирования.

К одному классу операторов обычно относят те, которым соответствует один идентификатор языка программирования, все вызовы функций, вызовы методов классов, объявления переменных элементарных типов, объявление экземпляров классов.

  1. Обзор инструментальных средств и сервисов анализа плагиата в программах и произвольных текстах

4.1 Обзор программ поиска плагиата в программировании

Приведём в таблице 1 обзорные данные о программах поиска плагиата в программирования, взятые из различных источников [11].

Таблица 1 Программы поиска плагиата в исходных кодах

Детектор

Языки

Модель

Алгоритм

Accuse

Fortran

n-мерное пространство

атрибутный метод

SIM

C, Java, Pascal,

Modula-2, Miranda

Токены

поиск по матрице совпадений подстрок

JPlag

C/C++, Java, Scheme

Токены

жадное строковое замощение

MOSS

C/C++, C#, Java, a8086 assembly и др.

сигнатура кода

метод отпечатков

Plague

Pascal, Modula-2, Prolog

токены

набор метрик

Sherlock

Pascal и др.

текст, токены

аналог Plague, нейросеть

Plan-X

SML

XML формат

использоване XML

Продолжение таблицы 1

SID

С++, Java

токены

вычисление метрики на основе Колмогоровской сложности