1 /*============================================================================= 2 Boost.Wave: A Standard compliant C++ preprocessor library 3 http://www.boost.org/ 4 5 Copyright (c) 2001-2012 Hartmut Kaiser. Distributed under the Boost 6 Software License, Version 1.0. (See accompanying file 7 LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 8 =============================================================================*/ 9 10 #include <boost/wave/wave_config.hpp> 11 #include <boost/wave/token_ids.hpp> 12 13 /////////////////////////////////////////////////////////////////////////////// 14 struct lexem 15 { 16 char const*token; 17 boost::wave::token_id id; 18 }; 19 20 /////////////////////////////////////////////////////////////////////////////// 21 lexem const lexems[] = 22 { 23 { "bitand", boost::wave::T_AND_ALT }, 24 { "and", boost::wave::T_ANDAND_ALT }, 25 { "and_eq", boost::wave::T_ANDASSIGN_ALT }, 26 { "bitor", boost::wave::T_OR_ALT }, 27 { "or_eq", boost::wave::T_ORASSIGN_ALT }, 28 { "or", boost::wave::T_OROR_ALT }, 29 { "xor", boost::wave::T_XOR_ALT }, 30 { "xor_eq", boost::wave::T_XORASSIGN_ALT }, 31 { "not", boost::wave::T_NOT_ALT }, 32 { "not_eq", boost::wave::T_NOTEQUAL_ALT }, 33 { "compl", boost::wave::T_COMPL_ALT }, 34 { "->*", boost::wave::T_ARROWSTAR }, 35 { ".*", boost::wave::T_DOTSTAR }, 36 { "::", boost::wave::T_COLON_COLON }, 37 38 { "/* some C comment */", boost::wave::T_CCOMMENT }, 39 { "/* some multiline \n C comment \n */", boost::wave::T_CCOMMENT }, 40 { "// some c++ comment\n", boost::wave::T_CPPCOMMENT }, 41 { " ", boost::wave::T_SPACE }, 42 { "\t\v\f", boost::wave::T_SPACE }, 43 { "'c'", boost::wave::T_CHARLIT }, 44 { "'\\n'", boost::wave::T_CHARLIT }, 45 { "'\\u1234'", boost::wave::T_CHARLIT }, 46 { "'\\U12345678'", boost::wave::T_CHARLIT }, 47 { "\"string literal\"", boost::wave::T_STRINGLIT }, 48 { "\"string literal \\n \\u1234 \\U12345678\"", boost::wave::T_STRINGLIT }, 49 { "&&", boost::wave::T_ANDAND }, 50 { "&=", boost::wave::T_ANDASSIGN }, 51 { "==", boost::wave::T_EQUAL }, 52 { "=", boost::wave::T_ASSIGN }, 53 { "|=", boost::wave::T_ORASSIGN }, 54 { "\?\?!=", boost::wave::T_ORASSIGN_TRIGRAPH }, 55 { "||", boost::wave::T_OROR }, 56 { "|\?\?!", boost::wave::T_OROR_TRIGRAPH }, 57 { "\?\?!|", boost::wave::T_OROR_TRIGRAPH }, 58 { "\?\?!\?\?!", boost::wave::T_OROR_TRIGRAPH }, 59 { "|", boost::wave::T_OR }, 60 { "\?\?!", boost::wave::T_OR_TRIGRAPH }, 61 { "^=", boost::wave::T_XORASSIGN }, 62 { "\?\?'=", boost::wave::T_XORASSIGN_TRIGRAPH }, 63 { "^", boost::wave::T_XOR }, 64 { "\?\?'", boost::wave::T_XOR_TRIGRAPH }, 65 { ",", boost::wave::T_COMMA }, 66 { ":>", boost::wave::T_RIGHTBRACKET_ALT }, 67 { ":", boost::wave::T_COLON }, 68 { "/=", boost::wave::T_DIVIDEASSIGN }, 69 { "/", boost::wave::T_DIVIDE }, 70 { "...", boost::wave::T_ELLIPSIS }, 71 { ".", boost::wave::T_DOT }, 72 { ">>=", boost::wave::T_SHIFTRIGHTASSIGN }, 73 { ">>", boost::wave::T_SHIFTRIGHT }, 74 { ">=", boost::wave::T_GREATEREQUAL }, 75 { ">", boost::wave::T_GREATER }, 76 { "{", boost::wave::T_LEFTBRACE }, 77 { "<<=", boost::wave::T_SHIFTLEFTASSIGN }, 78 { "<<", boost::wave::T_SHIFTLEFT }, 79 { "<=", boost::wave::T_LESSEQUAL }, 80 { "<%", boost::wave::T_LEFTBRACE_ALT }, 81 { "<:", boost::wave::T_LEFTBRACKET_ALT }, 82 { "<", boost::wave::T_LESS }, 83 { "\?\?<", boost::wave::T_LEFTBRACE_TRIGRAPH }, 84 { "(", boost::wave::T_LEFTPAREN }, 85 { "[", boost::wave::T_LEFTBRACKET }, 86 { "\?\?(", boost::wave::T_LEFTBRACKET_TRIGRAPH }, 87 { "--", boost::wave::T_MINUSMINUS }, 88 { "-=", boost::wave::T_MINUSASSIGN }, 89 { "->", boost::wave::T_ARROW }, 90 { "-", boost::wave::T_MINUS }, 91 { "%:%:", boost::wave::T_POUND_POUND_ALT }, 92 { "%=", boost::wave::T_PERCENTASSIGN }, 93 { "%>", boost::wave::T_RIGHTBRACE_ALT }, 94 { "%:", boost::wave::T_POUND_ALT }, 95 { "%", boost::wave::T_PERCENT }, 96 { "!=", boost::wave::T_NOTEQUAL }, 97 { "!", boost::wave::T_NOT }, 98 { "+=", boost::wave::T_PLUSASSIGN }, 99 { "++", boost::wave::T_PLUSPLUS }, 100 { "+", boost::wave::T_PLUS }, 101 { "}", boost::wave::T_RIGHTBRACE }, 102 { "\?\?>", boost::wave::T_RIGHTBRACE_TRIGRAPH }, 103 { ")", boost::wave::T_RIGHTPAREN }, 104 { "]", boost::wave::T_RIGHTBRACKET }, 105 { "\?\?)", boost::wave::T_RIGHTBRACKET_TRIGRAPH }, 106 { ";", boost::wave::T_SEMICOLON }, 107 { "*=", boost::wave::T_STARASSIGN }, 108 { "*", boost::wave::T_STAR }, 109 { "~", boost::wave::T_COMPL }, 110 { "\?\?-", boost::wave::T_COMPL_TRIGRAPH }, 111 { "asm", boost::wave::T_ASM }, 112 { "auto", boost::wave::T_AUTO }, 113 { "bool", boost::wave::T_BOOL }, 114 { "false", boost::wave::T_FALSE }, 115 { "true", boost::wave::T_TRUE }, 116 { "break", boost::wave::T_BREAK }, 117 { "case", boost::wave::T_CASE }, 118 { "catch", boost::wave::T_CATCH }, 119 { "char", boost::wave::T_CHAR }, 120 { "class", boost::wave::T_CLASS }, 121 { "const_cast", boost::wave::T_CONSTCAST }, 122 { "const", boost::wave::T_CONST }, 123 { "continue", boost::wave::T_CONTINUE }, 124 { "default", boost::wave::T_DEFAULT }, 125 { "delete", boost::wave::T_DELETE }, 126 { "do", boost::wave::T_DO }, 127 { "double", boost::wave::T_DOUBLE }, 128 { "dynamic_cast", boost::wave::T_DYNAMICCAST }, 129 { "else", boost::wave::T_ELSE }, 130 { "enum", boost::wave::T_ENUM }, 131 { "explicit", boost::wave::T_EXPLICIT }, 132 { "export", boost::wave::T_EXPORT }, 133 { "extern", boost::wave::T_EXTERN }, 134 { "float", boost::wave::T_FLOAT }, 135 { "for", boost::wave::T_FOR }, 136 { "friend", boost::wave::T_FRIEND }, 137 { "goto", boost::wave::T_GOTO }, 138 { "if", boost::wave::T_IF }, 139 #if BOOST_WAVE_SUPPORT_IMPORT_KEYWORD != 0 140 { "import", boost::wave::T_IMPORT}, 141 #endif 142 { "inline", boost::wave::T_INLINE }, 143 { "int", boost::wave::T_INT }, 144 { "long", boost::wave::T_LONG }, 145 { "mutable", boost::wave::T_MUTABLE }, 146 { "namespace", boost::wave::T_NAMESPACE }, 147 { "new", boost::wave::T_NEW }, 148 { "operator", boost::wave::T_OPERATOR }, 149 { "private", boost::wave::T_PRIVATE }, 150 { "protected", boost::wave::T_PROTECTED }, 151 { "public", boost::wave::T_PUBLIC }, 152 { "register", boost::wave::T_REGISTER }, 153 { "reinterpret_cast", boost::wave::T_REINTERPRETCAST }, 154 { "return", boost::wave::T_RETURN }, 155 { "short", boost::wave::T_SHORT }, 156 { "signed", boost::wave::T_SIGNED }, 157 { "sizeof", boost::wave::T_SIZEOF }, 158 { "static_cast", boost::wave::T_STATICCAST }, 159 { "static", boost::wave::T_STATIC }, 160 { "struct", boost::wave::T_STRUCT }, 161 { "switch", boost::wave::T_SWITCH }, 162 { "template", boost::wave::T_TEMPLATE }, 163 { "this", boost::wave::T_THIS }, 164 { "throw", boost::wave::T_THROW }, 165 { "try", boost::wave::T_TRY }, 166 { "typedef", boost::wave::T_TYPEDEF }, 167 { "typeid", boost::wave::T_TYPEID }, 168 { "typename", boost::wave::T_TYPENAME }, 169 { "union", boost::wave::T_UNION }, 170 { "unsigned", boost::wave::T_UNSIGNED }, 171 { "using", boost::wave::T_USING }, 172 { "virtual", boost::wave::T_VIRTUAL }, 173 { "void", boost::wave::T_VOID }, 174 { "volatile", boost::wave::T_VOLATILE }, 175 { "wchar_t", boost::wave::T_WCHART }, 176 { "while", boost::wave::T_WHILE }, 177 #if BOOST_WAVE_SUPPORT_MS_EXTENSIONS != 0 178 { "__int8", boost::wave::T_MSEXT_INT8 }, 179 { "__int16", boost::wave::T_MSEXT_INT16 }, 180 { "__int32", boost::wave::T_MSEXT_INT32 }, 181 { "__int64", boost::wave::T_MSEXT_INT64 }, 182 { "__based", boost::wave::T_MSEXT_BASED }, 183 { "_based", boost::wave::T_MSEXT_BASED }, 184 { "__declspec", boost::wave::T_MSEXT_DECLSPEC }, 185 { "_declspec", boost::wave::T_MSEXT_DECLSPEC }, 186 { "__fastcall", boost::wave::T_MSEXT_FASTCALL }, 187 { "_fastcall", boost::wave::T_MSEXT_FASTCALL }, 188 { "__stdcall", boost::wave::T_MSEXT_STDCALL }, 189 { "_stdcall", boost::wave::T_MSEXT_STDCALL }, 190 { "__try", boost::wave::T_MSEXT_TRY }, 191 { "__except", boost::wave::T_MSEXT_EXCEPT }, 192 { "__finally", boost::wave::T_MSEXT_FINALLY }, 193 { "__leave", boost::wave::T_MSEXT_LEAVE }, 194 { "__inline", boost::wave::T_MSEXT_INLINE }, 195 { "_inline", boost::wave::T_MSEXT_INLINE }, 196 { "__asm", boost::wave::T_MSEXT_ASM }, 197 { "_asm", boost::wave::T_MSEXT_ASM }, 198 { "#region", boost::wave::T_MSEXT_PP_REGION }, 199 { "#endregion", boost::wave::T_MSEXT_PP_ENDREGION }, 200 #endif // BOOST_WAVE_SUPPORT_MS_EXTENSIONS != 0 201 { "#define", boost::wave::T_PP_DEFINE }, 202 { "#ifdef", boost::wave::T_PP_IFDEF }, 203 { "#ifndef", boost::wave::T_PP_IFNDEF }, 204 { "#if", boost::wave::T_PP_IF }, 205 { "#else", boost::wave::T_PP_ELSE }, 206 { "#elif", boost::wave::T_PP_ELIF }, 207 { "#endif", boost::wave::T_PP_ENDIF }, 208 { "#error", boost::wave::T_PP_ERROR }, 209 { "#include \"some_header\"", boost::wave::T_PP_QHEADER }, 210 { "#include <some_header>", boost::wave::T_PP_HHEADER }, 211 // { "#include SOME_HEADER", boost::wave::T_PP_INCLUDE }, 212 { "#line", boost::wave::T_PP_LINE }, 213 { "#pragma", boost::wave::T_PP_PRAGMA }, 214 { "#undef", boost::wave::T_PP_UNDEF }, 215 { "#warning", boost::wave::T_PP_WARNING }, 216 { "some_identifier_1234", boost::wave::T_IDENTIFIER }, 217 { "some_identifier_\\u00d4", boost::wave::T_IDENTIFIER }, 218 { "some_identifier_\\U000000d4", boost::wave::T_IDENTIFIER }, 219 { ".1", boost::wave::T_FLOATLIT }, 220 { "1.1", boost::wave::T_FLOATLIT }, 221 { "1.", boost::wave::T_FLOATLIT }, 222 { ".1e+1", boost::wave::T_FLOATLIT }, 223 { ".1E-1", boost::wave::T_FLOATLIT }, 224 { ".1e1", boost::wave::T_FLOATLIT }, 225 { "1e1", boost::wave::T_FLOATLIT }, 226 { "1e1f", boost::wave::T_FLOATLIT }, 227 { "1e1L", boost::wave::T_FLOATLIT }, 228 { "1.1e1fl", boost::wave::T_FLOATLIT }, 229 { "1.e1LF", boost::wave::T_FLOATLIT }, 230 { "1234LL", boost::wave::T_LONGINTLIT }, 231 { "1234ll", boost::wave::T_LONGINTLIT }, 232 { "1234llu", boost::wave::T_LONGINTLIT }, 233 { "1234ull", boost::wave::T_LONGINTLIT }, 234 #if BOOST_WAVE_SUPPORT_MS_EXTENSIONS != 0 235 { "1234i64", boost::wave::T_LONGINTLIT }, 236 #endif 237 { "1234L", boost::wave::T_INTLIT }, 238 { "1234l", boost::wave::T_INTLIT }, 239 { "1234ul", boost::wave::T_INTLIT }, 240 { "1234LU", boost::wave::T_INTLIT }, 241 { "1234", boost::wave::T_INTLIT }, 242 { " ", boost::wave::T_SPACE }, 243 { "\t", boost::wave::T_SPACE }, 244 { "\n", boost::wave::T_NEWLINE }, 245 { "##", boost::wave::T_POUND_POUND }, 246 { "\?\?=\?\?=", boost::wave::T_POUND_POUND_TRIGRAPH }, 247 { "#", boost::wave::T_POUND }, 248 { "\?\?=", boost::wave::T_POUND_TRIGRAPH }, 249 { "\?\?/", boost::wave::T_ANY_TRIGRAPH }, 250 { "?", boost::wave::T_QUESTION_MARK }, 251 { NULL, boost::wave::token_id(0) } 252 }; 253 254