1 | /*============================================================================= |
---|
2 | Boost.Wave: A Standard compliant C++ preprocessor library |
---|
3 | http://www.boost.org/ |
---|
4 | |
---|
5 | Copyright (c) 2001-2006 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 | { "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 | }; |
---|
249 | |
---|