2

能否在合理的时间内定制 PMD 以完全支持一种新语言。我的意思是我知道技术上几乎任何事情都可以完成,但我想知道这是否可以在合理的时间内完成?例如 < 2 周

此页面提到如何编写 CPD 解析器http://pmd.sourceforge.net/cpd-parser-howto.html

但这只是用于复制/粘贴检测吗?编写 CPD 解析器是否可以让我在 rile 集方面完全支持 PMD?

4

1 回答 1

3

我猜不会,但我不是 PMD 专家(我有自己的偏见,请查看我的简历)。

问题是:

  • 你能快速为我的语言定义一个语法吗(也许,取决于你有多好,语言有多混乱,以及 PMD 提供的解析机器的强度)
  • 您能否定义我的语言的语义,以便 PMD 提供的“语义检查”起作用。您必须这样做,因为语法实际上并没有告诉您(和工具)有关语法语义的任何信息。我猜想 PMD 工具的“语义检查”与 Java 的精确细节非常相关。如果您的语言与 java 完美匹配,这将是零工作。但事实并非如此,否则你不会问这个问题。语言语义差异,即使是很小的差异,也会导致代码解释的不连续变化。在你开始做“严肃”的语义之前,你可能必须建立一个符号表,将代码中的标识符映射到这些符号的声明(和“语义”类型)。基于我使用的工具基础架构,
  • 最后,您可能必须编写特定于您的语言的特殊 PMD 检查。这也需要时间和精力。

我构建了通用的编译器类型的机器(解析器、流分析器、样式/错误检查器),并且一直被问到这个问题的等价物 WRT 到我们的机器。我们尝试提供大量可用的机器,尝试让新语言的集成变得容易,并且我们一直在努力让这种“方便和快速”超过 15 年。它仍然不方便,并且在几周内使用我们的工具无法做到这一点。我怀疑PMD更好。

于 2010-05-21T19:08:24.337 回答