Сегодня я узнал, что могу использовать, perl -c filename
чтобы найти несоответствующие фигурные скобки {} в произвольных файлах, не обязательно в скриптах Perl. Проблема в том, что он не работает с другими типами скобок () [] и, возможно, <>. Я также экспериментировал с несколькими плагинами Vim, которые утверждают, что помогают найти непревзойденные скобки, но пока что не очень хороши.
У меня есть текстовый файл с несколькими скобками, и один из них отсутствует! Есть ли какой-нибудь плагин программы / скрипта / vim / что-нибудь, что может помочь мне определить непревзойденную скобку?
источник
Обновление 2:
следующий скрипт теперь печатает номер строки и столбец несоответствующей скобки . Он обрабатывает один типа кронштейна каждого сканирования (то есть. «[]» «<>» «{}» «()» ...)
Скрипт идентифицирует первый , равный правой кронштейн , или первый из любого ун-парные левой скобки ... При обнаружении ошибки она выходит с номерами строк и столбцов
Вот пример вывода ...
Вот сценарий ...
источник
Line, Column (8, 10)
независимо от того, на каком файле я его пробую. ТакжеmogXCt=${#mogX}
установлен, но нигде не используется.Лучший вариант - это vim / gvim, как определил Шадур, но если вам нужен скрипт, вы можете проверить мой ответ на аналогичный вопрос о переполнении стека . Я повторяю весь мой ответ здесь:
Если то, что вы пытаетесь сделать, относится к языку общего назначения, то это нетривиальная проблема.
Для начала вам придется побеспокоиться о комментариях и строках. Если вы хотите проверить это на языке программирования, который использует регулярные выражения, это снова сделает ваш квест более сложным.
Поэтому, прежде чем я смогу прийти и дать вам какой-либо совет по вашему вопросу, мне нужно знать пределы вашей проблемной области. Если вы можете гарантировать, что нет строк, комментариев и регулярных выражений, о которых следует беспокоиться - или, вообще говоря, нигде в коде, который можно использовать в скобках, кроме тех случаев, для которых вы проверяете, что они сбалансированы - это будет сделать жизнь намного проще
Знание языка, который вы хотите проверить, было бы полезно.
Если я возьму гипотезу об отсутствии шума, то есть о том, что все скобки являются полезными скобками, моя стратегия будет итеративной:
Я бы просто искал и удалил все пары внутренних скобок: те, которые не содержат скобок внутри. Лучше всего это сделать, свернув все строки в одну длинную строку (и найти механизм для добавления ссылок на строки, если вам потребуется вывести эту информацию). В этом случае поиск и замена довольно просты:
Требуется массив:
И цикл через эти элементы:
Мой тестовый файл выглядит следующим образом:
Мой полный сценарий (без ссылки на строку) выглядит следующим образом:
Вывод этого скрипта останавливается на самых недопустимых скобках. Но будьте осторожны: 1 / этот скрипт не будет работать с скобками в комментариях, регулярных выражениях или строках, 2 / он не сообщает, где в исходном файле находится проблема, 3 / хотя он удалит все сбалансированные пары, которые он останавливает в самой внутренней части ошибки условия и сохраняет все скобки.
Точка 3 /, вероятно, является пригодным для использования результатом, хотя я не уверен в том, какой механизм отчетности вы имели в виду.
Точка 2 / относительно проста в реализации, но на ее создание уходит более нескольких минут, так что я оставлю это на ваше усмотрение.
Пункт 1 / является хитрым, потому что вы входите в совершенно новую сферу конкурирующих, иногда вложенных, начала и конца или специальных правил цитирования для специальных символов ...
источник