annotate DEPENDENCIES/generic/include/boost/spirit/home/qi/parser.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents 2665513ce2d3
children
rev   line source
Chris@16 1 /*=============================================================================
Chris@16 2 Copyright (c) 2001-2011 Joel de Guzman
Chris@16 3
Chris@16 4 Distributed under the Boost Software License, Version 1.0. (See accompanying
Chris@16 5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@16 6 ==============================================================================*/
Chris@16 7 #if !defined(BOOST_SPIRIT_PARSER_OCTOBER_16_2008_0254PM)
Chris@16 8 #define BOOST_SPIRIT_PARSER_OCTOBER_16_2008_0254PM
Chris@16 9
Chris@16 10 #if defined(_MSC_VER)
Chris@16 11 #pragma once
Chris@16 12 #endif
Chris@16 13
Chris@16 14 #include <boost/mpl/has_xxx.hpp>
Chris@16 15 #include <boost/spirit/home/qi/domain.hpp>
Chris@16 16
Chris@16 17 namespace boost { namespace spirit { namespace qi
Chris@16 18 {
Chris@16 19
Chris@16 20 //[parser_base_parser
Chris@16 21 template <typename Derived>
Chris@16 22 struct parser
Chris@16 23 {
Chris@16 24 struct parser_id;
Chris@16 25 typedef Derived derived_type;
Chris@16 26 typedef qi::domain domain;
Chris@16 27
Chris@16 28 // Requirement: p.parse(f, l, context, skip, attr) -> bool
Chris@16 29 //
Chris@16 30 // p: a parser
Chris@16 31 // f, l: first/last iterator pair
Chris@16 32 // context: enclosing rule context (can be unused_type)
Chris@16 33 // skip: skipper (can be unused_type)
Chris@16 34 // attr: attribute (can be unused_type)
Chris@16 35
Chris@16 36 // Requirement: p.what(context) -> info
Chris@16 37 //
Chris@16 38 // p: a parser
Chris@16 39 // context: enclosing rule context (can be unused_type)
Chris@16 40
Chris@16 41 // Requirement: P::template attribute<Ctx, Iter>::type
Chris@16 42 //
Chris@16 43 // P: a parser type
Chris@16 44 // Ctx: A context type (can be unused_type)
Chris@16 45 // Iter: An iterator type (can be unused_type)
Chris@16 46
Chris@16 47 Derived const& derived() const
Chris@16 48 {
Chris@16 49 return *static_cast<Derived const*>(this);
Chris@16 50 }
Chris@16 51 };
Chris@16 52 //]
Chris@16 53
Chris@16 54 template <typename Derived>
Chris@16 55 struct primitive_parser : parser<Derived>
Chris@16 56 {
Chris@16 57 struct primitive_parser_id;
Chris@16 58 };
Chris@16 59
Chris@16 60 template <typename Derived>
Chris@16 61 struct nary_parser : parser<Derived>
Chris@16 62 {
Chris@16 63 struct nary_parser_id;
Chris@16 64
Chris@16 65 // Requirement: p.elements -> fusion sequence
Chris@16 66 //
Chris@16 67 // p: a composite parser
Chris@16 68
Chris@16 69 // Requirement: P::elements_type -> fusion sequence
Chris@16 70 //
Chris@16 71 // P: a composite parser type
Chris@16 72 };
Chris@16 73
Chris@16 74 template <typename Derived>
Chris@16 75 struct unary_parser : parser<Derived>
Chris@16 76 {
Chris@16 77 struct unary_parser_id;
Chris@16 78
Chris@16 79 // Requirement: p.subject -> subject parser
Chris@16 80 //
Chris@16 81 // p: a unary parser
Chris@16 82
Chris@16 83 // Requirement: P::subject_type -> subject parser type
Chris@16 84 //
Chris@16 85 // P: a unary parser type
Chris@16 86 };
Chris@16 87
Chris@16 88 template <typename Derived>
Chris@16 89 struct binary_parser : parser<Derived>
Chris@16 90 {
Chris@16 91 struct binary_parser_id;
Chris@16 92
Chris@16 93 // Requirement: p.left -> left parser
Chris@16 94 //
Chris@16 95 // p: a binary parser
Chris@16 96
Chris@16 97 // Requirement: P::left_type -> left parser type
Chris@16 98 //
Chris@16 99 // P: a binary parser type
Chris@16 100
Chris@16 101 // Requirement: p.right -> right parser
Chris@16 102 //
Chris@16 103 // p: a binary parser
Chris@16 104
Chris@16 105 // Requirement: P::right_type -> right parser type
Chris@16 106 //
Chris@16 107 // P: a binary parser type
Chris@16 108 };
Chris@16 109 }}}
Chris@16 110
Chris@16 111 namespace boost { namespace spirit { namespace traits // classification
Chris@16 112 {
Chris@16 113 namespace detail
Chris@16 114 {
Chris@16 115 BOOST_MPL_HAS_XXX_TRAIT_DEF(parser_id)
Chris@16 116 BOOST_MPL_HAS_XXX_TRAIT_DEF(primitive_parser_id)
Chris@16 117 BOOST_MPL_HAS_XXX_TRAIT_DEF(nary_parser_id)
Chris@16 118 BOOST_MPL_HAS_XXX_TRAIT_DEF(unary_parser_id)
Chris@16 119 BOOST_MPL_HAS_XXX_TRAIT_DEF(binary_parser_id)
Chris@16 120 }
Chris@16 121
Chris@16 122 // parser type identification
Chris@16 123 template <typename T>
Chris@16 124 struct is_parser : detail::has_parser_id<T> {};
Chris@16 125
Chris@16 126 template <typename T>
Chris@16 127 struct is_primitive_parser : detail::has_primitive_parser_id<T> {};
Chris@16 128
Chris@16 129 template <typename T>
Chris@16 130 struct is_nary_parser : detail::has_nary_parser_id<T> {};
Chris@16 131
Chris@16 132 template <typename T>
Chris@16 133 struct is_unary_parser : detail::has_unary_parser_id<T> {};
Chris@16 134
Chris@16 135 template <typename T>
Chris@16 136 struct is_binary_parser : detail::has_binary_parser_id<T> {};
Chris@16 137
Chris@16 138 }}}
Chris@16 139
Chris@16 140 #endif