ScummVM API documentation
as_tokendef.h
1 /*
2  AngelCode Scripting Library
3  Copyright (c) 2003-2019 Andreas Jonsson
4 
5  This software is provided 'as-is', without any express or implied
6  warranty. In no event will the authors be held liable for any
7  damages arising from the use of this software.
8 
9  Permission is granted to anyone to use this software for any
10  purpose, including commercial applications, and to alter it and
11  redistribute it freely, subject to the following restrictions:
12 
13  1. The origin of this software must not be misrepresented; you
14  must not claim that you wrote the original software. If you use
15  this software in a product, an acknowledgment in the product
16  documentation would be appreciated but is not required.
17 
18  2. Altered source versions must be plainly marked as such, and
19  must not be misrepresented as being the original software.
20 
21  3. This notice may not be removed or altered from any source
22  distribution.
23 
24  The original version of this library can be located at:
25  http://www.angelcode.com/angelscript/
26 
27  Andreas Jonsson
28  andreas@angelcode.com
29 */
30 
31 
32 //
33 // as_tokendef.h
34 //
35 // Definitions for tokens identifiable by the tokenizer
36 //
37 
38 
39 #ifndef AS_TOKENDEF_H
40 #define AS_TOKENDEF_H
41 
42 #include "as_config.h"
43 
44 BEGIN_AS_NAMESPACE
45 
46 enum eTokenType {
47  ttUnrecognizedToken,
48 
49  ttEnd, // End of file
50 
51  // White space and comments
52  ttWhiteSpace, // ' ', '\t', '\r', '\n', UTF8 byte-order-mark
53  ttOnelineComment, // // \n
54  ttMultilineComment, // /* */
55 
56  // Atoms
57  ttIdentifier, // abc123
58  ttIntConstant, // 1234
59  ttFloatConstant, // 12.34e56f
60  ttDoubleConstant, // 12.34e56
61  ttStringConstant, // "123"
62  ttMultilineStringConstant, //
63  ttHeredocStringConstant, // """text"""
64  ttNonTerminatedStringConstant, // "123
65  ttBitsConstant, // 0xFFFF
66 
67  // Math operators
68  ttPlus, // +
69  ttMinus, // -
70  ttStar, // *
71  ttSlash, // /
72  ttPercent, // %
73  ttStarStar, // **
74 
75  ttHandle, // @
76 
77  ttAddAssign, // +=
78  ttSubAssign, // -=
79  ttMulAssign, // *=
80  ttDivAssign, // /=
81  ttModAssign, // %=
82  ttPowAssign, // **=
83 
84  ttOrAssign, // |=
85  ttAndAssign, // &=
86  ttXorAssign, // ^=
87  ttShiftLeftAssign, // <<=
88  ttShiftRightLAssign, // >>=
89  ttShiftRightAAssign, // >>>=
90 
91  ttInc, // ++
92  ttDec, // --
93 
94  ttDot, // .
95  ttScope, // ::
96 
97  // Statement tokens
98  ttAssignment, // =
99  ttEndStatement, // ;
100  ttListSeparator, // ,
101  ttStartStatementBlock, // {
102  ttEndStatementBlock, // }
103  ttOpenParanthesis, // (
104  ttCloseParanthesis, // )
105  ttOpenBracket, // [
106  ttCloseBracket, // ]
107  ttAmp, // &
108 
109  // Bitwise operators
110  ttBitOr, // |
111  ttBitNot, // ~
112  ttBitXor, // ^
113  ttBitShiftLeft, // <<
114  ttBitShiftRight, // >> // TODO: In Java this is the arithmetical shift
115  ttBitShiftRightArith, // >>> // TODO: In Java this is the logical shift
116 
117  // Compare operators
118  ttEqual, // ==
119  ttNotEqual, // !=
120  ttLessThan, // <
121  ttGreaterThan, // >
122  ttLessThanOrEqual, // <=
123  ttGreaterThanOrEqual, // >=
124 
125  ttQuestion, // ?
126  ttColon, // :
127 
128  // Reserved keywords
129  ttIf, // if
130  ttElse, // else
131  ttFor, // for
132  ttWhile, // while
133  ttBool, // bool
134  ttFuncDef, // funcdef
135  ttImport, // import
136  ttInt, // int
137  ttInt8, // int8
138  ttInt16, // int16
139  ttInt64, // int64
140  ttInterface, // interface
141  ttIs, // is
142  ttNotIs, // !is
143  ttUInt, // uint
144  ttUInt8, // uint8
145  ttUInt16, // uint16
146  ttUInt64, // uint64
147  ttFloat, // float
148  ttVoid, // void
149  ttTrue, // true
150  ttFalse, // false
151  ttReturn, // return
152  ttNot, // not
153  ttAnd, // and, &&
154  ttOr, // or, ||
155  ttXor, // xor, ^^
156  ttBreak, // break
157  ttContinue, // continue
158  ttConst, // const
159  ttDo, // do
160  ttDouble, // double
161  ttSwitch, // switch
162  ttCase, // case
163  ttDefault, // default
164  ttIn, // in
165  ttOut, // out
166  ttInOut, // inout
167  ttNull, // null
168  ttClass, // class
169  ttTypedef, // typedef
170  ttEnum, // enum
171  ttCast, // cast
172  ttPrivate, // private
173  ttProtected, // protected
174  ttNamespace, // namespace
175  ttMixin, // mixin
176  ttAuto, // auto
177  ttTry, // try
178  ttCatch // catch
179 };
180 
181 struct sTokenWord {
182  const char *word;
183  size_t wordLength;
184  eTokenType tokenType;
185 };
186 
187 #define asTokenDef(str, tok) {str, sizeof(str)-1, tok}
188 
189 sTokenWord const tokenWords[] = {
190  asTokenDef("+", ttPlus),
191  asTokenDef("+=", ttAddAssign),
192  asTokenDef("++", ttInc),
193  asTokenDef("-", ttMinus),
194  asTokenDef("-=", ttSubAssign),
195  asTokenDef("--", ttDec),
196  asTokenDef("*", ttStar),
197  asTokenDef("*=", ttMulAssign),
198  asTokenDef("/", ttSlash),
199  asTokenDef("/=", ttDivAssign),
200  asTokenDef("%", ttPercent),
201  asTokenDef("%=", ttModAssign),
202  asTokenDef("**", ttStarStar),
203  asTokenDef("**=", ttPowAssign),
204  asTokenDef("=", ttAssignment),
205  asTokenDef("==", ttEqual),
206  asTokenDef(".", ttDot),
207  asTokenDef("|", ttBitOr),
208  asTokenDef("|=", ttOrAssign),
209  asTokenDef("||", ttOr),
210  asTokenDef("&", ttAmp),
211  asTokenDef("&=", ttAndAssign),
212  asTokenDef("&&", ttAnd),
213  asTokenDef("^", ttBitXor),
214  asTokenDef("^=", ttXorAssign),
215  asTokenDef("^^", ttXor),
216  asTokenDef("<", ttLessThan),
217  asTokenDef("<=", ttLessThanOrEqual),
218  asTokenDef("<<", ttBitShiftLeft),
219  asTokenDef("<<=", ttShiftLeftAssign),
220  asTokenDef(">", ttGreaterThan),
221  asTokenDef(">=", ttGreaterThanOrEqual),
222  asTokenDef(">>", ttBitShiftRight),
223  asTokenDef(">>=", ttShiftRightLAssign),
224  asTokenDef(">>>", ttBitShiftRightArith),
225  asTokenDef(">>>=", ttShiftRightAAssign),
226  asTokenDef("~", ttBitNot),
227  asTokenDef(";", ttEndStatement),
228  asTokenDef(",", ttListSeparator),
229  asTokenDef("{", ttStartStatementBlock),
230  asTokenDef("}", ttEndStatementBlock),
231  asTokenDef("(", ttOpenParanthesis),
232  asTokenDef(")", ttCloseParanthesis),
233  asTokenDef("[", ttOpenBracket),
234  asTokenDef("]", ttCloseBracket),
235  asTokenDef("?", ttQuestion),
236  asTokenDef(":", ttColon),
237  asTokenDef("::", ttScope),
238  asTokenDef("!", ttNot),
239  asTokenDef("!=", ttNotEqual),
240  asTokenDef("!is", ttNotIs),
241  asTokenDef("@", ttHandle),
242  asTokenDef("and", ttAnd),
243  asTokenDef("auto", ttAuto),
244  asTokenDef("bool", ttBool),
245  asTokenDef("break", ttBreak),
246  asTokenDef("case", ttCase),
247  asTokenDef("cast", ttCast),
248  asTokenDef("catch", ttCatch),
249  asTokenDef("class", ttClass),
250  asTokenDef("const", ttConst),
251  asTokenDef("continue", ttContinue),
252  asTokenDef("default", ttDefault),
253  asTokenDef("do", ttDo),
254 #ifdef AS_USE_DOUBLE_AS_FLOAT
255  asTokenDef("double", ttFloat),
256 #else
257  asTokenDef("double", ttDouble),
258 #endif
259  asTokenDef("else", ttElse),
260  asTokenDef("enum", ttEnum),
261  asTokenDef("false", ttFalse),
262  asTokenDef("float", ttFloat),
263  asTokenDef("for", ttFor),
264  asTokenDef("funcdef", ttFuncDef),
265  asTokenDef("if", ttIf),
266  asTokenDef("import", ttImport),
267  asTokenDef("in", ttIn),
268  asTokenDef("inout", ttInOut),
269  asTokenDef("int", ttInt),
270  asTokenDef("int8", ttInt8),
271  asTokenDef("int16", ttInt16),
272  asTokenDef("int32", ttInt),
273  asTokenDef("int64", ttInt64),
274  asTokenDef("interface", ttInterface),
275  asTokenDef("is", ttIs),
276  asTokenDef("mixin", ttMixin),
277  asTokenDef("namespace", ttNamespace),
278  asTokenDef("not", ttNot),
279  asTokenDef("null", ttNull),
280  asTokenDef("or", ttOr),
281  asTokenDef("out", ttOut),
282  asTokenDef("private", ttPrivate),
283  asTokenDef("protected", ttProtected),
284  asTokenDef("return", ttReturn),
285  asTokenDef("switch", ttSwitch),
286  asTokenDef("true", ttTrue),
287  asTokenDef("try", ttTry),
288  asTokenDef("typedef", ttTypedef),
289  asTokenDef("uint", ttUInt),
290  asTokenDef("uint8", ttUInt8),
291  asTokenDef("uint16", ttUInt16),
292  asTokenDef("uint32", ttUInt),
293  asTokenDef("uint64", ttUInt64),
294  asTokenDef("void", ttVoid),
295  asTokenDef("while", ttWhile),
296  asTokenDef("xor", ttXor),
297 };
298 
299 const unsigned int numTokenWords = sizeof(tokenWords) / sizeof(sTokenWord);
300 
301 const char *const whiteSpace = " \t\r\n";
302 
303 // Some keywords that are not considered tokens by the parser
304 // These only have meaning in specific situations. Outside these
305 // situations they are treated as normal identifiers.
306 const char *const THIS_TOKEN = "this";
307 const char *const FROM_TOKEN = "from";
308 const char *const SUPER_TOKEN = "super";
309 const char *const SHARED_TOKEN = "shared";
310 const char *const FINAL_TOKEN = "final";
311 const char *const OVERRIDE_TOKEN = "override";
312 const char *const GET_TOKEN = "get";
313 const char *const SET_TOKEN = "set";
314 const char *const ABSTRACT_TOKEN = "abstract";
315 const char *const FUNCTION_TOKEN = "function";
316 const char *const IF_HANDLE_TOKEN = "if_handle_then_const";
317 const char *const EXTERNAL_TOKEN = "external";
318 const char *const EXPLICIT_TOKEN = "explicit";
319 const char *const PROPERTY_TOKEN = "property";
320 
321 END_AS_NAMESPACE
322 
323 #endif
Definition: as_tokendef.h:181