1 #ifndef META_HS_TOKEN_HPP 2 #define META_HS_TOKEN_HPP 3 4 // Copyright Abel Sinkovics (abel@sinkovics.hu) 2012. 5 // Distributed under the Boost Software License, Version 1.0. 6 // (See accompanying file LICENSE_1_0.txt or copy at 7 // http://www.boost.org/LICENSE_1_0.txt) 8 9 #include <ast.hpp> 10 #include <except_keywords.hpp> 11 12 #include <boost/metaparse/string.hpp> 13 #include <boost/metaparse/token.hpp> 14 #include <boost/metaparse/always_c.hpp> 15 #include <boost/metaparse/lit_c.hpp> 16 #include <boost/metaparse/one_of.hpp> 17 #include <boost/metaparse/last_of.hpp> 18 #include <boost/metaparse/return_.hpp> 19 #include <boost/metaparse/int_.hpp> 20 #include <boost/metaparse/foldl_reject_incomplete_start_with_parser.hpp> 21 #include <boost/metaparse/alphanum.hpp> 22 #include <boost/metaparse/transform.hpp> 23 #include <boost/metaparse/letter.hpp> 24 #include <boost/metaparse/keyword.hpp> 25 #include <boost/metaparse/optional.hpp> 26 27 #include <boost/mpl/lambda.hpp> 28 #include <boost/mpl/push_back.hpp> 29 #include <boost/mpl/vector.hpp> 30 31 namespace token 32 { 33 typedef 34 boost::metaparse::token< 35 boost::metaparse::always_c<'+',boost::metaparse::string<'.','+','.'> > 36 > 37 plus; 38 39 typedef 40 boost::metaparse::token< 41 boost::metaparse::always_c<'-',boost::metaparse::string<'.','-','.'> > 42 > 43 minus; 44 45 typedef 46 boost::metaparse::token< 47 boost::metaparse::always_c<'*',boost::metaparse::string<'.','*','.'> > 48 > 49 mult; 50 51 typedef 52 boost::metaparse::token< 53 boost::metaparse::always_c<'/',boost::metaparse::string<'.','/','.'> > 54 > 55 div; 56 57 typedef 58 boost::metaparse::token< 59 boost::metaparse::one_of< 60 boost::metaparse::last_of< 61 boost::metaparse::lit_c<'='>, 62 boost::metaparse::lit_c<'='>, 63 boost::metaparse::return_< 64 boost::metaparse::string<'.','=','=','.'> 65 > 66 >, 67 boost::metaparse::last_of< 68 boost::metaparse::lit_c<'/'>, 69 boost::metaparse::lit_c<'='>, 70 boost::metaparse::return_< 71 boost::metaparse::string<'.','/','=','.'> 72 > 73 >, 74 boost::metaparse::last_of< 75 boost::metaparse::lit_c<'<'>, 76 boost::metaparse::one_of< 77 boost::metaparse::always_c< 78 '=', 79 boost::metaparse::string<'.','<','=','.'> 80 >, 81 boost::metaparse::return_< 82 boost::metaparse::string<'.','<','.'> 83 > 84 > 85 >, 86 boost::metaparse::last_of< 87 boost::metaparse::lit_c<'>'>, 88 boost::metaparse::optional< 89 boost::metaparse::always_c< 90 '=', 91 boost::metaparse::string<'.','>','=','.'> 92 >, 93 boost::metaparse::string<'.','>','.'> 94 > 95 > 96 > 97 > 98 cmp; 99 100 typedef 101 boost::metaparse::token<boost::metaparse::lit_c<'('> > 102 open_bracket; 103 104 typedef 105 boost::metaparse::token<boost::metaparse::lit_c<')'> > 106 close_bracket; 107 108 typedef 109 boost::metaparse::token<boost::metaparse::lit_c<'='> > 110 define; 111 112 typedef boost::metaparse::token<boost::metaparse::int_> int_; 113 114 typedef 115 boost::metaparse::token< 116 except_keywords< 117 boost::metaparse::foldl_reject_incomplete_start_with_parser< 118 boost::metaparse::one_of< 119 boost::metaparse::alphanum, 120 boost::metaparse::lit_c<'_'> 121 >, 122 boost::metaparse::transform< 123 boost::metaparse::one_of< 124 boost::metaparse::letter, 125 boost::metaparse::lit_c<'_'> 126 >, 127 boost::mpl::lambda< 128 boost::mpl::push_back< 129 boost::metaparse::string<>, 130 boost::mpl::_1 131 > 132 >::type 133 >, 134 boost::mpl::lambda< 135 boost::mpl::push_back<boost::mpl::_1, boost::mpl::_2> 136 >::type 137 >, 138 boost::mpl::vector< 139 boost::metaparse::string<'i','f'>, 140 boost::metaparse::string<'t','h','e','n'>, 141 boost::metaparse::string<'e','l','s','e'> 142 > 143 > 144 > 145 name; 146 147 typedef 148 boost::metaparse::token< 149 boost::metaparse::keyword<boost::metaparse::string<'i','f'> > 150 > 151 if_; 152 153 typedef 154 boost::metaparse::token< 155 boost::metaparse::keyword<boost::metaparse::string<'t','h','e','n'> > 156 > 157 then; 158 159 typedef 160 boost::metaparse::token< 161 boost::metaparse::keyword<boost::metaparse::string<'e','l','s','e'> > 162 > 163 else_; 164 } 165 166 #endif 167 168 169