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

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