C++代码解析器
- Python 3.7.4
- LLVM,版本为最新版本
- Clang,版本为最新版本
- MySQL 5.6
- 首先安装Python的ClangAPI接口,
pip install clang。 - 查找LLVM中的
libclang.so共享库的路径,并更新到parser.py中的Config.set_library_file(libclangPath)中的libclangPath。- 例子:mac安装完llvm的路径为
/usr/local/opt/llvm/lib/libclang.dylib - 例子:windows安装完llvm的路径为
D:/Program Files/LLVM/bin/libclang.dll
- 例子:mac安装完llvm的路径为
- 我是用数据库保存提取的数据,也可以修改为用文件保存,具体格式详见
cpp.sql
C++代码克隆检测
- python 3.7.4
- LLVM,版本为最新版本
- Clang,版本为最新版
- 首先将C++解释器部分Build部分的步骤重新配置一遍,注意更新
cpp_check.py中的libclangPath路径,数据库部分可略过。 - 运行
python cpp_check.py命令,注意这里一共有四个参数--f:装有所有待检测cpp文件的文件夹,为必输项-mt:最少token,有些函数太短了,没有必要检测,非必输项,默认值为0, 小函数的例子:int main(){ slove(); return 0; }-mins:最小相似度,非必输项,默认值为0.7。-maxs:最大相似度,非必输项,默认值为1.0。通过简单观察,相似度在0.9-1.0之间的代码克隆基本上为Type I(代码完全相同)和Type II(修改了部分变量)。相似度在0.6-0.8之间的代码基本为Type II(修改了部分变量)和Type III(增加或删除了部分代码)。
- 最终系统输出为一个
result.txt文件:
python cpp_check.py --f /Users/xuyisen/Downloads/ACM/:最小token为默认值0,最小相似度为默认值0.7,最大相似度为默认值1.0。python cpp_check.py --f /Users/xuyisen/Downloads/ACM/ -mt 10 -mins 0.6 -maxs 0.7,最小token为10,最小相似度为0.6,最大相似度为0.7。
Java代码克隆检测
- python 3.7.4
- javalang,最新版本
- 安装Python的javalang包,
pip install javalang - 运行
python java_check.py命令,注意这里一共有四个参数--f:装有所有待检测cpp文件的文件夹,为必输项-mt:最少token,有些函数太短了,没有必要检测,非必输项,默认值为0。-mins:最小相似度,非必输项,默认值为0.7。-maxs:最大相似度,非必输项,默认值为1.0。
python java_check.py --f /Users/xuyisen/Downloads/ACM/:最小token为默认值0,最小相似度为默认值0.7,最大相似度为默认值1.0。python java_check.py --f /Users/xuyisen/Downloads/ACM/ -mt 10 -mins 0.6 -maxs 0.7,最小token为10,最小相似度为0.6,最大相似度为0.7。
Python代码克隆检测
- python 3.7.4
- 运行
python python_check.py命令,注意这里一共有四个参数--f:装有所有待检测cpp文件的文件夹,为必输项-mt:最少token,有些函数太短了,没有必要检测,非必输项,默认值为0。-mins:最小相似度,非必输项,默认值为0.7。-maxs:最大相似度,非必输项,默认值为1.0。
python python_check.py --f /Users/xuyisen/Downloads/ACM/:最小token为默认值0,最小相似度为默认值0.7,最大相似度为默认值1.0。python python_check.py --f /Users/xuyisen/Downloads/ACM/ -mt 10 -mins 0.6 -maxs 0.7,最小token为10,最小相似度为0.6,最大相似度为0.7。