Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

File Iterator

Boost , ,

File Iterator

Поскольку Spirit является парсером обратного трекинга, для этого требуется, по крайней мере, передний итератор. В частности, итератора ввода недостаточно. Много раз удобно считывать ввод в парсер из файла, но итераторы файлов STL являются итераторами ввода. Чтобы обойти это ограничение, Spirit имеет класс утилитыfile_iterator, который является итератором случайного доступа для файлов только для чтения.

Чтобы использовать итератор файлов Spirit, просто создайте итератор файлов с помощью пути к файлу, который вы хотите разобрать, а затем создайте итератор EOF для файла:

    #include <boost/spirit/iterator/file_iterator.hpp> // the header file
    file_iterator<> first("input.dat");
    if (!first)
    {
       std::cout << "Unable to open file!\n";
       // Clean up, throw an exception, whatever
       return -1;
    }
    file_iterator<> last = first.make_end();

Теперь у вас есть пара итераторов для использования с Духом. Если ваш парсер полностью параметризован (без жесткого кодирования), это простой вопрос переопределения типа итератора доfile_iterator.:

    typedef char                    char_t;
    typedef file_iterator <char_t>  iterator_t;
    typedef scanner<iterator_t>     scanner_t;
    typedef rule <scanner_t>        rule_t;
    rule_t my_rule;
    // Define your rule
    parse_info<iterator_t> info = parse(first, last, my_rule);

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

    my_grammar g;
    parse_info<iterator_t> info = parse(first, last, g);
Generic iterator

The Spirit file iterator can be parameterized with any type that is default constructible and assignable. It transparently supports large files (greater than 2GB) on systems that provide an appropriate interface. The file iterator can be useful outside of Spirit as well. For instance, the Boost.Tokenizer package requires a bidirectional iterator, which is provided by file_iterator.

См.file_parser.cppдля компилируемого примера. Это часть духовного распределения.



Статья File Iterator раздела может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 07:52:40/0.0075869560241699/1