【问题标题】:Parser generation解析器生成
【发布时间】:2010-10-20 10:04:16
【问题描述】:

我正在做一个关于SOFWARE PLAGIARSM DETECTION的项目..我打算用语言C..因为我应该创建一个令牌生成器和一个解析器..但是我不知道从哪里开始..任何人都可以帮助我解决这个问题..

我创建了一个令牌数据库,并将令牌从我的程序中分离出来。接下来我想做的是比较两个程序,看看它是否被抄袭。为此我需要创建一个语法分析器。我不知道从哪里开始......

即我想为python中的c程序创建一个解析器

【问题讨论】:

  • 确实:这是什么我什至都不知道
  • 我确定有一些代码可以复制。
  • 也许 OP 意味着他想对用 C 编写的程序进行抄袭检测,使用 Python 作为编写检测器的语言,反之亦然。需要更多信息。
  • +1 提出一个合理的问题,以帮助抵消所有问题。似乎很清楚他在问什么。再说一次,我已经构建了克隆检测器,所以我可能对措辞很敏感。

标签: python parsing plagiarism-detection


【解决方案1】:

如果您想在 Python 中创建解析器,可以查看以下库:
PLY
pyparsing
Lepl - 新但非常强大

【讨论】:

  • 只有当 OP 定义了一个非常简单的 C 模型时,这些才是好主意,这对于学术项目来说可能没问题。
【解决方案2】:

自己构建一个真正的 C 解析器是一项真正艰巨的任务。

我建议你要么找到一个已经完成的,例如。 pycparser 或者您定义了一个非常简单且易于解析的 C 子集。

在您完成 C 的解析之后, 之后,您的抄袭检测器还有很多工作要做。

【讨论】:

  • 已经构建了解析器和克隆检测器,我认为它们几乎同样困难。 C 至少有一个文档化的定义作为参考(在某种程度上,真正的编译器与它的差异超出了您的预期);对于克隆检测,您需要确定要使用的启发式方法,然后尽您所能使它们尽可能有效。作为可用于 C 代码的一种实现,请参阅 citeseerx.ist.psu.edu/viewdoc/…
【解决方案3】:

我不确定您是否需要解析令牌流来检测您正在寻找的功能。事实上,它可能会使事情变得比任何事情都复杂。

您真正要寻找的是与正在测试的可疑示例代码具有高度相似性的原始源代码序列。这听起来与Bayes classifier 的用途非常相似,例如用于垃圾邮件过滤和语言检测的用途。

【讨论】:

  • 取决于他的探测器的用途。如果你想对 C 源代码的剽窃问题做出好的回答,你需要以一种独立于格式的方式来做这件事。比较“文本行”不会这样做;所以,你需要一些不是线条的东西。令牌是执行此操作的有用谷物。更好的是抽象语法树,这似乎是 OP 所追求的;请参阅我的答案,以获取有关此功能的技术论文的参考。
猜你喜欢
  • 2012-09-13
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-06
相关资源
最近更新 更多