![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
The Lexer InterfaceBoost , ,
IntroductionКаждый лексер, который следует использовать в сочетании сВолноваябиблиотека, должна возвращать токены, сформированные из входного потока. Эти токены должны соответствовать синопсису, описанному в темеТип токена. Тип лексера должен подвергать интерфейс, который соответствует, по меньшей мере,forward_iterator(в смысле, определенном стандартом C++), возвращающему тип токена. Образец кода, приведенный ниже, не показывает определение этого интерфейса переднего итератора, поскольку он высоко определен реализацией. Wave lexer synopsis (header: wave/cpplexer/cpp_lexer_interface.hpp)struct lex_iterator { typedef boost::wave::lex_token<> token_type; // Every lex_iterator should implement at least a complete // forward_iterator interface (not shown here) typedef std::forward_iterator_tag iterator_category; // additional requirements lex_iterator(); template <typename Iterator> lex_iterator(Iterator const &first, Iterator const &last typename token_type::position_type const &pos, boost::wave::language_support language) }; Обратите внимание, чтоlex_iterator, определенный в заголовке библиотекиwave/cpplexer/cpp_lexer_interface.hpp, на самом деле является классом шаблонов, использующим тип токена в качестве параметра шаблона. Это опущено в синопсисе выше, потому что это деталь реализации лексера Re2C, предоставленного как часть библиотеки Wave. Если вы хотите использовать Волна в сочетании с вашим лексирующим компонентом должна соответствовать интерфейсу, описанному выше. Public TypedefsКроме типдефов, предписанных дляforward_iteratorстандартом C++, каждый лексер должен использоваться с. Волноваябиблиотека должна определять следующие типдефы:
Member functionsКроме функций, которые должны быть предусмотрены дляforward_iteratorsв соответствии с мандатом C++. Стандартный, каждый лексер должен выполнять следующие функции, которые будут использоваться с. Библиотека: lex_iterator();
template <typename Iterator> lex_iterator(Iterator const &first, Iterator const &last, typename token_type::position_type const &pos, boost::wave::language_support language);
Copyright © 2003-2011 Hartmut Kaiser Last updated: Sunday, October 12, 2008 20:15 Статья The Lexer Interface раздела может быть полезна для разработчиков на c++ и boost. Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: ::
|
|||||||||||||||||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |