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

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