SpiderScript - Fixed array behaviour, removed memory leaks
[tpg/acess2.git] / Usermode / Libraries / libspiderscript.so_src / tokens.h
1 /*
2  */
3 #ifndef _TOKENS_H_
4 #define _TOKENS_H_
5
6 #include <setjmp.h>
7
8 // Make the scope character ('.') be a symbol, otherwise it's just
9 // a ident character
10 #define USE_SCOPE_CHAR  1
11
12 // === TYPES ===
13 typedef struct
14 {       
15         // Lexer State
16         const char      *BufStart;
17         const char      *CurPos;
18         
19         char    *Filename;
20         
21          int    LastLine;
22          int    LastToken, LastTokenLen;
23         const char      *LastTokenStr;
24         
25          int    NextLine;
26          int    NextToken, NextTokenLen;
27         const char      *NextTokenStr;
28         
29          int    CurLine;
30          int    Token, TokenLen;
31         const char      *TokenStr;
32         
33         jmp_buf JmpTarget;
34          int    ErrorHit;
35         
36         struct sSpiderVariant   *Variant;
37 }       tParser;
38
39 // === FUNCTIONS ===
40  int    GetToken(tParser *File);
41 void    PutBack(tParser *File);
42  int    LookAhead(tParser *File);
43
44 // === CONSTANTS ===
45 enum eTokens
46 {
47         TOK_INVAL,
48         TOK_EOF,
49         
50         // Primitives
51         TOK_STR,
52         TOK_INTEGER,
53         TOK_REAL,
54         TOK_VARIABLE,
55         TOK_IDENT,
56         
57         // Reserved Words
58         // - Definitions
59         TOK_RWD_FUNCTION,
60         TOK_RWD_NAMESPACE,
61         // - Control Flow
62         TOK_RWD_NEW,
63         TOK_RWD_RETURN,
64         TOK_RWD_BREAK,
65         TOK_RWD_CONTINUE,
66         // - Blocks
67         TOK_RWD_IF,
68         TOK_RWD_ELSE,
69         TOK_RWD_DO,
70         TOK_RWD_WHILE,
71         TOK_RWD_FOR,
72         // - Value
73         TOK_RWD_NULL,
74         // - Types
75         TOK_RWD_VOID,
76         TOK_RWD_OBJECT,
77         TOK_RWD_OPAQUE,
78         TOK_RWD_STRING,
79         TOK_RWD_INTEGER,
80         TOK_RWD_REAL,
81         
82         // 
83         TOK_ASSIGN,
84         TOK_SEMICOLON,
85         TOK_COMMA,
86         TOK_SCOPE,
87         TOK_ELEMENT,
88         
89         // Comparisons
90         TOK_EQUALS, TOK_NOTEQUALS,
91         TOK_LT, TOK_LTE,
92         TOK_GT, TOK_GTE,
93         
94         // Operations
95         TOK_BWNOT,      TOK_LOGICNOT,
96         TOK_DIV,        TOK_MUL,
97         TOK_PLUS,       TOK_MINUS,
98         TOK_SHL,        TOK_SHR,
99         TOK_LOGICAND,   TOK_LOGICOR,    TOK_LOGICXOR,
100         TOK_AND,        TOK_OR, TOK_XOR,
101         
102         // Assignment Operations
103         TOK_INCREMENT,          TOK_DECREMENT,
104         TOK_ASSIGN_DIV,         TOK_ASSIGN_MUL,
105         TOK_ASSIGN_PLUS,        TOK_ASSIGN_MINUS,
106         TOK_ASSIGN_SHL,         TOK_ASSIGN_SHR,
107         TOK_ASSIGN_LOGICAND,    TOK_ASSIGN_LOGICOR,     TOK_ASSIGN_LOGXICOR,
108         TOK_ASSIGN_AND,         TOK_ASSIGN_OR,  TOK_ASSIGN_XOR,
109         
110         TOK_PAREN_OPEN,         TOK_PAREN_CLOSE,
111         TOK_BRACE_OPEN,         TOK_BRACE_CLOSE,
112         TOK_SQUARE_OPEN,        TOK_SQUARE_CLOSE,
113         
114         TOK_LAST
115 };
116
117 #define TOKEN_GROUP_TYPES       TOK_RWD_VOID:\
118         case TOK_RWD_OBJECT:\
119         case TOK_RWD_OPAQUE:\
120         case TOK_RWD_INTEGER:\
121         case TOK_RWD_STRING:\
122         case TOK_RWD_REAL
123 #define TOKEN_GROUP_TYPES_STR   "TOK_RWD_VOID, TOK_RWD_OBJECT, TOK_RWD_OPAQUE, TOK_RWD_INTEGER, TOK_RWD_STRING or TOK_RWD_REAL"
124
125 #define TOKEN_GET_DATATYPE(_type, _tok) do { switch(_tok) {\
126         case TOK_RWD_VOID:  _type = SS_DATATYPE_UNDEF;  break;\
127         case TOK_RWD_INTEGER:_type = SS_DATATYPE_INTEGER;       break;\
128         case TOK_RWD_OPAQUE: _type = SS_DATATYPE_OPAQUE;        break;\
129         case TOK_RWD_OBJECT: _type = SS_DATATYPE_OBJECT;        break;\
130         case TOK_RWD_REAL:   _type = SS_DATATYPE_REAL;  break;\
131         case TOK_RWD_STRING: _type = SS_DATATYPE_STRING;        break;\
132         default:_type=SS_DATATYPE_UNDEF;fprintf(stderr,\
133         "ERROR: Unexpected %s, expected "TOKEN_GROUP_TYPES_STR"\n",csaTOKEN_NAMES[Parser->Token]);\
134         break;\
135         } } while(0)
136
137 # if WANT_TOKEN_STRINGS
138 const char * const csaTOKEN_NAMES[] = {
139         "TOK_INVAL",
140         "TOK_EOF",
141         
142         "TOK_STR",
143         "TOK_INTEGER",
144         "TOK_REAL",
145         "TOK_VARIABLE",
146         "TOK_IDENT",
147         
148         "TOK_RWD_FUNCTION",
149         "TOK_RWD_NAMESPACE",
150         
151         "TOK_RWD_NEW",
152         "TOK_RWD_RETURN",
153         "TOK_RWD_BREAK",
154         "TOK_RWD_CONTINUE",
155         
156         "TOK_RWD_IF",
157         "TOK_RWD_ELSE",
158         "TOK_RWD_DO",
159         "TOK_RWD_WHILE",
160         "TOK_RWD_FOR",
161         
162         "TOK_RWD_NULL",
163         "TOK_RWD_VOID",
164         "TOK_RWD_OBJECT",
165         "TOK_RWD_OPAUQE",
166         "TOK_RWD_STRING",
167         "TOK_RWD_INTEGER",
168         "TOK_RWD_REAL",
169         
170         "TOK_ASSIGN",
171         "TOK_SEMICOLON",
172         "TOK_COMMA",
173         "TOK_SCOPE",
174         "TOK_ELEMENT",
175         
176         "TOK_EQUALS",   "TOK_NOTEQUALS",
177         "TOK_LT",       "TOK_LTE",
178         "TOK_GT",       "TOK_GTE",
179         
180         "TOK_BWNOT",    "TOK_LOGICNOT",
181         "TOK_DIV",      "TOK_MUL",
182         "TOK_PLUS",     "TOK_MINUS",
183         "TOK_SHL",      "TOK_SHR",
184         "TOK_LOGICAND", "TOK_LOGICOR",  "TOK_LOGICXOR",
185         "TOK_AND",      "TOK_OR",       "TOK_XOR",
186         
187         "TOK_INCREMENT",        "TOK_DECREMENT",
188         "TOK_ASSIGN_DIV",       "TOK_ASSIGN_MUL",
189         "TOK_ASSIGN_PLUS",      "TOK_ASSIGN_MINUS",
190         "TOK_ASSIGN_SHL",       "TOK_ASSIGN_SHR",
191         "TOK_ASSIGN_LOGICAND",  "TOK_ASSIGN_LOGICOR",   "TOK_ASSIGN_LOGICXOR",
192         "TOK_ASSIGN_AND",       "TOK_ASSIGN_OR",        "TOK_ASSIGN_XOR",
193         
194         "TOK_PAREN_OPEN",       "TOK_PAREN_CLOSE",
195         "TOK_BRACE_OPEN",       "TOK_BRACE_CLOSE",
196         "TOK_SQUARE_OPEN",      "TOK_SQUARE_CLOSE",
197         
198         "TOK_LAST"
199 };
200 # endif
201
202 #endif

UCC git Repository :: git.ucc.asn.au