查找注释掉一行的部分

时间:2013-11-01 10:17:12

标签: vb6

vb6用于查找标记评论开头的撇号的规则是什么 一部分线?

由于以下原因,我对我定义此类规则的能力没有信心:

  • 字符串文字内的撇号
  • 字符串操作中嵌套双引号内的撇号
  • 注释中可能出现双引号的事实
  • 一条线可以在多条线上继续
  • 冒号分解一行
  • 我可能没有意识到的其他规则

3 个答案:

答案 0 :(得分:2)

字符串文字中的撇号被忽略。评论中的撇号也被忽略(因为它们已经在评论中)。你不能把撇号放在多行语句中,除非它在语句的最后一行 - 在这种情况下它只是遵循正常的规则。

你为什么如此关注?

答案 1 :(得分:2)

如果您真的想知道,VBA language specification在MSDN上在线并且具有BNF语法。 VBA与VB6相当99% - 当然,关于识别注释的规则必须相同。


如果您正在尝试消除死代码 - 只需获取MZ-Tools!免费。使用代码审查工具。 “MZ-Tools可以在项目组,项目或文件级别(通过上下文菜单)检查源代码,检测未使用的变量,常量,参数,私有程序等。”要消除未使用的子和函数,请使用列出所有调用者的MZ-Tools功能。


编辑评论中讨论了如何消除未经声明为Public的项目:MZ工具对此没有帮助。

答案 2 :(得分:0)

这似乎适用于我尝试的任何示例 它使用的唯一规则是忽略字符串文字中的撇号 并且它没有考虑使用单词rem来开始评论。 令我感到羞耻的是,直到昨天我才意识到“”“”(4个双引号)是一个包含单引号的字符串文字。

Public Function CommentStripOut(ByVal strLine As String) As String


Dim InLiteral As Boolean
Dim strReturn As String
Dim LenLine As Long

Dim counter As Long
Dim s1 As String
Dim s2 As String


strReturn = strLine
LenLine = Len(strLine)

InLiteral = False


For counter = 1 To LenLine

    s1 = Mid$(strLine, counter, 1)

    If counter < LenLine Then
        s2 = Mid$(strLine, counter + 1, 1)
    Else
        s2 = ""
    End If

    If s1 = """" Then
        If Not InLiteral Then
            InLiteral = True
        Else
            If s2 = """" Then
                counter = counter + 1
                'skip on by 1 because
                'want to treat escaped
                'double quote as a single
                'character
            Else
                InLiteral = False
            End If
        End If
    Else
        If Not InLiteral Then
            If s1 = "'" Then
                strReturn = Left$(strLine, counter - 1)
                Exit For
            End If
        End If
    End If


Next counter

CommentStripOut = strReturn

End Function