Hoje aprendi que posso usar perl -c filename
para encontrar colchetes {} incomparáveis em arquivos arbitrários, não necessariamente scripts Perl. O problema é que ele não funciona com outros tipos de colchetes () [] e talvez <>. Eu também tive experiências com vários plugins do Vim que pretendem ajudar a encontrar colchetes incomparáveis, mas até agora não são tão bons.
Eu tenho um arquivo de texto com alguns colchetes e um deles está faltando! Existe algum plugin de programa / script / vim / o que quer que possa me ajudar a identificar o colchete inigualável?
fonte
Atualização 2:
O script a seguir agora imprime o número da linha e a coluna de um colchete incorreto . Ele processa um tipo de suporte por varredura (ie. '[]' '<>' '{}' '()' ...)
Os identifica de script do primeiro , colchete direito inigualável , ou o primeiro de qualquer suporte esquerdo emparelhado-un ... Ao detectar um erro, ele sai com os números de linha e coluna
Aqui está um exemplo de saída ...
Aqui está o script ...
fonte
Line, Column (8, 10)
não importa em qual arquivo eu o teste. TambémmogXCt=${#mogX}
está definido, mas não é usado em nenhum lugar.A melhor opção é vim / gvim, conforme identificado por Shadur, mas se você quiser um script, poderá verificar minha resposta para uma pergunta semelhante no Stack Overflow . Repito toda a minha resposta aqui:
Se o que você está tentando fazer se aplica a uma linguagem de uso geral, esse é um problema não trivial.
Para começar, você terá que se preocupar com comentários e strings. Se você quiser verificar isso em uma linguagem de programação que usa expressões regulares, isso tornará sua busca mais difícil novamente.
Portanto, antes que eu possa entrar e dar algum conselho sobre sua pergunta, preciso conhecer os limites da sua área problemática. Se você pode garantir que não há seqüências de caracteres, comentários ou expressões regulares para se preocupar - ou mais genericamente em nenhum lugar do código que os colchetes possam ser usados, exceto para os usos para os quais você está verificando se eles estão equilibrados - isso será tornar a vida muito mais simples.
Conhecer o idioma que você deseja verificar seria útil.
Se eu assumir a hipótese de que não há ruído, ou seja, que todos os colchetes são colchetes úteis, minha estratégia seria iterativa:
Eu simplesmente procuraria e removeria todos os pares de colchetes internos: aqueles que não contêm colchetes no interior. É melhor fazer isso recolhendo todas as linhas em uma única linha longa (e encontre um mecanismo para adicionar referências de linha, caso seja necessário obter essas informações). Nesse caso, a pesquisa e substituição são bem simples:
Requer uma matriz:
E um loop através desses elementos:
Meu arquivo de teste é o seguinte:
Meu script completo (sem referência de linha) é o seguinte:
A saída desse script é interrompida nos usos ilegais mais íntimos de colchetes. Mas cuidado: 1 / este script não funcionará com colchetes nos comentários, expressões regulares ou seqüências de caracteres, 2 / não informa onde o problema está localizado no arquivo original, 3 / embora remova todos os pares balanceados que para no interior condições de erro e mantém todos os colchetes.
O ponto 3 / é provavelmente um resultado explorável, embora eu não tenha certeza do mecanismo de relatório que você tinha em mente.
O ponto 2 / é relativamente fácil de implementar, mas leva mais do que alguns minutos para produzir, portanto, deixarei que você decida.
O ponto 1 / é o mais complicado porque você entra em um novo reino de princípios e finais concorrentes, às vezes aninhados, ou regras especiais de citação para caracteres especiais ...
fonte