Как найти не закрытую скобку

Здравствуйте уважаемые пользователи форума pawno-crmp.

Этот минуал подойдет тем, у кого в моде есть незакрытая скобка, и если стандартные способы не помогают найти ее. Если стандартными способами найти незакрытую скобку не получается, то Вы попали по адресу.

Итак, начнем.

Сегодня я столкнулся с такой проблемой, как незакрытая скобка. Как известно, если в коде имеется незакрытая скобка, то при компилировании компилятор вылетает не показав ошибку. Я перепробовал стандартные способы как найти незакрытую скобку, но они не подходят, так как у меня в коде (ну наверно не только у меня) есть за комментированные скрипты типа таких:

/*
public test()
{
new blablalbla;

*/ 
Дело в том, что программы подсчитывающие количество открытых и закрытых скобок считают за комментированные скобки, поэтому программа выдаст совсем не ту строку которую нужно.

Перейдем к делу.

Чтобы найти незакрытую скобку, я использовал это: (не знаю как назвать)

#error abc 
Если в коде ввести «это», компилятор выдаст ошибку. Опишу поподробнее.

Например незакрытая скобка находится на строке номер 5612. Если ввести #error abc дальше строки 5612, например 6719, то компилятор так же вылетит не выдав никаких ошибок, а если ввести #error abc  до строки 5612 например 3118, то компилятор выдаст ошибку «(3118) : fatal error 111: user error: abc». Думаю теперь вы поняли принцип поиска незакрытой скобки.

Я делал так. С начало ввел  #error abc в середину мода, компилятор выдал ошибку «(3118) : fatal error 111: user error: abc». Далее ниже, и еще ниже. Я делал это до тех пор, пока компилятор не вылетел. И наконец-то я нашел незакрытую скобку.

Удачи Вам в поиске незакрытой скобки! 

Автор минуала я, DimanJeans!

Если вы пропустили где-то скобку (не закрыли), то pawn выдаст 26 ошибок на функции, которые в моде объявлены. 

Если вы поставили лишнюю скобку, pawn вылетит.

Благодаря этому уроку вы сможете найти пропущенную скобку. 

1) Скачиваем эту программу. И открываем ее:

rAw-LC-Vg7w.jpg

2) Кликаем «Browse» и указываем путь до .pwn файла.

3) Нажимаем «Start». 

4) После, программа вам выдаст кол-во открытых и закрытых скобок. Эти числа должны совпадать. Если же нет, вы где-то не закрыли, или не открыли скобку. Также, программа выдаст строку, в которой скобка не закрыта / не открыта. 

kLr6dc3TRJU.jpg

Автор: Evqeniy

Работоспособность данного метода не проверена. В случае обнаружения неисправности, пишите в теме.

На этом все!

AIS

Получил задание прикрутить пару фич к проекту на PHP. Проект из далекого 2008-го и вся админка написана одним файлом в 6000 строк. На продакшене все работает нормально, а локально admin/index.php ругается на unexpected end of file. Подскажите какую-нибудь програмку, скрипт или утилитку которая может помочь найти незакрытую скобку. Очень нехочется перелистывать все 6000 строк «говнокода» в поисках.


  • Вопрос задан

    более трёх лет назад

  • 3214 просмотров

Пригласить эксперта

Ща скобку поставишь, а в продакшене не заведется)

Посмотрите не используются ли там устаревшие <? ?> вместо <?php ?>
Если у вас в пхп.ини использование устаревшей конструкции запрещено — вполне можете получить такую ошибку

Если в коде есть фигурные скобки, прилепленные к открывающим/закрывающим php-тегам, например:

<?php}
{?>
}?>

их нужно разделить:

<?php }
{ ?>
} ?>

php lint рулит
Либо дополнения к разным IDE и редакторам на проверку PHP кода.

