0

vb6 使用什么规则来查找标记一行注释掉部分开头的撇号?

我对自己定义此类规则的能力没有信心,因为:

  • 字符串文字中的撇号
  • 字符串操作中嵌套双引号内的撇号
  • 注释中可能出现双引号的事实
  • 一条线可以连续多条线的事实
  • 冒号分隔单行
  • 我不知道的其他可能的规则
4

3 回答 3

2

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

你为什么这么担心?

于 2013-11-01T17:23:39.680 回答
2

如果你真的想知道,MSDN 上的VBA 语言规范是在线的,带有 BNF 语法。VBA 与 VB6 有 99% 的等效性——当然,关于识别注释的规则必须相同。


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


编辑评论中有关于如何消除不必要地声明为的项目的讨论Public:MZ工具对此没有帮助。

于 2013-11-01T18:44:13.817 回答
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
于 2013-11-02T10:27:04.287 回答