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

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