java - 什么是合适的词法分析器生成器,我可以使用它从许多语言源文件中去除标识符?

标签 java parsing lexer

我正在为我的大学开展一个小组项目,该项目将用于计算机科学中的剽窃检测。

我的小组主要使用这篇期刊文章中描述的哈希/指纹识别技术:Winnowing: Local Algorithms for Document Fingerprinting .这与 MOSS 的方式非常相似剽窃检测系统有效。

我们基本上是获取同学源代码的 k-gram 哈希值,并在数据库中查找它们以进行相关匹配(以及我们如何确定选择哪些哈希值作为文档指纹的大量优化)。

我们项目的第一个方面是它的“前端”部分,它将包含关于我们的检测系统可以处理的每种文件格式的一些语义知识。这将使我们能够从文档中删除一些我们不再需要的细节,以进行剽窃检测。基本上我们希望能够将各种编程语言中的所有变量重命名为常量字符串或字母。

什么是我们可以用来帮助将不同语言源代码文件中的所有变量重命名为常量的轻量级解决方案(词法分析器生成器或类似的东西)?

我们的项目是用 Java 编写的。

理想情况下,我只是希望能够为每种语言定义一个语法,然后我们的前端将能够将该语言源文件中的所有标识符重命名为某个常量。然后,我们将为我们想要支持的每种文件格式(java、c++、python 等)执行此操作。

最佳答案

对于词法分析器/解析器生成器,您应该查看 ANTLR。 TXL,一个文本转换解释器,也值得一看。两者都应该有现成的语法。

关于java - 什么是合适的词法分析器生成器,我可以使用它从许多语言源文件中去除标识符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2120026/

相关文章:

go - 遇到错误 - 在 golang 中实现词法分析器时,所有 go 例程都处于休眠状态

antlr - 如何获取 Antlr 解析器规则以从默认和隐藏 channel 读取

java - 为什么在 FXML 中添加两个 ColumnConstraint?

java - 无法使用 <portlet :actionURL> 调用 portlet 的方法

java - Java 默认使用 HttpsURLConnection 信任哪些证书?

html - 在 Ruby 中获取页面上所有 href 内容的最简单方法?

javascript - JQuery JSON 解析/AJAX 问题 ('remove' 和 '__proto__' 数组中的键?)

通过换行符错误使用 strtok 拆分 C 字符串

parsing - 我将如何着手实现一种简单的基于堆栈的编程语言

java - 正确对齐控制台输出表中的列并从零开始计数