6068295cbc24ed45ea2fca8ed37e500e1bf6ebc4
[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         TOK_STR,
42         TOK_INTEGER,
43         TOK_VARIABLE,
44         TOK_IDENT,
45         
46         TOK_RWD_FUNCTION,
47         TOK_RWD_NAMESPACE,
48         
49         TOK_RWD_NEW,
50         TOK_RWD_RETURN,
51         
52         TOK_RWD_IF,
53         TOK_RWD_ELSE,
54         TOK_RWD_DO,
55         TOK_RWD_WHILE,
56         TOK_RWD_FOR,
57         
58         TOK_RWD_VOID,
59         TOK_RWD_OBJECT,
60         TOK_RWD_OPAQUE,
61         TOK_RWD_STRING,
62         TOK_RWD_INTEGER,
63         TOK_RWD_REAL,
64         
65         TOK_ASSIGN,
66         TOK_SEMICOLON,
67         TOK_COMMA,
68         TOK_SCOPE,
69         TOK_ELEMENT,
70         
71         TOK_EQUALS,
72         TOK_LT, TOK_LTE,
73         TOK_GT, TOK_GTE,
74         
75         TOK_DIV,        TOK_MUL,
76         TOK_PLUS,       TOK_MINUS,
77         TOK_SHL,        TOK_SHR,
78         TOK_LOGICAND,   TOK_LOGICOR,    TOK_LOGICXOR,
79         TOK_AND,        TOK_OR, TOK_XOR,
80         
81         TOK_PAREN_OPEN,
82         TOK_PAREN_CLOSE,
83         TOK_BRACE_OPEN,
84         TOK_BRACE_CLOSE,
85         TOK_SQUARE_OPEN,
86         TOK_SQUARE_CLOSE,
87         
88         TOK_LAST
89 };
90
91 #define TOKEN_GROUP_TYPES       TOK_RWD_VOID:\
92         case TOK_RWD_OBJECT:\
93         case TOK_RWD_OPAQUE:\
94         case TOK_RWD_INTEGER:\
95         case TOK_RWD_STRING:\
96         case TOK_RWD_REAL
97 #define TOKEN_GROUP_TYPES_STR   "TOK_RWD_VOID, TOK_RWD_OBJECT, TOK_RWD_OPAQUE, TOK_RWD_INTEGER, TOK_RWD_STRING or TOK_RWD_REAL"
98
99 #define TOKEN_GET_DATATYPE(_type, _tok) do { switch(_tok) {\
100         case TOK_RWD_VOID:  _type = SS_DATATYPE_UNDEF;  break;\
101         case TOK_RWD_INTEGER:_type = SS_DATATYPE_INTEGER;       break;\
102         case TOK_RWD_OPAQUE: _type = SS_DATATYPE_OPAQUE;        break;\
103         case TOK_RWD_OBJECT: _type = SS_DATATYPE_OBJECT;        break;\
104         case TOK_RWD_REAL:   _type = SS_DATATYPE_REAL;  break;\
105         case TOK_RWD_STRING: _type = SS_DATATYPE_STRING;        break;\
106         default:fprintf(stderr,\
107         "ERROR: Unexpected %s, expected "TOKEN_GROUP_TYPES_STR"\n",csaTOKEN_NAMES[Parser->Token]);\
108         break;\
109         } } while(0)
110
111 # if WANT_TOKEN_STRINGS
112 const char * const csaTOKEN_NAMES[] = {
113         "TOK_INVAL",
114         "TOK_EOF",
115         
116         "TOK_STR",
117         "TOK_INTEGER",
118         "TOK_VARIABLE",
119         "TOK_IDENT",
120         
121         "TOK_RWD_FUNCTION",
122         "TOK_RWD_NAMESPACE",
123         
124         "TOK_RWD_NEW",
125         "TOK_RWD_RETURN",
126         
127         "TOK_RWD_IF",
128         "TOK_RWD_ELSE",
129         "TOK_RWD_DO",
130         "TOK_RWD_WHILE",
131         "TOK_RWD_FOR",
132         
133         "TOK_RWD_VOID",
134         "TOK_RWD_OBJECT",
135         "TOK_RWD_OPAUQE",
136         "TOK_RWD_STRING",
137         "TOK_RWD_INTEGER",
138         "TOK_RWD_REAL",
139         
140         "TOK_ASSIGN",
141         "TOK_SEMICOLON",
142         "TOK_COMMA",
143         "TOK_SCOPE",
144         "TOK_ELEMENT",
145         
146         "TOK_EQUALS",
147         "TOK_LT",       "TOK_LTE",
148         "TOK_GT",       "TOK_GTE",
149         
150         "TOK_DIV",      "TOK_MUL",
151         "TOK_PLUS",     "TOK_MINUS",
152         "TOK_SHL",      "TOK_SHR",
153         "TOK_LOGICAND", "TOK_LOGICOR",  "TOK_LOGICXOR",
154         "TOK_AND",      "TOK_OR",       "TOK_XOR",
155         
156         "TOK_PAREN_OPEN",
157         "TOK_PAREN_CLOSE",
158         "TOK_BRACE_OPEN",
159         "TOK_BRACE_CLOSE",
160         "TOK_SQUARE_OPEN",
161         "TOK_SQUARE_CLOSE",
162         
163         "TOK_LAST"
164 };
165 # endif
166
167 #endif

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