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

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