2013-11-01 3 views
0

Каковы правила, которые vb6 использует для поиска апострофа, который отмечает начало прокомментированной части строки (-ов): ?Поиск прокомментированной части строки

Я не чувствую уверен в своей способности определять такие правила из-за:

  • апострофов внутри строковых литералов
  • апострофа внутри вложенных двойных кавычек в строковых операциях
  • того факт, что двойные кавычки могут встречаются в комментариях
  • факт, что линия может быть продолжена по нескольким линиям
  • двоеточия, разбивающие одну строку
  • Возможные другие правила, о которых я не знаю
+1

Смотрите также вопрос [синтаксис языка VB6 определен онлайн] (http://stackoverflow.com/questions/1129149/visual-basic-6-0-language-syntax) – MarkJ

ответ

2

Если вы действительно хотите знать, VBA language specification находится в режиме онлайн на MSDN с грамматикой BNF. VBA на 99% эквивалентен VB6 - конечно, правила идентификации комментариев должны быть одинаковыми.


И если вы пытаетесь устранить мертвый код - просто получить MZ-Tools! Это бесплатно. Используйте инструмент проверки кода. «MZ-Tools может просматривать исходный код на уровне проектной группы, проекта или файла (через контекстные меню), обнаруживая неиспользуемые переменные, константы, параметры, частные процедуры и т. Д.». Чтобы устранить неиспользуемые подсистемы и функции, используйте функцию MZ-Tools, в которой перечислены все вызывающие.


EDIT Существует дискуссия в комментариях о том, как устранить элементы, которые были объявлены как unecessarily Public: MZ Tools не помогает с этим.

+0

Я все время использую инструменты MZ и не мог обойтись без него. некоторые ограничения. Я участвую в проекте, где тонна материалов в модулях объявлена ​​общедоступной, в основном без необходимости. Из документации инструментов MZ: по соображениям производительности в исходном коде проверки проверяются только частные объявления, то есть объявления, которые могут используйте только внутри модуля, где они объявлены. – kjack

+1

@kjack: сделайте их приватными и пусть компилятор VB6 проверяет, вызваны ли они. Затем выберите выборочно, чтобы они были доступны. Наконец, используйте MZ-Tools для очистки левой части – wqw

+0

+1 @wqw Если вам нужно одержимо проверить большое количество элементов, я думаю, вы могли бы автоматизировать это? Автоматически изменять файл кода, создавая один элемент за раз, а затем [запустить компилятор VB6 из командной строки] (http://stackoverflow.com/questions/3444505/what-are-the-command-line-options-for-the-vb6-ide-compiler), чтобы посмотрите, все еще строится проект? – MarkJ

2

Апострофы в строковых литералах игнорируются. Апоптопы в комментариях также игнорируются (потому что они уже в комментарии). Вы не можете поставить apostrophe в многострочном выражении, если он не находится в последней строке инструкции, и в этом случае он просто следует нормальным правилам.

Почему вы так обеспокоены?

+0

Вы Сорта можно поставить apostrophe на строке, которая не является последней строкой многострочного оператора, она будет прокомментировать последующую строку (строки). – kjack

+0

Я хочу знать, потому что я пытаюсь устранить мертвый код и неиспользуемые функции subs, переменные и уменьшить область действия для других и определить, что я хочу игнорировать вызовы и т. Д., Которые закомментированы. – kjack

+0

@kjack OMG просто получите [MZ Tools] (http://www.mztools.com/v3/mztools3.aspx) - это бесплатно - и используйте инструмент проверки кода. «MZ-Tools может просматривать исходный код на уровне проектной группы, проекта или файла (через контекстные меню), обнаруживая неиспользуемые переменные, константы, параметры, частные процедуры и т. Д.« – MarkJ

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 
Смежные вопросы