Инструмент для поиска закомментированного кода VHDL - PullRequest
5 голосов
/ 08 марта 2011

Этот вопрос задает общий вопрос.Я спрашиваю, в частности, о VHDL, так как инструменты, которые упоминаются в ответе на вопрос, предназначены для Java и PL / SQL.Это не обязательно должно быть идеально, немного ручной интерпретации было бы хорошо.Я делаю это для задачи автоматической фиксации.

РЕДАКТИРОВАТЬ 3/9/11: @phillipe указал, что задача автоматической фиксации несовместима с ручной интерпретацией.Я пытаюсь убедить других инженеров избавиться от кода и убедиться, что они это сделали.Я предполагаю, что пессимистический инструмент был бы лучше для коммитов;если он пропускает какой-то код, это не конец света.Или я мог бы сделать так, чтобы он сообщал о количестве таких строк и отправлял мне электронное письмо, а не останавливал коммит.

Ответы [ 2 ]

3 голосов
/ 14 марта 2011

Мне кажется, что идеальный ответ требует, чтобы вы применили синтаксический анализатор, который может распознавать подстроки langauge к содержанию каждого комментария. Если частота синтаксических ошибок мала по сравнению с размером комментария, значит, вы закомментировали код.

Для этого вам нужен анализатор, который готов анализировать неполные фрагменты кода. Системы преобразования программ, которые предлагают преобразования источник-источник (, если вы видите эту структуру, замените ее этой структурой ), имеют встроенный механизм; они должны анализировать шаблоны кода, содержащие преобразования источник-источник, которые обычно являются языковыми формами предложения.

Наш набор инструментов для реинжиниринга программного обеспечения DMS обладает именно этим свойством. Как обычно с DMS, он должен быть настроен на анализ VHDL (или Verilog) [это легко, DMS имеет полные внешние интерфейсы VHDL, Verilog и SystemVerilog), сканирует дерево разбора, находит прикрепленные комментарии (DMS захватывает комментарии при разборе ), а затем попытайтесь проанализировать комментарии с помощью встроенного в DMS «Шаблонного синтаксического анализатора». Необходима некоторая поддержка для подсчета синтаксических ошибок. Так что это возможно.

Я подозреваю, что это не стоит проблем. Ваше регулярное выражение, вероятно, довольно хорошо, особенно если его поддерживает человек, если этот человек не возражает против необходимости дополнительных проверок кода.

1 голос
/ 09 марта 2011

Вот что я использую до сих пор

egrep  "^\s*--.*[;,]$" *.vhd

то есть, находим строки, которые могут иметь пробел, затем текст и заканчиваться на a;или же ,.Я обнаружил, что запятые в комментариях были нормальными, но эти два символа часто были комментариями из кода, поскольку они часто использовались в конце строк VHDL.

Используя то, что @Freddy Mallet предложил в ссылках на ключевые слова, я придумал,Я пытался использовать ключевые слова VHDL, которые обычно не используются в английском языке.Это, как правило, хорошо работает для того же кода, но имеет проблемы с комментариями, такими как «процесс для ...».Вы можете использовать egrep -f и поместить регулярное выражение в файл.

  egrep "^\s*--.*([;,]$|\s(architecture|array|assert|begin|block|case|component|downto|elsif|entity|generate|generic|inout|library|null|package|port|range|records|select|signal|type|until)\s)" src/*.vhd    
...