Hoy aprendí que puedo usar perl -c filename
para encontrar llaves sin igual {} en archivos arbitrarios, no necesariamente scripts de Perl. El problema es que no funciona con otros tipos de corchetes () [] y tal vez <>. También tuve experimentos con varios complementos de Vim que dicen ayudar a encontrar soportes incomparables, pero hasta ahora no son tan buenos.
¡Tengo un archivo de texto con bastantes paréntesis y falta uno de ellos! ¿Hay algún programa / script / vim plugin / lo que sea que me pueda ayudar a identificar el soporte sin igual?
fuente
Actualización 2:
El siguiente script ahora imprime el número de línea y la columna de un paréntesis no coincidente . Procesa un tipo de soportes por exploración (es decir. '[]' '<>' '{}' '()' ...)
Las secuencias de comandos identifica la primera , soporte derecho sin igual , o la primera de cualquier soporte izquierdo ONU-emparejado ... Al detectar un erroe, sale con los números de línea y columna
Aquí hay algunos resultados de muestra ...
Aquí está el guión ...
fuente
Line, Column (8, 10)
sin importar en qué archivo lo pruebo. TambiénmogXCt=${#mogX}
está configurado pero no se usa en ningún lado.La mejor opción es vim / gvim según lo identificado por Shadur, pero si desea un script, puede verificar mi respuesta a una pregunta similar en Stack Overflow . Repito toda mi respuesta aquí:
Si lo que intenta hacer se aplica a un lenguaje de propósito general, entonces este es un problema no trivial.
Para comenzar, tendrá que preocuparse por los comentarios y las cadenas. Si desea verificar esto en un lenguaje de programación que utiliza expresiones regulares, esto hará que su búsqueda sea más difícil nuevamente.
Entonces, antes de que pueda entrar y darle algún consejo sobre su pregunta, necesito conocer los límites de su área problemática. Si puede garantizar que no hay cadenas, ni comentarios ni expresiones regulares de las que preocuparse, o más genéricamente en ninguna parte del código que los corchetes puedan usarse de otra manera que no sea para los usos para los que está verificando que estén equilibrados, esto Hacer la vida mucho más simple.
Sería útil conocer el idioma que desea verificar.
Si tomo la hipótesis de que no hay ruido, es decir, que todos los paréntesis son paréntesis útiles, mi estrategia sería iterativa:
Simplemente buscaría y eliminaría todos los pares de corchetes internos: aquellos que no contienen corchetes dentro. Esto se logra mejor al contraer todas las líneas en una sola línea larga (y encontrar un mecanismo para agregar referencias de línea, en caso de que necesite obtener esa información). En este caso, la búsqueda y reemplazo es bastante simple:
Requiere una matriz:
Y un bucle a través de esos elementos:
Mi archivo de prueba es el siguiente:
Mi script completo (sin referencia de línea) es el siguiente:
La salida de ese script se detiene en los usos ilegales más internos de los corchetes. Pero cuidado: 1 / este script no funcionará con corchetes en los comentarios, expresiones regulares o cadenas, 2 / no informa en qué parte del archivo original se encuentra el problema, 3 / aunque eliminará todos los pares equilibrados que se detiene en lo más interno condiciones de error y mantiene todos los paréntesis envolventes.
El punto 3 / es probablemente un resultado explotable, aunque no estoy seguro del mecanismo de informes que tenía en mente.
El punto 2 / es relativamente fácil de implementar, pero lleva más de unos minutos trabajar para producirlo, así que lo dejaré a usted para que lo descubra.
El punto 1 / es el complicado porque entras en un reino completamente nuevo de comienzos y finales competitivos a veces anidados, o reglas especiales de comillas para personajes especiales ...
fuente