right_recursion.cpp

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

CPP
90
字号
/*=============================================================================    Copyright (c) 2005 Joel de Guzman    http://spirit.sourceforge.net/    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)=============================================================================*/#include <iostream>#define BOOST_SPIRIT_DEBUG#include <boost/spirit/include/classic_core.hpp>using namespace BOOST_SPIRIT_CLASSIC_NS;struct non_greedy_kleene : public grammar<non_greedy_kleene>{    template <typename ScannerT>    struct definition    {        typedef rule<ScannerT> rule_t;        rule_t r;        definition(non_greedy_kleene const& self)        {            r = (alnum_p >> r) | digit_p;            BOOST_SPIRIT_DEBUG_RULE(r);        }        rule_t const&        start() const        {            return r;        }    };};struct non_greedy_plus : public grammar<non_greedy_plus>{    template <typename ScannerT>    struct definition    {        typedef rule<ScannerT> rule_t;        rule_t r;        definition(non_greedy_plus const& self)        {            r = alnum_p >> (r | digit_p);            BOOST_SPIRIT_DEBUG_RULE(r);        }        rule_t const&        start() const        {            return r;        }    };};intmain(){    bool success;    {        non_greedy_kleene k;        success = parse("3", k).full;        assert(success);        success = parse("abcdef3", k).full;        assert(success);        success = parse("abc2def3", k).full;        assert(success);        success = parse("abc", k).full;        assert(!success);    }        {        non_greedy_plus p;        success = parse("3", p).full;        assert(!success);        success = parse("abcdef3", p).full;        assert(success);        success = parse("abc2def3", p).full;        assert(success);        success = parse("abc", p).full;        assert(!success);    }    std::cout << "SUCCESS!!!\n";    return 0;}

⌨️ 快捷键说明

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