Здравствуйте уважаемые пользователи форума 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) Скачиваем эту программу. И открываем ее:
2) Кликаем «Browse» и указываем путь до .pwn файла.
3) Нажимаем «Start».
4) После, программа вам выдаст кол-во открытых и закрытых скобок. Эти числа должны совпадать. Если же нет, вы где-то не закрыли, или не открыли скобку. Также, программа выдаст строку, в которой скобка не закрыта / не открыта.
Автор: Evqeniy
Работоспособность данного метода не проверена. В случае обнаружения неисправности, пишите в теме.
На этом все!
Получил задание прикрутить пару фич к проекту на 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 руб./за проект
Минуточку внимания
- Регистрация
- 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
24.5k8 gold badges78 silver badges142 bronze badges
asked May 15, 2015 at 13:32
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 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
0