• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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