grammar_def_test.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 86 行

CPP
86
字号
////  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 <boost/spirit/include/classic_core.hpp>#include <boost/spirit/include/classic_attribute.hpp>#include <boost/spirit/include/classic_grammar_def.hpp> struct my_grammar1    : BOOST_SPIRIT_CLASSIC_NS::grammar<my_grammar1>{    template <typename Scanner>    struct definition        : BOOST_SPIRIT_CLASSIC_NS::grammar_def<            BOOST_SPIRIT_CLASSIC_NS::rule<Scanner>,            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<Scanner>            start_rule1,            start_rule2;    };};struct my_closure : BOOST_SPIRIT_CLASSIC_NS::closure<my_closure, int>{    member1 value;};struct my_grammar2    : BOOST_SPIRIT_CLASSIC_NS::grammar<my_grammar2, my_closure::context_t>{    template <typename Scanner>    struct definition        : BOOST_SPIRIT_CLASSIC_NS::grammar_def<            BOOST_SPIRIT_CLASSIC_NS::rule<Scanner>,            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<Scanner>            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    );}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?