0

行のコメントアウト部分の開始を示すアポストロフィを見つけるために vb6 が使用する規則は何ですか?

次の理由により、そのようなルールを定義する能力に自信がありません。

  • 文字列リテラル内のアポストロフィ
  • 文字列操作でネストされた二重引用符内のアポストロフィ
  • コメントで二重引用符が発生する可能性があるという事実
  • 行が複数の行にまたがることができるという事実
  • 1 行を分割するコロン
  • 私が知らない他のルールの可能性
4

3 に答える 3

2

本当に知りたい場合は、 VBA 言語仕様が BNF 文法と共に MSDN でオンラインになっています。VBA は VB6 と 99% 同等です。コメントの識別に関するルールは同じでなければなりません。


また、デッド コードを排除しようとしている場合は、MZ-Toolsを入手してください。それは無料です。コード レビュー ツールを使用します。「MZ-Tools は、プロジェクト グループ、プロジェクト、またはファイル レベルで (コンテキスト メニューを使用して) ソース コードを確認し、未使用の変数、定数、パラメーター、プライベート プロシージャなどを検出できます。」未使用のサブルーチンと関数を削除するには、すべての呼び出し元を一覧表示する MZ-Tools 機能を使用します。


EDITとして不必要に宣言されたアイテムを削除する方法についてのコメントで議論がありますPublic: MZ Tools はこれを助けません。

于 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 に答える