boost

Тема в разделе "LANGS.C", создана пользователем spa, 31 дек 2009.

  1. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    "синтаксический и лексический разбор" постоянно включаю в возможности буста, например в вики. Так может кто объяснить что это значит и где об этом почитать ;)
     
  2. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    boost::spirit?

    Мощная штука. Давно все парсеры на нём пишу.

    Вот тебе вводная статья.
     
  3. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    Статью еще не прочитал, помоему для ini-файлов хватает API примитивов
    GetPrivateProfileString()/GetPrivateProfileInt()
     
  4. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    сенк, я просто думал кроме спирита еще что есть
     
  5. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    JCronuz

    Привязка к платформе + уродский WinAPI интерфейс. А для .ini файлов есть Boost.Property Tree.

    Есть Boost.Regex и Boost.Xpressive.
     
  6. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    JCronuz

    Да ini это просто пример. А эти WinAPI говно, +1 к _DEN_.

    Вот тебе пример данных под которые мне посоледний раз пришлось писать парсер:

    В качестве разделителей могут быть пробелы, табы или запятые. Заголовок может отсутстсовать.

    Вот парсер на boost::spirit

    Код (Text):
    1.     VTablePtr table(new VectorTable);
    2.     unsigned pos = 0;
    3.     unsigned cols = 0;
    4.  
    5.     // Проверяем идёт ли первой строкой заголовок с именами столбцов
    6.     if(!parse(data.c_str(), real_p, space_p).hit)
    7.     {
    8.         // Считываем заголовок
    9.         StrList headerList;
    10.         rule<> header = as_lower_d[+(alnum_p | range_p('а', 'я'))][push_back_a(headerList)] % (+(blank_p | ch_p(',')));
    11.         pos = parse(data.c_str(), header, nothing_p).length + 1;
    12.         table->setHeader(headerList);
    13.     }
    14.    
    15.     // Читаем файл в таблицу
    16.     rule<> row = real_p[FillTable(table, cols)] % (+(blank_p | ch_p(',')));
    17.     rule<> rows = +(row >> '\n')[assign_a(cols, 0)];
    18.  
    19.     if(!parse(data.c_str() + pos, rows, nothing_p).hit)
    20.         throw std::ios::failure("The unknown structure of the file.");
    Ну и всё, потом работает уже с table как с обычной таблицей аля excel.
     
  7. ring4

    ring4 New Member

    Публикаций:
    0
    Регистрация:
    19 ноя 2006
    Сообщения:
    279