![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
не понимаю как работает спирит при "phrase level"
есть входная строка mystr = " foo bar " ; есть правило myrule = *space_p >> str_p("foo") >> *space_p >> str_p("bar") >> *space_p ; код запуска parse(mystr,myrule, space_p); если из правила выкинуть *space_p перед foo, то все работает, parse само игнорирует пробелы в начале строки но если выкинуть *space_p из середины, то строка парситься не будет, хотя казалось бы логично, что если мы игнорируем пробелы, то о них и не надо писать в правилах myrule = str_p("foo") >> str_p("bar") ; |
|||
|
||||
| GoldFinch |
|
||||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
хм..... нет, со спиритом вроде все норм, проблема была в тестовом коде %)
Добавлено @ 20:19 вот такой вот феномен,
выводит
Это сообщение отредактировал(а) GoldFinch - 25.9.2009, 20:22 |
||||
|
|||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
разобрался в чем дело.
при "phrase level" надо у правил задавать тип сканера phrase_scanner_t : rule<phrase_scanner_t> |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
GoldFinch, тебе не кажется, что данная тема не соответствует разделу? Даже я со спиритом на вы.
Кстати, есть подозрение, что на уровне фраз символьные парсеры не работают. Таким образом, твои *space_p работать не должны. Чтобы пропускать пробелы там несколько иной синтаксис. |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
bsa, похоже что уровень фраз влияет только на то правило, которое передано в parse()
т.е. для rule<> foo = bar | baz ; parse( input , *foo , skip ); для правила "*foo" работает уровень фраз, а для правила "bar | baz " работает уровень символов, потому что его тип rule<>, и у него сканер для символов, а не для фраз. -------------- а то что я разместил тему в разделе для новичков - так это действительно вопрос уровня новичка (новичка в спирите). |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |