Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: проблема с последовательностью
Форумы портала PHP.SU » PHP » Программирование на PHP » проблема с последовательностью

Страниц (1): [1]
 

1. michael - 01 Октября, 2009 - 09:56:13 - перейти к сообщению
Хочу узнать есть ли идеи,а может и решения??? Нужно проверить корректность расставленных в php-файла фигурных скобок, т.е. написать скрипт, который это делал, например: { ... {...} {..{..}} } - верно, { ... {...} {..{..}} - нет.
2. Phantik - 01 Октября, 2009 - 10:26:50 - перейти к сообщению
Самый простой вариант:
Реализуешь класс Стек.

Далее анализируешь файл посимвольно, когда встречаешь { добавляешь ее в стек. Если встречаешь } удаляешь из стека верхний элемент.

Ошибка возможна в 2х случаях:
1) К концу файла стек не пустой.
2) При встрече очередной } стек оказывается пустой.

Без стека можно просто завести переменную равную 0.
Если встретил { увеличил на 1, встретил } - уменьшил на единицу.
Ошибки будут:
1) Если к концу файла переменая не равна 0
2) Значение переменной стало меньше 0.
3. michael - 01 Октября, 2009 - 10:48:40 - перейти к сообщению
Phantik пишет:
Самый простой вариант:
Реализуешь класс Стек.

Далее анализируешь файл посимвольно, когда встречаешь { добавляешь ее в стек. Если встречаешь } удаляешь из стека верхний элемент.

Ошибка возможна в 2х случаях:
1) К концу файла стек не пустой.
2) При встрече очередной } стек оказывается пустой.

Без стека можно просто завести переменную равную 0.
Если встретил { увеличил на 1, встретил } - уменьшил на единицу.
Ошибки будут:
1) Если к концу файла переменая не равна 0
2) Значение переменной стало меньше 0.


Спасибо, сейчас попробую
4. Champion - 01 Октября, 2009 - 10:57:59 - перейти к сообщению
Или если надо удалить элемент из стека, а стек и так пустой:
{{}}}}}}}}{{{{{
5. Phantik - 01 Октября, 2009 - 11:43:00 - перейти к сообщению
Есть правда нюанс один. При простой реализации будут учитываться фигурные скобки находящиеся в коментариях и в составе строковых констант. Поэтому код ПХП может быть верным, а алгоритм при этом может выдать ошибку.
Для более правильной работы нужно конечно модернизировать алгоритм под строки и коменты.
6. Champion - 01 Октября, 2009 - 12:52:32 - перейти к сообщению
Если идешь посимвольно, то сделай флаг, который будет установлен в true, когда ты находишься в комментарии. Как определить начало и конец комментария, ты знаешь.

Но кроме комментариев, есть еще строки) И знаки //, /*, # в строках...
(Добавление)
и HEREDOC
7. michael - 01 Октября, 2009 - 13:03:34 - перейти к сообщению
Phantik пишет:
Есть правда нюанс один. При простой реализации будут учитываться фигурные скобки находящиеся в коментариях и в составе строковых констант. Поэтому код ПХП может быть верным, а алгоритм при этом может выдать ошибку.
Для более правильной работы нужно конечно модернизировать алгоритм под строки и коменты.


под строки там все понгятно, но как под комменты, действительно, если в коментах будет скобка, то скрипт выдаст ошибку, дело в том,что все содежимае файла пхп я преобразую в строку, тогда получается ситуация такая: <?php if(!$cgi->paramExists('msg')){ $data['msg']='Нетпараметраmsg'; printForm($data); } //dfgdfgdf} echo"{}}}}}}}}}}}}}}"; ?>
Тогда ,как мне определить, где заканчивается комментарий // или там еще и закомментирован код, так как определить, что комментарий закончен
8. Champion - 01 Октября, 2009 - 13:14:17 - перейти к сообщению
// заканчивается, если ты нашел конец строки или ?>
9. michael - 02 Октября, 2009 - 10:25:00 - перейти к сообщению
Спасибо всем , все получилось, работает отлично

 

Powered by ExBB FM 1.0 RC1