// // Copyright (c) 2005 Joao Abecasis // // Distributed under 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) // #include #include #include struct my_grammar1 : BOOST_SPIRIT_CLASSIC_NS::grammar { template struct definition : BOOST_SPIRIT_CLASSIC_NS::grammar_def< BOOST_SPIRIT_CLASSIC_NS::rule, BOOST_SPIRIT_CLASSIC_NS::same > { definition(my_grammar1 const &) { BOOST_SPIRIT_DEBUG_NODE(start_rule1); BOOST_SPIRIT_DEBUG_NODE(start_rule2); start_rule1 = BOOST_SPIRIT_CLASSIC_NS::str_p("int"); start_rule2 = BOOST_SPIRIT_CLASSIC_NS::int_p; this->start_parsers(start_rule1, start_rule2); } BOOST_SPIRIT_CLASSIC_NS::rule start_rule1, start_rule2; }; }; struct my_closure : BOOST_SPIRIT_CLASSIC_NS::closure { member1 value; }; struct my_grammar2 : BOOST_SPIRIT_CLASSIC_NS::grammar { template struct definition : BOOST_SPIRIT_CLASSIC_NS::grammar_def< BOOST_SPIRIT_CLASSIC_NS::rule, BOOST_SPIRIT_CLASSIC_NS::same > { definition(my_grammar2 const &) { BOOST_SPIRIT_DEBUG_NODE(start_rule1); BOOST_SPIRIT_DEBUG_NODE(start_rule2); start_rule1 = BOOST_SPIRIT_CLASSIC_NS::str_p("int"); start_rule2 = BOOST_SPIRIT_CLASSIC_NS::int_p; this->start_parsers(start_rule1, start_rule2); } BOOST_SPIRIT_CLASSIC_NS::rule start_rule1, start_rule2; }; }; int main() { my_grammar1 g1; my_grammar2 g2; BOOST_SPIRIT_DEBUG_NODE(g1); BOOST_SPIRIT_DEBUG_NODE(g2); parse( "int 5", g1.use_parser<0>() >> g2.use_parser<1>(), BOOST_SPIRIT_CLASSIC_NS::space_p ); }