Инструмент для поиска закомментированного кода VHDL

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

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


person Brian Carlton    schedule 08.03.2011    source источник
comment
Каков именно ваш вариант использования? Если вы используете этот скрипт в хуке фиксации, вы не сможете выполнять какую-либо ручную интерпретацию.   -  person Philippe    schedule 09.03.2011


Ответы (2)


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

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

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

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

person Ira Baxter    schedule 14.03.2011

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

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

т. е. найти строки, которые могут иметь пробелы, затем текст и заканчиваться на ; или ,. Я обнаружил, что запятые в комментариях были нормальными, но эти два символа часто были комментариями кода, поскольку они часто использовались в конце строк 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    
person Brian Carlton    schedule 09.03.2011
comment
Мне это нравится! Вот версия для Verilog (однострочные комментарии): egrep '^\s*//.*[;,]$' *.v. Моя оболочка не была довольна $, поэтому я переключился на одинарные кавычки. Конечно, это не относится к комментариям блоков Verilog /**/. - person toolic; 10.03.2011