【问题标题】:Tool to find commented out VHDL code查找注释掉的 VHDL 代码的工具
【发布时间】:2011-03-08 17:30:34
【问题描述】:

This question 提出一般性问题。我特别问的是 VHDL,因为问题的答案提到的工具是用于 Java 和 PL/SQL 的。它不需要完美,一些手动解释就可以了。我这样做是为了自动提交任务。

编辑 3/9/11:@phillipe 指出自动提交任务与手动解释不一致。我试图鼓励其他工程师摆脱代码并看到他们做到了。我想一个悲观的工具会更好的提交;如果它错过了一些不是世界末日的代码。或者我可以让它报告这些行的数量并给我发电子邮件而不是停止提交。

【问题讨论】:

  • 您的用例到底是什么?如果您在提交挂钩中使用此脚本,您将无法进行任何手动解释。

标签: comments vhdl


【解决方案1】:

在我看来,理想的答案要求您将可以识别语言子字符串的解析器应用于每个评论的内容。如果语法错误率与注释的大小相比较小,那么您已经注释掉了代码。

为此,您需要一个愿意解析不完整代码片段的解析器。提供源到源转换的程序转换系统(如果你看到这个结构,用那个结构替换它)内置了这个机制;他们必须解析包含源到源转换的代码模式,这些转换通常是语言句子形式。

我们的DMS Software Reengineering Toolkit 正好有这个属性。与 DMS 一样,它必须配置为解析 VHDL(或 Verilog)[这很简单,DMS 具有完整的 VHDL、Verilog 和 SystemVerilog 前端),扫描解析树,找到附加的 cmets(DMS 在解析时捕获 cmets ),然后尝试使用 DMS 的内置“模式解析器”解析 cmets。需要一些簿记来计算语法错误。所以这是可能的。

我怀疑这不值得麻烦。您的正则表达式启发式可能非常好,尤其是在有人支持时,如果该人不介意进行额外的代码审查。

【讨论】:

    【解决方案2】:

    这是我目前使用的

    egrep  "^\s*--.*[;,]$" *.vhd
    

    即,查找可能有空格的行,然后是文本,并以 ; 结尾或者 ,。我发现 cmets 中的逗号是正常的,但是这两个字符经常是 cmets out 代码,因为它们经常用于 VHDL 行的末尾。

    使用@Freddy Mallet 在引用的关于关键字中的建议,我想出了这个。我尝试使用英语中不常用的 VHDL 关键字。这往往适用于相同的代码,但在 cmets 上遇到了麻烦,例如“处理 ...”。您可能希望使用 egrep -f 并将正则表达式放入文件中。

      egrep "^\s*--.*([;,]$|\s(architecture|array|assert|begin|block|case|component|downto|elsif|entity|generate|generic|inout|library|null|package|port|range|records|select|signal|type|until)\s)" src/*.vhd    
    

    【讨论】:

    • 我喜欢!这是 Verilog(单行 cmets)的版本:egrep '^\s*//.*[;,]$' *.v。我的 shell 对$ 不满意,所以我改用单引号。当然,这不适用于 Verilog 块 cmets /**/
    猜你喜欢
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 2017-02-28
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 2012-02-24
    相关资源
    最近更新 更多