/*============================================================================= Boost.Wave: A Standard compliant C++ preprocessor library http://www.boost.org/ Copyright (c) 2001-2012 Hartmut Kaiser. 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) =============================================================================*/ #include #include /////////////////////////////////////////////////////////////////////////////// struct lexem { char const*token; boost::wave::token_id id; }; /////////////////////////////////////////////////////////////////////////////// lexem const lexems[] = { { "bitand", boost::wave::T_AND_ALT }, { "and", boost::wave::T_ANDAND_ALT }, { "and_eq", boost::wave::T_ANDASSIGN_ALT }, { "bitor", boost::wave::T_OR_ALT }, { "or_eq", boost::wave::T_ORASSIGN_ALT }, { "or", boost::wave::T_OROR_ALT }, { "xor", boost::wave::T_XOR_ALT }, { "xor_eq", boost::wave::T_XORASSIGN_ALT }, { "not", boost::wave::T_NOT_ALT }, { "not_eq", boost::wave::T_NOTEQUAL_ALT }, { "compl", boost::wave::T_COMPL_ALT }, { "->*", boost::wave::T_ARROWSTAR }, { ".*", boost::wave::T_DOTSTAR }, { "::", boost::wave::T_COLON_COLON }, { "/* some C comment */", boost::wave::T_CCOMMENT }, { "/* some multiline \n C comment \n */", boost::wave::T_CCOMMENT }, { "// some c++ comment\n", boost::wave::T_CPPCOMMENT }, { " ", boost::wave::T_SPACE }, { "\t\v\f", boost::wave::T_SPACE }, { "'c'", boost::wave::T_CHARLIT }, { "'\\n'", boost::wave::T_CHARLIT }, { "'\\u1234'", boost::wave::T_CHARLIT }, { "'\\U12345678'", boost::wave::T_CHARLIT }, { "\"string literal\"", boost::wave::T_STRINGLIT }, { "\"string literal \\n \\u1234 \\U12345678\"", boost::wave::T_STRINGLIT }, { "&&", boost::wave::T_ANDAND }, { "&=", boost::wave::T_ANDASSIGN }, { "==", boost::wave::T_EQUAL }, { "=", boost::wave::T_ASSIGN }, { "|=", boost::wave::T_ORASSIGN }, { "\?\?!=", boost::wave::T_ORASSIGN_TRIGRAPH }, { "||", boost::wave::T_OROR }, { "|\?\?!", boost::wave::T_OROR_TRIGRAPH }, { "\?\?!|", boost::wave::T_OROR_TRIGRAPH }, { "\?\?!\?\?!", boost::wave::T_OROR_TRIGRAPH }, { "|", boost::wave::T_OR }, { "\?\?!", boost::wave::T_OR_TRIGRAPH }, { "^=", boost::wave::T_XORASSIGN }, { "\?\?'=", boost::wave::T_XORASSIGN_TRIGRAPH }, { "^", boost::wave::T_XOR }, { "\?\?'", boost::wave::T_XOR_TRIGRAPH }, { ",", boost::wave::T_COMMA }, { ":>", boost::wave::T_RIGHTBRACKET_ALT }, { ":", boost::wave::T_COLON }, { "/=", boost::wave::T_DIVIDEASSIGN }, { "/", boost::wave::T_DIVIDE }, { "...", boost::wave::T_ELLIPSIS }, { ".", boost::wave::T_DOT }, { ">>=", boost::wave::T_SHIFTRIGHTASSIGN }, { ">>", boost::wave::T_SHIFTRIGHT }, { ">=", boost::wave::T_GREATEREQUAL }, { ">", boost::wave::T_GREATER }, { "{", boost::wave::T_LEFTBRACE }, { "<<=", boost::wave::T_SHIFTLEFTASSIGN }, { "<<", boost::wave::T_SHIFTLEFT }, { "<=", boost::wave::T_LESSEQUAL }, { "<%", boost::wave::T_LEFTBRACE_ALT }, { "<:", boost::wave::T_LEFTBRACKET_ALT }, { "<", boost::wave::T_LESS }, { "\?\?<", boost::wave::T_LEFTBRACE_TRIGRAPH }, { "(", boost::wave::T_LEFTPAREN }, { "[", boost::wave::T_LEFTBRACKET }, { "\?\?(", boost::wave::T_LEFTBRACKET_TRIGRAPH }, { "--", boost::wave::T_MINUSMINUS }, { "-=", boost::wave::T_MINUSASSIGN }, { "->", boost::wave::T_ARROW }, { "-", boost::wave::T_MINUS }, { "%:%:", boost::wave::T_POUND_POUND_ALT }, { "%=", boost::wave::T_PERCENTASSIGN }, { "%>", boost::wave::T_RIGHTBRACE_ALT }, { "%:", boost::wave::T_POUND_ALT }, { "%", boost::wave::T_PERCENT }, { "!=", boost::wave::T_NOTEQUAL }, { "!", boost::wave::T_NOT }, { "+=", boost::wave::T_PLUSASSIGN }, { "++", boost::wave::T_PLUSPLUS }, { "+", boost::wave::T_PLUS }, { "}", boost::wave::T_RIGHTBRACE }, { "\?\?>", boost::wave::T_RIGHTBRACE_TRIGRAPH }, { ")", boost::wave::T_RIGHTPAREN }, { "]", boost::wave::T_RIGHTBRACKET }, { "\?\?)", boost::wave::T_RIGHTBRACKET_TRIGRAPH }, { ";", boost::wave::T_SEMICOLON }, { "*=", boost::wave::T_STARASSIGN }, { "*", boost::wave::T_STAR }, { "~", boost::wave::T_COMPL }, { "\?\?-", boost::wave::T_COMPL_TRIGRAPH }, { "asm", boost::wave::T_ASM }, { "auto", boost::wave::T_AUTO }, { "bool", boost::wave::T_BOOL }, { "false", boost::wave::T_FALSE }, { "true", boost::wave::T_TRUE }, { "break", boost::wave::T_BREAK }, { "case", boost::wave::T_CASE }, { "catch", boost::wave::T_CATCH }, { "char", boost::wave::T_CHAR }, { "class", boost::wave::T_CLASS }, { "const_cast", boost::wave::T_CONSTCAST }, { "const", boost::wave::T_CONST }, { "continue", boost::wave::T_CONTINUE }, { "default", boost::wave::T_DEFAULT }, { "delete", boost::wave::T_DELETE }, { "do", boost::wave::T_DO }, { "double", boost::wave::T_DOUBLE }, { "dynamic_cast", boost::wave::T_DYNAMICCAST }, { "else", boost::wave::T_ELSE }, { "enum", boost::wave::T_ENUM }, { "explicit", boost::wave::T_EXPLICIT }, { "export", boost::wave::T_EXPORT }, { "extern", boost::wave::T_EXTERN }, { "float", boost::wave::T_FLOAT }, { "for", boost::wave::T_FOR }, { "friend", boost::wave::T_FRIEND }, { "goto", boost::wave::T_GOTO }, { "if", boost::wave::T_IF }, #if BOOST_WAVE_SUPPORT_IMPORT_KEYWORD != 0 { "import", boost::wave::T_IMPORT}, #endif { "inline", boost::wave::T_INLINE }, { "int", boost::wave::T_INT }, { "long", boost::wave::T_LONG }, { "mutable", boost::wave::T_MUTABLE }, { "namespace", boost::wave::T_NAMESPACE }, { "new", boost::wave::T_NEW }, { "operator", boost::wave::T_OPERATOR }, { "private", boost::wave::T_PRIVATE }, { "protected", boost::wave::T_PROTECTED }, { "public", boost::wave::T_PUBLIC }, { "register", boost::wave::T_REGISTER }, { "reinterpret_cast", boost::wave::T_REINTERPRETCAST }, { "return", boost::wave::T_RETURN }, { "short", boost::wave::T_SHORT }, { "signed", boost::wave::T_SIGNED }, { "sizeof", boost::wave::T_SIZEOF }, { "static_cast", boost::wave::T_STATICCAST }, { "static", boost::wave::T_STATIC }, { "struct", boost::wave::T_STRUCT }, { "switch", boost::wave::T_SWITCH }, { "template", boost::wave::T_TEMPLATE }, { "this", boost::wave::T_THIS }, { "throw", boost::wave::T_THROW }, { "try", boost::wave::T_TRY }, { "typedef", boost::wave::T_TYPEDEF }, { "typeid", boost::wave::T_TYPEID }, { "typename", boost::wave::T_TYPENAME }, { "union", boost::wave::T_UNION }, { "unsigned", boost::wave::T_UNSIGNED }, { "using", boost::wave::T_USING }, { "virtual", boost::wave::T_VIRTUAL }, { "void", boost::wave::T_VOID }, { "volatile", boost::wave::T_VOLATILE }, { "wchar_t", boost::wave::T_WCHART }, { "while", boost::wave::T_WHILE }, #if BOOST_WAVE_SUPPORT_MS_EXTENSIONS != 0 { "__int8", boost::wave::T_MSEXT_INT8 }, { "__int16", boost::wave::T_MSEXT_INT16 }, { "__int32", boost::wave::T_MSEXT_INT32 }, { "__int64", boost::wave::T_MSEXT_INT64 }, { "__based", boost::wave::T_MSEXT_BASED }, { "_based", boost::wave::T_MSEXT_BASED }, { "__declspec", boost::wave::T_MSEXT_DECLSPEC }, { "_declspec", boost::wave::T_MSEXT_DECLSPEC }, { "__fastcall", boost::wave::T_MSEXT_FASTCALL }, { "_fastcall", boost::wave::T_MSEXT_FASTCALL }, { "__stdcall", boost::wave::T_MSEXT_STDCALL }, { "_stdcall", boost::wave::T_MSEXT_STDCALL }, { "__try", boost::wave::T_MSEXT_TRY }, { "__except", boost::wave::T_MSEXT_EXCEPT }, { "__finally", boost::wave::T_MSEXT_FINALLY }, { "__leave", boost::wave::T_MSEXT_LEAVE }, { "__inline", boost::wave::T_MSEXT_INLINE }, { "_inline", boost::wave::T_MSEXT_INLINE }, { "__asm", boost::wave::T_MSEXT_ASM }, { "_asm", boost::wave::T_MSEXT_ASM }, { "#region", boost::wave::T_MSEXT_PP_REGION }, { "#endregion", boost::wave::T_MSEXT_PP_ENDREGION }, #endif // BOOST_WAVE_SUPPORT_MS_EXTENSIONS != 0 { "#define", boost::wave::T_PP_DEFINE }, { "#ifdef", boost::wave::T_PP_IFDEF }, { "#ifndef", boost::wave::T_PP_IFNDEF }, { "#if", boost::wave::T_PP_IF }, { "#else", boost::wave::T_PP_ELSE }, { "#elif", boost::wave::T_PP_ELIF }, { "#endif", boost::wave::T_PP_ENDIF }, { "#error", boost::wave::T_PP_ERROR }, { "#include \"some_header\"", boost::wave::T_PP_QHEADER }, { "#include ", boost::wave::T_PP_HHEADER }, // { "#include SOME_HEADER", boost::wave::T_PP_INCLUDE }, { "#line", boost::wave::T_PP_LINE }, { "#pragma", boost::wave::T_PP_PRAGMA }, { "#undef", boost::wave::T_PP_UNDEF }, { "#warning", boost::wave::T_PP_WARNING }, { "some_identifier_1234", boost::wave::T_IDENTIFIER }, { "some_identifier_\\u00d4", boost::wave::T_IDENTIFIER }, { "some_identifier_\\U000000d4", boost::wave::T_IDENTIFIER }, { ".1", boost::wave::T_FLOATLIT }, { "1.1", boost::wave::T_FLOATLIT }, { "1.", boost::wave::T_FLOATLIT }, { ".1e+1", boost::wave::T_FLOATLIT }, { ".1E-1", boost::wave::T_FLOATLIT }, { ".1e1", boost::wave::T_FLOATLIT }, { "1e1", boost::wave::T_FLOATLIT }, { "1e1f", boost::wave::T_FLOATLIT }, { "1e1L", boost::wave::T_FLOATLIT }, { "1.1e1fl", boost::wave::T_FLOATLIT }, { "1.e1LF", boost::wave::T_FLOATLIT }, { "1234LL", boost::wave::T_LONGINTLIT }, { "1234Ll", boost::wave::T_LONGINTLIT }, { "1234ll", boost::wave::T_LONGINTLIT }, { "1234llu", boost::wave::T_LONGINTLIT }, { "1234ull", boost::wave::T_LONGINTLIT }, #if BOOST_WAVE_SUPPORT_MS_EXTENSIONS != 0 { "1234i64", boost::wave::T_LONGINTLIT }, #endif { "1234L", boost::wave::T_INTLIT }, { "1234l", boost::wave::T_INTLIT }, { "1234ul", boost::wave::T_INTLIT }, { "1234LU", boost::wave::T_INTLIT }, { "1234", boost::wave::T_INTLIT }, { " ", boost::wave::T_SPACE }, { "\t", boost::wave::T_SPACE }, { "\n", boost::wave::T_NEWLINE }, { "##", boost::wave::T_POUND_POUND }, { "\?\?=\?\?=", boost::wave::T_POUND_POUND_TRIGRAPH }, { "#", boost::wave::T_POUND }, { "\?\?=", boost::wave::T_POUND_TRIGRAPH }, { "\?\?/", boost::wave::T_ANY_TRIGRAPH }, { "?", boost::wave::T_QUESTION_MARK }, { NULL, boost::wave::token_id(0) } };