Dzisiaj dowiedziałem się, że mogę perl -c filename
znaleźć niedopasowane nawiasy klamrowe {} w dowolnych plikach, niekoniecznie w skryptach Perla. Problem w tym, że nie działa z innymi typami nawiasów () [] i może <>. Miałem też eksperymenty z kilkoma wtyczkami Vima, które twierdzą, że pomagają znaleźć niedopasowane nawiasy, ale jak dotąd nie są tak dobre.
Mam plik tekstowy z kilkoma nawiasami i brakuje jednego z nich! Czy jest jakiś program / skrypt / wtyczka vim / cokolwiek, co może mi pomóc zidentyfikować niedopasowany nawias?
źródło
Aktualizacja 2:
Poniższy skrypt wypisuje teraz numer wiersza i kolumnę niedopasowanego nawiasu . Przetwarza jeden typ uchwytu za skanowania (tj. „[]” „<>” „{}” „()” ...)
identyfikuje skryptu pierwszy , niezrównany prawego wspornika , lub pierwszy jakiegokolwiek lewego wspornika un-sparowany ... Po wykryciu erroe wychodzi z numerami wierszy i kolumn
Oto przykładowe dane wyjściowe ...
Oto skrypt ...
źródło
Line, Column (8, 10)
bez względu na to, którego pliku próbuję.mogXCt=${#mogX}
Jest również ustawiony, ale nigdzie nie używany.Najlepszą opcją jest vim / gvim zidentyfikowany przez Shadura, ale jeśli chcesz skrypt, możesz sprawdzić moją odpowiedź na podobne pytanie dotyczące przepełnienia stosu . Powtarzam całą odpowiedź tutaj:
Jeśli to, co próbujesz zrobić, dotyczy języka ogólnego przeznaczenia, jest to nietrywialny problem.
Na początek będziesz musiał martwić się o komentarze i ciągi znaków. Jeśli chcesz to sprawdzić w języku programowania, który używa wyrażeń regularnych, sprawi to, że twoje zadanie będzie trudniejsze.
Więc zanim będę mógł udzielić ci porady na twoje pytanie, muszę znać granice obszaru, w którym masz problem. Jeśli możesz zagwarantować, że nie ma żadnych ciągów, komentarzy i wyrażeń regularnych, o które należy się martwić - lub bardziej ogólnie, nigdzie w kodzie nie można użyć nawiasów innych niż do zastosowań, dla których sprawdzasz, czy są zrównoważone - spowoduje to uprościć życie.
Pomocna byłaby znajomość języka, który chcesz sprawdzić.
Jeśli przyjmuję hipotezę, że nie ma hałasu, tzn. Że wszystkie nawiasy są nawiasami użytecznymi, moja strategia byłaby iteracyjna:
Po prostu szukałem i usuwałem wszystkie pary nawiasów wewnętrznych: te, które nie zawierają nawiasów w środku. Najlepiej to zrobić, zwijając wszystkie linie do pojedynczej długiej linii (i znajdź mechanizm dodawania odniesień do linii, jeśli zajdzie taka potrzeba). W takim przypadku wyszukiwanie i zamiana jest dość proste:
Wymaga tablicy:
I pętla przez te elementy:
Mój plik testowy wygląda następująco:
Mój pełny skrypt (bez odwoływania się do wiersza) wygląda następująco:
Dane wyjściowe tego skryptu zatrzymują się w najbardziej wewnętrznych nielegalnych zastosowaniach nawiasów. Ale uwaga: 1 / ten skrypt nie będzie działał z nawiasami w komentarzach, wyrażeniach regularnych lub ciągach, 2 / nie zgłasza, gdzie w oryginalnym pliku znajduje się problem, 3 / chociaż usunie wszystkie zrównoważone pary, zatrzymuje się w głębi warunek błędu i zachowuje wszystkie nawiasy englobbing.
Punkt 3 / jest prawdopodobnie rezultatem możliwym do wykorzystania, chociaż nie jestem pewien mechanizmu raportowania, który miałeś na myśli.
Punkt 2 / jest stosunkowo łatwy do wdrożenia, ale jego opracowanie zajmuje więcej niż kilka minut, więc zostawię to tobie.
Punkt 1 / jest trudny, ponieważ wchodzisz w zupełnie nową dziedzinę konkurujących czasami zagnieżdżonych początków i zakończeń lub specjalnych zasad cytowania znaków specjalnych ...
źródło