![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
File IteratorBoost , ,
Поскольку 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(); Теперь у вас есть пара итераторов для использования с Духом. Если ваш парсер полностью параметризован (без жесткого кодирования 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);
Copyright © 2002 Jeff Westfahl Use, modification and distribution is subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Статья File Iterator раздела может быть полезна для разработчиков на c++ и boost. Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: ::
|
||||||||||||||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |