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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: проблема с последовательностью

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
michael
Отправлено: 01 Октября, 2009 - 09:56:13
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Нояб. 2007  


Помог: 0 раз(а)




Хочу узнать есть ли идеи,а может и решения??? Нужно проверить корректность расставленных в php-файла фигурных скобок, т.е. написать скрипт, который это делал, например: { ... {...} {..{..}} } - верно, { ... {...} {..{..}} - нет.
 
 Top
Phantik
Отправлено: 01 Октября, 2009 - 10:26:50
Post Id


Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Июнь 2009  


Помог: 0 раз(а)




Самый простой вариант:
Реализуешь класс Стек.

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

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

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

(Отредактировано автором: 01 Октября, 2009 - 10:27:52)

 
 Top
michael
Отправлено: 01 Октября, 2009 - 10:48:40
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Нояб. 2007  


Помог: 0 раз(а)




Phantik пишет:
Самый простой вариант:
Реализуешь класс Стек.

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

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

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


Спасибо, сейчас попробую
 
 Top
Champion Супермодератор
Отправлено: 01 Октября, 2009 - 10:57:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Или если надо удалить элемент из стека, а стек и так пустой:
{{}}}}}}}}{{{{{
 
 Top
Phantik
Отправлено: 01 Октября, 2009 - 11:43:00
Post Id


Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Июнь 2009  


Помог: 0 раз(а)




Есть правда нюанс один. При простой реализации будут учитываться фигурные скобки находящиеся в коментариях и в составе строковых констант. Поэтому код ПХП может быть верным, а алгоритм при этом может выдать ошибку.
Для более правильной работы нужно конечно модернизировать алгоритм под строки и коменты.
 
 Top
Champion Супермодератор
Отправлено: 01 Октября, 2009 - 12:52:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Если идешь посимвольно, то сделай флаг, который будет установлен в true, когда ты находишься в комментарии. Как определить начало и конец комментария, ты знаешь.

Но кроме комментариев, есть еще строки) И знаки //, /*, # в строках...
(Добавление)
и HEREDOC
 
 Top
michael
Отправлено: 01 Октября, 2009 - 13:03:34
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Нояб. 2007  


Помог: 0 раз(а)




Phantik пишет:
Есть правда нюанс один. При простой реализации будут учитываться фигурные скобки находящиеся в коментариях и в составе строковых констант. Поэтому код ПХП может быть верным, а алгоритм при этом может выдать ошибку.
Для более правильной работы нужно конечно модернизировать алгоритм под строки и коменты.


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



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




// заканчивается, если ты нашел конец строки или ?>
 
 Top
michael
Отправлено: 02 Октября, 2009 - 10:25:00
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Нояб. 2007  


Помог: 0 раз(а)




Спасибо всем , все получилось, работает отлично
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB