cpp_tokens.hpp 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. /*=============================================================================
  2. Boost.Wave: A Standard compliant C++ preprocessor library
  3. http://www.boost.org/
  4. Copyright (c) 2001-2012 Hartmut Kaiser. Distributed under the Boost
  5. Software License, Version 1.0. (See accompanying file
  6. LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  7. =============================================================================*/
  8. #include <boost/wave/wave_config.hpp>
  9. #include <boost/wave/token_ids.hpp>
  10. ///////////////////////////////////////////////////////////////////////////////
  11. struct lexem
  12. {
  13. char const*token;
  14. boost::wave::token_id id;
  15. };
  16. ///////////////////////////////////////////////////////////////////////////////
  17. lexem const lexems[] =
  18. {
  19. { "bitand", boost::wave::T_AND_ALT },
  20. { "and", boost::wave::T_ANDAND_ALT },
  21. { "and_eq", boost::wave::T_ANDASSIGN_ALT },
  22. { "bitor", boost::wave::T_OR_ALT },
  23. { "or_eq", boost::wave::T_ORASSIGN_ALT },
  24. { "or", boost::wave::T_OROR_ALT },
  25. { "xor", boost::wave::T_XOR_ALT },
  26. { "xor_eq", boost::wave::T_XORASSIGN_ALT },
  27. { "not", boost::wave::T_NOT_ALT },
  28. { "not_eq", boost::wave::T_NOTEQUAL_ALT },
  29. { "compl", boost::wave::T_COMPL_ALT },
  30. { "->*", boost::wave::T_ARROWSTAR },
  31. { ".*", boost::wave::T_DOTSTAR },
  32. { "::", boost::wave::T_COLON_COLON },
  33. { "/* some C comment */", boost::wave::T_CCOMMENT },
  34. { "/* some multiline \n C comment \n */", boost::wave::T_CCOMMENT },
  35. { "// some c++ comment\n", boost::wave::T_CPPCOMMENT },
  36. { " ", boost::wave::T_SPACE },
  37. { "\t\v\f", boost::wave::T_SPACE },
  38. { "'c'", boost::wave::T_CHARLIT },
  39. { "'\\n'", boost::wave::T_CHARLIT },
  40. { "'\\u1234'", boost::wave::T_CHARLIT },
  41. { "'\\U12345678'", boost::wave::T_CHARLIT },
  42. { "\"string literal\"", boost::wave::T_STRINGLIT },
  43. { "\"string literal \\n \\u1234 \\U12345678\"", boost::wave::T_STRINGLIT },
  44. { "&&", boost::wave::T_ANDAND },
  45. { "&=", boost::wave::T_ANDASSIGN },
  46. { "==", boost::wave::T_EQUAL },
  47. { "=", boost::wave::T_ASSIGN },
  48. { "|=", boost::wave::T_ORASSIGN },
  49. { "\?\?!=", boost::wave::T_ORASSIGN_TRIGRAPH },
  50. { "||", boost::wave::T_OROR },
  51. { "|\?\?!", boost::wave::T_OROR_TRIGRAPH },
  52. { "\?\?!|", boost::wave::T_OROR_TRIGRAPH },
  53. { "\?\?!\?\?!", boost::wave::T_OROR_TRIGRAPH },
  54. { "|", boost::wave::T_OR },
  55. { "\?\?!", boost::wave::T_OR_TRIGRAPH },
  56. { "^=", boost::wave::T_XORASSIGN },
  57. { "\?\?'=", boost::wave::T_XORASSIGN_TRIGRAPH },
  58. { "^", boost::wave::T_XOR },
  59. { "\?\?'", boost::wave::T_XOR_TRIGRAPH },
  60. { ",", boost::wave::T_COMMA },
  61. { ":>", boost::wave::T_RIGHTBRACKET_ALT },
  62. { ":", boost::wave::T_COLON },
  63. { "/=", boost::wave::T_DIVIDEASSIGN },
  64. { "/", boost::wave::T_DIVIDE },
  65. { "...", boost::wave::T_ELLIPSIS },
  66. { ".", boost::wave::T_DOT },
  67. { ">>=", boost::wave::T_SHIFTRIGHTASSIGN },
  68. { ">>", boost::wave::T_SHIFTRIGHT },
  69. { ">=", boost::wave::T_GREATEREQUAL },
  70. { ">", boost::wave::T_GREATER },
  71. { "{", boost::wave::T_LEFTBRACE },
  72. { "<<=", boost::wave::T_SHIFTLEFTASSIGN },
  73. { "<<", boost::wave::T_SHIFTLEFT },
  74. { "<=", boost::wave::T_LESSEQUAL },
  75. { "<%", boost::wave::T_LEFTBRACE_ALT },
  76. { "<:", boost::wave::T_LEFTBRACKET_ALT },
  77. { "<", boost::wave::T_LESS },
  78. { "\?\?<", boost::wave::T_LEFTBRACE_TRIGRAPH },
  79. { "(", boost::wave::T_LEFTPAREN },
  80. { "[", boost::wave::T_LEFTBRACKET },
  81. { "\?\?(", boost::wave::T_LEFTBRACKET_TRIGRAPH },
  82. { "--", boost::wave::T_MINUSMINUS },
  83. { "-=", boost::wave::T_MINUSASSIGN },
  84. { "->", boost::wave::T_ARROW },
  85. { "-", boost::wave::T_MINUS },
  86. { "%:%:", boost::wave::T_POUND_POUND_ALT },
  87. { "%=", boost::wave::T_PERCENTASSIGN },
  88. { "%>", boost::wave::T_RIGHTBRACE_ALT },
  89. { "%:", boost::wave::T_POUND_ALT },
  90. { "%", boost::wave::T_PERCENT },
  91. { "!=", boost::wave::T_NOTEQUAL },
  92. { "!", boost::wave::T_NOT },
  93. { "+=", boost::wave::T_PLUSASSIGN },
  94. { "++", boost::wave::T_PLUSPLUS },
  95. { "+", boost::wave::T_PLUS },
  96. { "}", boost::wave::T_RIGHTBRACE },
  97. { "\?\?>", boost::wave::T_RIGHTBRACE_TRIGRAPH },
  98. { ")", boost::wave::T_RIGHTPAREN },
  99. { "]", boost::wave::T_RIGHTBRACKET },
  100. { "\?\?)", boost::wave::T_RIGHTBRACKET_TRIGRAPH },
  101. { ";", boost::wave::T_SEMICOLON },
  102. { "*=", boost::wave::T_STARASSIGN },
  103. { "*", boost::wave::T_STAR },
  104. { "~", boost::wave::T_COMPL },
  105. { "\?\?-", boost::wave::T_COMPL_TRIGRAPH },
  106. { "asm", boost::wave::T_ASM },
  107. { "auto", boost::wave::T_AUTO },
  108. { "bool", boost::wave::T_BOOL },
  109. { "false", boost::wave::T_FALSE },
  110. { "true", boost::wave::T_TRUE },
  111. { "break", boost::wave::T_BREAK },
  112. { "case", boost::wave::T_CASE },
  113. { "catch", boost::wave::T_CATCH },
  114. { "char", boost::wave::T_CHAR },
  115. { "class", boost::wave::T_CLASS },
  116. { "const_cast", boost::wave::T_CONSTCAST },
  117. { "const", boost::wave::T_CONST },
  118. { "continue", boost::wave::T_CONTINUE },
  119. { "default", boost::wave::T_DEFAULT },
  120. { "delete", boost::wave::T_DELETE },
  121. { "do", boost::wave::T_DO },
  122. { "double", boost::wave::T_DOUBLE },
  123. { "dynamic_cast", boost::wave::T_DYNAMICCAST },
  124. { "else", boost::wave::T_ELSE },
  125. { "enum", boost::wave::T_ENUM },
  126. { "explicit", boost::wave::T_EXPLICIT },
  127. { "export", boost::wave::T_EXPORT },
  128. { "extern", boost::wave::T_EXTERN },
  129. { "float", boost::wave::T_FLOAT },
  130. { "for", boost::wave::T_FOR },
  131. { "friend", boost::wave::T_FRIEND },
  132. { "goto", boost::wave::T_GOTO },
  133. { "if", boost::wave::T_IF },
  134. #if BOOST_WAVE_SUPPORT_IMPORT_KEYWORD != 0
  135. { "import", boost::wave::T_IMPORT},
  136. #endif
  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. { "1234Ll", boost::wave::T_LONGINTLIT },
  227. { "1234ll", boost::wave::T_LONGINTLIT },
  228. { "1234llu", boost::wave::T_LONGINTLIT },
  229. { "1234ull", boost::wave::T_LONGINTLIT },
  230. #if BOOST_WAVE_SUPPORT_MS_EXTENSIONS != 0
  231. { "1234i64", boost::wave::T_LONGINTLIT },
  232. #endif
  233. { "1234L", boost::wave::T_INTLIT },
  234. { "1234l", boost::wave::T_INTLIT },
  235. { "1234ul", boost::wave::T_INTLIT },
  236. { "1234LU", boost::wave::T_INTLIT },
  237. { "1234", boost::wave::T_INTLIT },
  238. { " ", boost::wave::T_SPACE },
  239. { "\t", boost::wave::T_SPACE },
  240. { "\n", boost::wave::T_NEWLINE },
  241. { "##", boost::wave::T_POUND_POUND },
  242. { "\?\?=\?\?=", boost::wave::T_POUND_POUND_TRIGRAPH },
  243. { "#", boost::wave::T_POUND },
  244. { "\?\?=", boost::wave::T_POUND_TRIGRAPH },
  245. { "\?\?/", boost::wave::T_ANY_TRIGRAPH },
  246. { "?", boost::wave::T_QUESTION_MARK },
  247. { NULL, boost::wave::token_id(0) }
  248. };