【问题标题】:How can I parse VB6 code to count method LOCs?如何解析 VB6 代码以计算方法 LOC?
【发布时间】:2016-12-30 13:06:00
【问题描述】:

我想尝试解析VB代码来分析一些函数/子。

您推荐什么库或方法来解析 VB 代码?我的想法是计算它们并获得它们每个的行数。 (我正在分析 VB4、VB5 和 VB6 文件)。我通常用 C# 和 Python 编写代码。

谢谢

【问题讨论】:

  • 请阅读help center。要求图书馆或其他资源的问题不在主题范围内。
  • 我的哀悼。在 .NET VB 有很多 硬编码的例外情况之前,这就是为什么从来没有一种简单的方法可以从 VB6 迁移到 VB.NET。诸如默认属性之类的东西意味着 非常 通常你不知道你叫什么 - 文本框值或其文本属性?这就是为什么也没有 VB6 重构工具的原因。您可以找到具有 VB6 语法的解析器生成器,但您应该会发现多个问题
  • @shinjidev 您要进行什么样的分析?如果您不需要防弹解析,也许一个简单的正则表达式就足够了,或者一个使用像 ANTLR 这样的解析器生成器的简单解析器就足够了。例如,可以使用正则表达式来计算输入参数
  • @shinjidev 检查例如this question。一组正则表达式模式足以解析遵循特定布局的输入
  • @shinjidev 如果这个问题被关闭,发布一个问题来询问那个精确的东西。幸运的是,计算函数/方法 LOC 相对容易,因为开始和结束很容易识别,即Function whateverEnd Function 最坏的情况是,您可以捕获它们之间的任何文本,使用 ?运算符来捕获最小数量的文本,例如.*? 并计算换行符

标签: c# python parsing vb6


【解决方案1】:

大量代码行计数应用程序可用于 vb6 (https://www.google.com/search?q=vb6+count+lines+of+code)。我使用了目前在谷歌搜索中的第一次点击 (http://www.freevbcode.com/ShowCode.asp?ID=1975),它为我们的需求做了可靠的工作。

它基于每个模块输出统计信息,这可能与您正在寻找的内容一致?例如:

Module Name:  mymodule.bas

           2,662  Total number of lines of code
           2,619  Miscellaneous lines of code
              21  Sub routine headings
               7  Function routine headings
               0  Property Let routine headings
               0  Property Get routine headings
               0  Property Set routine headings
               0  API Declare statements
              15  Constant variables
               0  Type Structures
               1  Auto generated lines (Not Included)
             363  Blank lines (Not Included)
           1,488  Comment lines (Not Included)

源代码 (vb6) 包含在此应用程序中,因此您也可以根据自己的需要对其进行增强。

【讨论】:

  • 谢谢@MarkL,当我尝试搜索与我的要求相似的东西时,我发现了。但是,我需要计算每个函数的代码行数并获取函数的名称。谢谢你的链接。
  • 正如我所指出的,源代码可用于这个应用程序,它显然是识别子和函数,所以我认为让它计数和记录之间的行并不是主要工作子/功能和结束子/功能。但我还没有审查过这个来源,所以这是我的一些猜想。祝你好运!
【解决方案2】:

我终于听从了@PanagiotisKanavos 的建议。 我使用了这样的正则表达式:

var regex = new Regex(@"(Private\s|Public\s)*(Function|Sub)+\s(\w+)(\s*)(\()", RegexOptions.IgnoreCase);

这个正则表达式非常有用,因为它避免了 VB3-6 中库的导入。 最后,计算代码行数的方法是遵循“End Sub”或“End Function”。不知道VB3-6是不是用另一种方式结束函数和方法。

我希望它对某些人有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-25
    • 2011-07-19
    • 2018-05-24
    • 2018-11-23
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多