12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- //
- // 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 = NULL, * end = NULL;
- pt_parse(begin, end, my_grammar());
- ast_parse(begin, end, my_grammar());
- }
|