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