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

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