Один из возможных вариантов это найти/написать программу на языке программирования которая будет сравнивать кол-во открытых и закрытых скобок и найдет где именно не хватает скобки.
Что-то такое подобное я уже видел на С++ вроде бы.


  • Показать ещё
    Загружается…

28 мая 2023, в 07:29

1500 руб./за проект

28 мая 2023, в 02:05

7000 руб./за проект

27 мая 2023, в 23:03

10000 руб./за проект

Минуточку внимания

Murder

Регистрация
14 Янв 2012
Сообщения
280
Лучшие ответы
0
Репутация
226
Адрес

Екатеринбург

  • #1

Здравствуйте ув.пользователи Pawno-Info, недавно столкнулся с такой проблемой. Незакрытая скобка. И вот решил поискать в интернете. Я нашёл решение на одном из иностранных сайтов программирования. Надеюсь вам это будет полезно. Итак преступим.

1) Скачиваем и устанавливаем программу «Activeperl»:

2) Скачиваем архив

3) Распаковываем архив, все файлы с папки «perl» переносим в папку «Perl»(по умолчанию находится в локальном диске С)

Итак мы всё установили.

Как же нам проверить наш «испорченный» мод на колл-во скобок?

Берём наш мод (с расширением .pwn) и переносим в папку «Perl»(по умолчанию находится в локальном диске С)
Далее открываем файл «GUI.pl», который мы распаковали в папку «Perl». В левом верхнем углу нажимаем «Open File», ищем наш мод и нажимаем на него. Далее ждём пока проверит все ваши строчки. Когда проверит напишет вам сколько скобок открытых и сколько закрытых, при недостатке одной из скобок напишет в какой строчке находится ошибка.

Сейчас открываем мод ищем строчку, которую нам показал «GUI.pl» прописываем недостоющую скобку, сохраняем, компилируем и радуемся.

Вот и всё с вами был Murder.

P.S Проверял на своём моде (58к строк) убрал скобку в середине мода, всё точно нашло
P.S.S Некорректно работает если код построен не лесенкой, но это очень легко сделать с программой «NotePad++» смотрим вот эту тему: клик
P.S.S.S Если такой урок есть прошу не кричать, а просто удалить тему.

Автор: неизвенстен
Перевёл: Murder

Думаю это многим полезно, так что не ленитесь и ставьте плюсики.

How to search for line containing unclosed parenthesis.

/([^)]*$

works only for non-nested parenthesis.

If the closing parenthesis is present in the next lines, it should still be a match.

for example :

foo( bar, bar
     bar, bar );

should be a match.

muru's user avatar

muru

24.5k8 gold badges78 silver badges142 bronze badges

asked May 15, 2015 at 13:32

Mathieu Westphal's user avatar

It is hard to match balanced parentheses with regular expressions, but fortunately, Vim has built-in motions for ( and {. See :help [( and :help [{.

answered May 15, 2015 at 13:39

Ingo Karkat's user avatar

Ingo KarkatIngo Karkat

17.4k1 gold badge42 silver badges59 bronze badges

1

Done it myself

function Unclosed(pattern, pattern2)

    " Store current pos
    let l:matchpos = getpos('.')

    " Initialize return
    let l:ret = 0 

    " Search Pattern, no wrap
    while search(a:pattern, "W", "", "") > 0 

        " Search for pair only in current line
        if eval(searchpair(a:pattern, '', a:pattern2, '', '', line(".")))
            continue
        endif

        " found store position and line
        let l:matchpos = getpos('.')
        let l:ret = line(".")
        break
    endwhile

    " Set cursor to position and return
    call setpos('.', l:matchpos)
    return l:ret
endfunction

answered May 15, 2015 at 14:05

Mathieu Westphal's user avatar

0

Понравилась статья? Поделить с друзьями:
  • Как найти чжун ли после сюжета
  • Как исправить ошибку в госреестре недвижимости
  • Как быстро найти обсидиан в майнкрафте
  • Как найти свой одс
  • Как найти хозяина брошенного дома