mix_and_match_trees.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 83 行
CPP
83 行
//// Copyright (c) 2006 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)////////////////////////////////////////////////////////////////////////////////////// As reported by Jascha Wetzel, in// http://article.gmane.org/gmane.comp.parsers.spirit.general/9013, the// directives gen_ast_node_d and gen_pt_node_d were not working for lack of// appropriate conversion constructors in the underlying tree match policies.//////////////////////////////////////////////////////////////////////////////////#include <boost/spirit/include/classic_core.hpp>#include <boost/spirit/include/classic_ast.hpp>#include <boost/spirit/include/classic_parse_tree.hpp>using namespace BOOST_SPIRIT_CLASSIC_NS;struct my_grammar : grammar<my_grammar>{ template <class Scanner> struct definition { typedef scanner< typename Scanner::iterator_t, scanner_policies< typename Scanner::iteration_policy_t, ast_match_policy< typename Scanner::match_policy_t::iterator_t, typename Scanner::match_policy_t::factory_t >, typename Scanner::action_policy_t > > ast_scanner; typedef scanner< typename Scanner::iterator_t, scanner_policies< typename Scanner::iteration_policy_t, pt_match_policy< typename Scanner::match_policy_t::iterator_t, typename Scanner::match_policy_t::factory_t >, typename Scanner::action_policy_t > > pt_scanner; typedef rule<ast_scanner> ast_rule; typedef rule<pt_scanner> pt_rule; typedef rule<Scanner> rule_; definition(my_grammar const & /* self */) { start_ = gen_ast_node_d[ ast_rule_ ]; start_ = gen_pt_node_d[ pt_rule_ ]; } rule_ const & start() const { return start_; } rule_ start_; ast_rule ast_rule_; pt_rule pt_rule_; };};int main(){ const char * begin, * end; pt_parse(begin, end, my_grammar()); ast_parse(begin, end, my_grammar());}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?