Hari ini saya belajar bahwa saya dapat menggunakan perl -c filename
untuk menemukan kurung keriting yang tak tertandingi {} dalam file sewenang-wenang, tidak harus skrip Perl. Masalahnya adalah, itu tidak berfungsi dengan jenis kurung lain () [] dan mungkin <>. Saya juga melakukan percobaan dengan beberapa plugin Vim yang mengklaim dapat membantu menemukan tanda kurung yang tidak cocok tetapi sejauh ini tidak begitu baik.
Saya memiliki file teks dengan beberapa tanda kurung dan salah satunya hilang! Apakah ada program / script / plugin vim / apa pun yang dapat membantu saya mengidentifikasi braket yang tidak cocok?
sumber
Pembaruan 2:
Skrip berikut sekarang mencetak nomor baris dan kolom braket yang tidak cocok . Ia memproses satu jenis braket per pemindaian (mis. '[]' '<>' '{}' '()' ...)
Skrip mengidentifikasi braket kanan yang pertama , yang tidak cocok , atau yang pertama dari braket kiri yang tidak dipasangkan ... Pada mendeteksi erroe, ia keluar dengan nomor baris dan kolom
Berikut adalah beberapa contoh keluaran ...
Ini skripnya ...
sumber
Line, Column (8, 10)
tidak peduli file mana yang saya coba. JugamogXCt=${#mogX}
diatur tetapi tidak digunakan di mana pun.Opsi terbaik adalah vim / gvim seperti yang diidentifikasi oleh Shadur, tetapi jika Anda menginginkan skrip, Anda dapat memeriksa jawaban saya untuk pertanyaan serupa di Stack Overflow . Saya ulangi seluruh jawaban saya di sini:
Jika apa yang Anda coba lakukan berlaku untuk bahasa tujuan umum, maka ini adalah masalah non-sepele.
Untuk mulai dengan Anda harus khawatir tentang komentar dan string. Jika Anda ingin memeriksa ini pada bahasa pemrograman yang menggunakan ekspresi reguler, ini akan membuat pencarian Anda lebih sulit lagi.
Jadi sebelum saya bisa masuk dan memberi Anda saran tentang pertanyaan Anda, saya perlu mengetahui batas-batas area masalah Anda. Jika Anda dapat menjamin bahwa tidak ada string, tidak ada komentar dan tidak ada ekspresi reguler yang perlu dikhawatirkan - atau lebih umum lagi dalam kode yang kurung dapat digunakan selain untuk penggunaan yang Anda periksa seimbang - ini akan membuat hidup jauh lebih sederhana.
Mengetahui bahasa yang ingin Anda periksa akan sangat membantu.
Jika saya mengambil hipotesis bahwa tidak ada suara, yaitu bahwa semua tanda kurung adalah tanda kurung yang berguna, strategi saya akan berulang:
Saya hanya akan mencari dan menghapus semua pasangan braket dalam: yang tidak mengandung tanda kurung di dalamnya. Ini paling baik dilakukan dengan menciutkan semua garis menjadi satu garis panjang (dan menemukan mekanisme untuk menambahkan referensi garis, jika Anda perlu mengeluarkan informasi itu). Dalam hal ini pencarian dan penggantiannya cukup sederhana:
Itu membutuhkan sebuah array:
Dan loop melalui elemen-elemen itu:
File pengujian saya adalah sebagai berikut:
Skrip lengkap saya (tanpa referensi baris) adalah sebagai berikut:
Output dari skrip tersebut berhenti pada penggunaan kurung terdalam ilegal. Tetapi berhati-hatilah: 1 / skrip ini tidak akan bekerja dengan tanda kurung di komentar, ekspresi reguler atau string, 2 / skrip ini tidak melaporkan di mana dalam file asli masalahnya berada, 3 / meskipun skrip ini akan menghapus semua pasangan seimbang yang berhenti di bagian terdalam kondisi kesalahan dan membuat semua kurung englobbing.
Butir 3 / mungkin merupakan hasil yang dapat dieksploitasi, meskipun saya tidak yakin dengan mekanisme pelaporan yang ada dalam pikiran Anda.
Poin 2 / relatif mudah diterapkan tetapi membutuhkan waktu lebih dari beberapa menit untuk menghasilkan, jadi saya akan menyerahkannya kepada Anda untuk mencari tahu.
Butir 1 / adalah yang rumit karena Anda memasuki ranah baru yang sama sekali sama untuk permulaan dan akhir yang bersarang, atau aturan kutipan khusus untuk karakter khusus ...
sumber