dynamic_rule.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 59 行
CPP
59 行
/*============================================================================= Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com) 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)=============================================================================*////////////////////////////////////////////////////////////////////////////////// This example shows how the assign operator can be used to modify// rules with semantic actions// // First we show the basic spirit without (without any dynamic feature),// then we show how to use assign_a to make it dynamic, //// the grammar has to parse abcabc... sequences///////////////////////////////////////////////////////////////////////////////#include <iostream>#define BOOST_SPIRIT_DEBUG#include <boost/spirit.hpp>#include <boost/spirit/include/classic_assign_actor.hpp>int main(int argc, char* argv[]){ using namespace BOOST_SPIRIT_CLASSIC_NS; using namespace std; rule<> a,b,c,next; const char* str="abcabc"; parse_info<> hit; BOOST_SPIRIT_DEBUG_NODE(next); BOOST_SPIRIT_DEBUG_NODE(a); BOOST_SPIRIT_DEBUG_NODE(b); BOOST_SPIRIT_DEBUG_NODE(c); // basic spirit gram a = ch_p('a') >> !b; b = ch_p('b') >> !c; c = ch_p('c') >> !a; hit = parse(str, a); cout<<"hit :"<<( hit.hit ? "yes" : "no")<<", " <<(hit.full ? "full": "not full") <<endl; // using assign_a a = ch_p('a')[ assign_a( next, b)] >> !next; b = ch_p('b')[ assign_a( next, c)] >> !next; c = ch_p('c')[ assign_a( next, a)] >> !next; hit = parse(str, a); cout<<"hit :"<<( hit.hit ? "yes" : "no")<<", " <<(hit.full ? "full": "not full") <<endl; return 0;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?