我正在为我的大学开展一个小组项目,该项目将用于计算机科学中的抄袭检测。
我的小组主要使用这篇期刊文章中描述的散列/指纹技术:Winnowing: Local Algorithms for Document Fingerprinting。这与MOSS抄袭检测系统的工作方式非常相似。
我们基本上是在获取同学源代码的 k-gram 散列,并在数据库中查找相关匹配项(以及在我们如何确定选择哪些散列作为文档指纹方面进行大量优化)。
我们项目的第一个方面是它的“前端”部分,它将包含有关我们的检测系统可以处理的每种文件格式的一些语义知识。这将允许我们从文档中删除一些我们不再需要的用于剽窃检测的细节。基本上,我们希望能够将各种编程语言中的所有变量重命名为常量字符串或字母。
我们可以使用什么轻量级解决方案(词法分析器生成器或类似的东西)来帮助将不同语言源代码文件中的所有变量重命名为常量?
我们的项目是用 Java 编写的。
理想情况下,我只想能够为每种语言定义一个语法,然后我们的前端将能够将该语言源文件中的所有标识符重命名为某个常量。然后,我们将为我们想要支持的每种文件格式(java、c++、python 等)执行此操作。