Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разбор файла при помощи Boost.Spirit. 
:(
    Опции темы
Elfet
  Дата 8.1.2010, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Всем привет! 

Подскажите, пожалуйста, как в Boost.Spirit-е можно обработать такую конструкцию? \

Цитата
(0 "comment...")

(2 2)
(3 (2))
(3 (2)(
1 1
2 3
4 5
))

(3 (3))
(3 (3)(
2 3 4
2 2 1
1 2 3
))


У меня весь файл разбит на некие блоки: (N   ) 
В зависимости от того какой это номер блока N (0,2.3,...) дальше нужно парсить по разным правилам. 
Как можно на Boost.Spirit реализовать что-нибудь такое: если это номер блока такой-то - то разбирай так-то..?

Заранее спасибо!


--------------------
PM MAIL WWW Skype   Вверх
xvr
Дата 8.1.2010, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Судя по виду это обычная списочная конструкция. Различия от номера блока лежат на более высоком уровне, чем синтаксический (эти различия парсер не возмет)
Парси как набор списков, потом уже разбирайся в них сам  smile 

PS. С Spirit'ом не работал, вот грамматика для bison'а - к Spirit адаптируй сам
Код

%token vNUM  // Number
%token vSTR // String

%%

main: list | main list ;

list: '(' vNUM list_body ')' ;

list_body: /* nothing */ | list_item | list_body list_item ;

list_item: vNUM | vSTR | list ;


PM MAIL   Вверх
Elfet
Дата 8.1.2010, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



А как эти списки в Спирите называются?

Добавлено через 1 минуту и 19 секунд
xvr, что то не понял по твоему примеру как это сделано.


--------------------
PM MAIL WWW Skype   Вверх
W4FhLF
Дата 8.1.2010, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 20
Всего: 121



Elfet, почитай раздел документации Dynamic Parsers. Там есть:

Цитата

if_p

if_p can be used with or without an else-part. The syntax is:
    if_p(condition)[then-parser]

or
    if_p(condition)[then-parser].else_p[else-parser]

When the condition is met the then-parser is used next in the parsing process. When the condition is not met and an else-parser is available the else-parser is used next. When the condition isn't met and no else-parser is available then the whole parser matches the empty sequence.



--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
xvr
Дата 8.1.2010, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(Elfet @ 8.1.2010,  12:43)
А как эти списки в Спирите называются?

Никак. Это название общей синтаксической конструкции. (Погугли про язык Lisp - он на них построен)
Цитата

Добавлено @ 12:44
xvr, что то не понял по твоему примеру как это сделано.
Так, еще одна попытка, на сей раз на BNF
Код

main ::= one_list *
one_list ::= '(' <number> rest_of_list * ')'
rest_of_list ::= <number> | <string> | one_list


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0631 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.