OpenCores
URL https://opencores.org/ocsvn/thor/thor/trunk

Subversion Repositories thor

[/] [thor/] [trunk/] [FT64v5/] [software/] [CC64/] [source/] [IdentifyKeyword.cpp] - Blame information for rev 48

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 48 robfinch
// ============================================================================
2
//        __
3
//   \\__/ o\    (C) 2012-2017  Robert Finch, Waterloo
4
//    \  __ /    All rights reserved.
5
//     \/_//     robfinch<remove>@finitron.ca
6
//       ||
7
//
8
// C64 - 'C' derived language compiler
9
//  - 64 bit CPU
10
//
11
// This source file is free software: you can redistribute it and/or modify 
12
// it under the terms of the GNU Lesser General Public License as published 
13
// by the Free Software Foundation, either version 3 of the License, or     
14
// (at your option) any later version.                                      
15
//                                                                          
16
// This source file is distributed in the hope that it will be useful,      
17
// but WITHOUT ANY WARRANTY; without even the implied warranty of           
18
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            
19
// GNU General Public License for more details.                             
20
//                                                                          
21
// You should have received a copy of the GNU General Public License        
22
// along with this program.  If not, see <http://www.gnu.org/licenses/>.    
23
//                                                                          
24
// ============================================================================
25
//
26
#include "stdafx.h"
27
 
28
int IdentifyKeyword()
29
{
30
        char *p = lastkw;
31
 
32
        if (p[0]=='i') { // if,int,inton,intoff,interrupt,icache,inline,inout
33
                if (p[1]=='f' && p[2]=='\0')
34
                        return lastst = kw_if;
35
                if (p[1]=='n' && p[2]=='t' && p[3]=='\0')
36
                        return lastst = kw_int;
37
                if (p[1]=='n' && p[2]=='t' && p[3]=='o' && p[4]=='n' && p[5]=='\0')
38
                        return lastst = kw_inton;
39
                if (p[1]=='n' && p[2]=='t' && p[3]=='o' && p[4]=='f' && p[5]=='f' && p[6]=='\0')
40
                        return lastst = kw_intoff;
41
                if (p[1]=='n' && p[2]=='t' && p[3]=='e' && p[4]=='r' && p[5]=='r' && p[6]=='u' && p[7]=='p' && p[8]=='t' && p[9]=='\0')
42
                        return lastst = kw_interrupt;
43
                if (p[1]=='c' && p[2]=='a' && p[3]=='c' && p[4]=='h' && p[5]=='e' && p[6]=='\0')
44
                        return lastst = kw_icache;
45
                if (p[1]=='n' && p[2]=='l' && p[3]=='i' && p[4]=='n' && p[5]=='e' && p[6]=='\0')
46
                        return lastst = kw_inline;
47
                if (p[1]=='n' && p[2]=='o' && p[3]=='u' && p[4]=='t' && p[5]=='\0')
48
                        return lastst = kw_inout;
49
        }
50
 
51
        // break,byte
52
        if (p[0]=='b' && p[1]=='r' && p[2]=='e' && p[3]=='a' && p[4]=='k' && p[5]=='\0')
53
                return lastst = kw_break;
54
        if (p[0]=='b' && p[1]=='y' && p[2]=='t' && p[3]=='e' && p[4]=='\0')
55
                return lastst = kw_byte;
56
 
57
        // while,wchar_t
58
        if (p[0]=='w') {
59
                if(p[1]=='h' && p[2]=='i' && p[3]=='l' && p[4]=='e' && p[5]=='\0')
60
                        return lastst = kw_while;
61
                if (wcharSupport)
62
                        if (p[1]=='c' && p[2]=='h' && p[3]=='a' && p[4]=='r' && p[5]=='_' && p[6]=='t' && p[7]=='\0')
63
                                return lastst = kw_char;
64
        }
65
 
66
        if (p[0]=='d') { // do,default,double,dcache,delete
67
                if (p[1]=='o' && p[2]=='\0')
68
                        return lastst = kw_do;
69
                if (p[1]=='e' && p[2]=='l' && p[3]=='e' && p[4]=='t' && p[5]=='e' && p[6]=='\0') {
70
                        return lastst = kw_delete;
71
                }
72
                if (p[1]=='o' && p[2]=='u' && p[3]=='b' && p[4]=='l' && p[5]=='e' && p[6]=='\0')
73
                        return lastst = kw_double;
74
                if (p[1]=='e' && p[2]=='f' && p[3]=='a' && p[4]=='u' && p[5]=='l' && p[6]=='t' && p[7]=='\0')
75
                        return lastst = kw_default;
76
                if (p[1]=='c' && p[2]=='a' && p[3]=='c' && p[4]=='h' && p[5]=='e' && p[6]=='\0')
77
                        return lastst = kw_dcache;
78
        }
79
 
80
        if (p[0]=='o') { // or,oscall
81
                if (p[1]=='r' && p[2]=='\0')
82
                        return lastst = lor;
83
                if (p[1]=='s' && p[2]=='c' && p[3]=='a' && p[4]=='l' && p[5]=='l' && p[6]=='\0')
84
                        return lastst = kw_oscall;
85
        }
86
 
87
        if (p[0]=='c') { // case,catch,char,class,const,continue
88
                if(p[1]=='a' && p[2]=='s' && p[3]=='e' && p[4]=='\0')
89
                        return lastst = kw_case;
90
                if(p[1]=='a' && p[2]=='t' && p[3]=='c' && p[4]=='h' && p[5]=='\0')
91
                        return lastst = kw_catch;
92
                if(p[1]=='h' && p[2]=='a' && p[3]=='r' && p[4]=='\0')
93
                        return lastst = kw_char;
94
                if (p[1]=='l' && p[2]=='a' && p[3]=='s' && p[4]=='s' && p[5]=='\0')
95
                        return lastst = kw_class;
96
                if (p[1]=='o' && p[2]=='n' && p[3]=='s' && p[4]=='t' && p[5]=='\0')
97
                        return lastst = kw_const;
98
                if (p[1]=='o' && p[2]=='n' && p[3]=='t' && p[4]=='i' && p[5]=='n' && p[6]=='u' && p[7]=='e' && p[8]=='\0')
99
                        return lastst = kw_continue;
100
                if (p[1]=='r' && p[2]=='i' && p[3]=='t' && p[4]=='i' && p[5]=='c' && p[6]=='a' && p[7]=='l' && p[8]=='\0')
101
                        return lastst = kw_critical;
102
        }
103
 
104
        if (p[0]=='l') { // long,loop,lockfail
105
                if (p[1]=='o' && p[2]=='n' && p[3]=='g' && p[4]=='\0')
106
                        return lastst = kw_long;
107
                if (p[1]=='o' && p[2]=='o' && p[3]=='p' && p[4]=='\0')
108
                        return lastst = kw_loop;
109
                if (p[1]=='o' && p[2]=='c' && p[3]=='k' && p[4]=='f' && p[5]=='a' && p[6]=='i' && p[7]=='l' && p[8]=='\0')
110
                        return lastst = kw_lockfail;
111
        }
112
 
113
        if (p[0]=='s') { // switch,short,static,stop,struct,sizeof,signed
114
                if (p[1]=='w' && p[2]=='i' && p[3]=='t' && p[4]=='c' && p[5]=='h' && p[6]=='\0')
115
                        return lastst = kw_switch;
116
                if (p[1]=='t' && p[2]=='a' && p[3]=='t' && p[4]=='i' && p[5]=='c' && p[6]=='\0')
117
                        return lastst = kw_static;
118
                if (p[1]=='h' && p[2]=='o' && p[3]=='r' && p[4]=='t' && p[5]=='\0')
119
                        return lastst = kw_short;
120
                if (p[1]=='t' && p[2]=='o' && p[3]=='p' && p[4]=='\0')
121
                        return lastst = kw_stop;
122
                if (p[1]=='t' && p[2]=='r' && p[3]=='u' && p[4]=='c' && p[5]=='t' && p[6]=='\0')
123
                        return lastst = kw_struct;
124
                if (p[1]=='i' && p[2]=='z' && p[3]=='e' && p[4]=='o' && p[5]=='f' && p[6]=='\0')
125
                        return lastst = kw_sizeof;
126
                if (p[1]=='i' && p[2]=='g' && p[3]=='n' && p[4]=='e' && p[5]=='d' && p[6]=='\0')
127
                        return lastst = kw_signed;
128
        }
129
 
130
        if (p[0]=='t') { // typedef,typenum,throw,then,try,thread
131
                if (p[1]=='y' && p[2]=='p' && p[3]=='e' && p[4]=='d' && p[5]=='e' && p[6]=='f' && p[7]=='\0')
132
                        return lastst = kw_typedef;
133
                if (p[1]=='y' && p[2]=='p' && p[3]=='e' && p[4]=='n' && p[5]=='u' && p[6]=='n' && p[7]=='\0')
134
                        return lastst = kw_typenum;
135
                if (p[1]=='h' && p[2]=='r' && p[3]=='o' && p[4]=='w' && p[5]=='\0')
136
                        return lastst = kw_throw;
137
                if (p[1]=='h' && p[2]=='e' && p[3]=='n' && p[4]=='\0')
138
                        return lastst = kw_then;
139
                if (p[1]=='r' && p[2]=='y' && p[3]=='\0')
140
                        return lastst = kw_try;
141
                if (p[1]=='h' && p[2]=='r' && p[3]=='e' && p[4]=='a' && p[5]=='d' && p[6]=='\0')
142
                        return lastst = kw_thread;
143
        }
144
 
145
        if (p[0]=='g' && p[1]=='o' && p[2]=='t' && p[3]=='o' && p[4]=='\0')
146
                return lastst = kw_goto;
147
        if (p[0]=='j' && p[1]=='u' && p[2]=='m' && p[3]=='p' && p[4]=='\0')
148
                return lastst = kw_goto;
149
 
150
        if (p[0]=='e') { // else,enum,extern,epilog
151
                if (p[1]=='l' && p[2]=='s' && p[3]=='e' && p[4]=='\0')
152
                        return lastst = kw_else;
153
                if (p[1]=='l' && p[2]=='s' && p[3]=='i' && p[4]=='f' && p[5]=='\0')
154
                        return lastst = kw_elsif;
155
                if (p[1]=='n' && p[2]=='u' && p[3]=='m' && p[4]=='\0')
156
                        return lastst = kw_enum;
157
                if (p[1]=='x' && p[2]=='t' && p[3]=='e' && p[4]=='r' && p[5]=='n' && p[6]=='\0')
158
                        return lastst = kw_extern;
159
                if (p[1]=='p' && p[2]=='i' && p[3]=='l' && p[4]=='o' && p[5]=='g' && p[6]=='\0')
160
                        return lastst = kw_epilog;
161
        }
162
        if (p[0]=='a') { // abs,and,asm,align,auto
163
                //if (p[1]=='b' && p[2]=='s' && p[3]=='\0')
164
                //      return lastst = kw_abs;
165
                if (p[1]=='n' && p[2]=='d' && p[3]=='\0')
166
                        return lastst = land;
167
                if (p[1]=='s' && p[2]=='m' && p[3]=='\0')
168
                        return lastst = kw_asm;
169
                if (p[1]=='l' && p[2]=='i' && p[3]=='g' && p[4]=='n' && p[5]=='\0')
170
                        return lastst = kw_align;
171
                if (p[1]=='u' && p[2]=='t' && p[3]=='o' && p[4]=='\0')
172
                        return lastst = kw_auto;
173
        }
174
        if (p[0]=='v') {         // vector,vector_mask,virtual,void,volatile
175
                if (p[1]=='e' && p[2]=='c' && p[3]=='t' && p[4]=='o' && p[5]=='r' && p[6]=='\0')
176
                        return lastst = kw_vector;
177
                if (p[1]=='e' && p[2]=='c' && p[3]=='t' && p[4]=='o' && p[5]=='r'
178
                        && p[6]=='_' && p[7]=='m' && p[8]=='a' && p[9]=='s' && p[10]=='k' && p[11]=='\0')
179
                        return lastst = kw_vector_mask;
180
                if (p[1]=='i' && p[2]=='r' && p[3]=='t' && p[4]=='u' && p[5]=='a' && p[6]=='l' && p[7]=='\0')
181
                        return lastst = kw_virtual;
182
                if (p[1]=='o' && p[2]=='i' && p[3]=='d' && p[4]=='\0')
183
                        return lastst = kw_void;
184
                if (p[1]=='o' && p[2]=='l' && p[3]=='a' && p[4]=='t' && p[5]=='i' && p[6]=='l' && p[7]=='e' && p[8]=='\0')
185
                        return lastst = kw_volatile;
186
        }
187
        if (p[0]=='r' && p[1]=='e') {    // return,register
188
                if (p[2]=='t' && p[3]=='u' && p[4]=='r' && p[5]=='n' && p[6]=='\0')
189
                        return lastst = kw_return;
190
                if (p[2]=='g' && p[3]=='i' && p[4]=='s' && p[5]=='t' && p[6]=='e' && p[7]=='r' && p[8]=='\0')
191
                        return lastst = kw_register;
192
        }
193
        if (p[0]=='l' && p[1]=='o' && p[2]=='o' && p[3]=='p' && p[4]=='\0')
194
                return lastst = kw_loop;
195
 
196
        if (p[0]=='u') { // unsigned,union,until,unique,using
197
                if (p[1]=='n' && p[2]=='s' && p[3]=='i' && p[4]=='g' && p[5]=='n' && p[6]=='e' && p[7]=='d' && p[8]=='\0')
198
                        return lastst = kw_unsigned;
199
                if (p[1]=='n' && p[2]=='i' && p[3]=='o' && p[4]=='n' && p[5]=='\0')
200
                        return lastst = kw_union;
201
                if (p[1]=='n' && p[2]=='t' && p[3]=='i' && p[4]=='l' && p[5]=='\0')
202
                        return lastst = kw_until;
203
        if (p[1]=='n' && p[2]=='i' && p[3]=='q' && p[4]=='u' && p[5]=='e' && p[6]=='\0') {
204
                return lastst = kw_unique;
205
        }
206
        if (p[1]=='s' && p[2]=='i' && p[3]=='n' && p[4]=='g' && p[5]=='\0') {
207
                return lastst = kw_using;
208
        }
209
        }
210
 
211
        if (p[0]=='f') { // float,forever,for,fallthru,firstcall,false
212
                if (p[1]=='o' && p[2]=='r' && p[3]=='\0')
213
                        return lastst = kw_for;
214
                if (p[1]=='l' && p[2]=='o' && p[3]=='a' && p[4]=='t' && p[5]=='\0')
215
                        return lastst = kw_float;
216
                if (p[1]=='o' && p[2]=='r' && p[3]=='e' && p[4]=='v' && p[5]=='e' && p[6]=='r' && p[7]=='\0')
217
                        return lastst = kw_forever;
218
                if (p[1]=='a' && p[2]=='l' && p[3]=='l' && p[4]=='t' && p[5]=='h' && p[6]=='r' && p[7]=='u' && p[8]=='\0')
219
                        return lastst = kw_fallthru;
220
                if (p[1]=='i' && p[2]=='r' && p[3]=='s' && p[4]=='t' && p[5]=='c' && p[6]=='a' && p[7]=='l' && p[8]=='l' && p[9]=='\0')
221
                        return lastst = kw_firstcall;
222
                if (p[1]=='a' && p[2]=='l' && p[3]=='s' && p[4]=='e' && p[5]=='\0') {
223
                        ival = 0;
224
                        return lastst = iconst;
225
                }
226
        }
227
        // max min mod
228
        if (p[0]=='m') {
229
                //if (p[1]=='a' && p[2]=='x' && p[3]=='\0')
230
                //      return (lastst = kw_max);
231
                //if (p[1]=='i' && p[2]=='n' && p[3]=='\0')
232
                //      return (lastst = kw_min);
233
                if (p[1]=='o' && p[2]=='d' && p[3]=='\0')
234
                        return lastst = modop;
235
        }
236
 
237
        if (p[0]=='p') { // private,public,pascal,prolog
238
                if (p[1]=='r' && p[2]=='i' && p[3]=='v' && p[4]=='a' && p[5]=='t' && p[6]=='e' && p[7]=='\0')
239
                        return lastst = kw_private;
240
                if (p[1]=='u' && p[2]=='b' && p[3]=='l' && p[4]=='i' && p[5]=='c' && p[6]=='\0')
241
                        return lastst = kw_public;
242
                if (p[1]=='a' && p[2]=='s' && p[3]=='c' && p[4]=='a' && p[5]=='l' && p[6]=='\0')
243
                        return lastst = kw_pascal;
244
                if (p[1]=='r' && p[2]=='o' && p[3]=='l' && p[4]=='o' && p[5]=='g' && p[6]=='\0')
245
                        return lastst = kw_prolog;
246
        }
247
        if (p[0]=='n') { // nocall,null,naked,new,namespace,not
248
                if (p[1]=='e' && p[2]=='w' && p[3]=='\0') {
249
                        return lastst = kw_new;
250
                }
251
                if (p[1]=='o' && p[2]=='t' && p[3]=='\0') {
252
                        return lastst = kw_not;
253
                }
254
                if (p[1]=='a' && p[2]=='k' && p[3]=='e' && p[4]=='d' && p[5]=='\0')
255
                        return lastst = kw_naked;
256
                if (p[1]=='o' && p[2]=='c' && p[3]=='a' && p[4]=='l' && p[5]=='l' && p[6]=='\0')
257
                        return lastst = kw_nocall;
258
                if (p[1]=='u' && p[2]=='l' && p[3]=='l' && p[4]=='\0') {
259
                        ival = 0;
260
                        return lastst = iconst;
261
                }
262
                if (p[1]=='a' && p[2]=='m' && p[3]=='e' && p[4]=='s' && p[5]=='p' && p[6]=='a' && p[7]=='c' && p[8]=='e' && p[9]=='\0')
263
                        return lastst = kw_namespace;
264
        }
265
        // kernel
266
        if (p[0]=='k') {
267
        if (p[1]=='e' && p[2]=='r' && p[3]=='n' && p[4]=='e' && p[5]=='l' && p[6]=='\0')
268
            return lastst = kw_kernel;
269
    }
270
        //// spinlock,spinunlock
271
        //if (p[0]=='s' && p[1]=='p' && p[2]=='i' && p[3]=='n' && p[4]=='l' && p[5]=='o' && p[6]=='c' && p[7]=='k' && p[8]=='\0')
272
        //      return lastst = kw_spinlock;
273
        //if (p[0]=='s' && p[1]=='p' && p[2]=='i' && p[3]=='n' && p[4]=='u' && p[5]=='n' && p[6]=='l' && p[7]=='o' && p[8]=='c' && p[9]=='k' && p[10]=='\0')
274
        //      return lastst = kw_spinunlock;
275
 
276
        // this,triple,true
277
        if (p[0]=='t') {
278
        if (p[1]=='r' && p[2]=='u' && p[3]=='e' && p[4]=='\0') {
279
                ival = 1;
280
                return lastst = iconst;
281
        }
282
        if (p[1]=='h' && p[2]=='i' && p[3]=='s' && p[4]=='\0') {
283
                return lastst = kw_this;
284
        }
285
        if (p[1]=='r' && p[2]=='i' && p[3]=='p' && p[4]=='l' && p[5]=='e' && p[6]=='\0') {
286
                return lastst = kw_triple;
287
        }
288
  }
289
 
290
 
291
        // __cdecl,__asm,__int64,__int32,__int16,__int8,__check,__exception,__task,__unordered,__leafs,__attribute__
292
        // __no_temps __no_parms __floatmax
293
        if (p[0]=='_' && p[1]=='_') {
294
                if (p[2]=='a' && p[3]=='s' && p[4]=='m' && p[5]=='\0')
295
                        return lastst = kw_asm;
296
                if (p[2]=='c' && p[3]=='d' && p[4]=='e' && p[5]=='c' && p[6]=='l' && p[7]=='\0')
297
                        return lastst = kw_cdecl;
298
                if (p[2]=='i' && p[3]=='n' && p[4]=='t') {
299
                        if (p[5]=='8' && p[6]=='0' && p[7]=='\0')
300
                                return lastst = kw_int80;
301
                        if (p[5]=='6' && p[6]=='4' && p[7]=='\0')
302
                                return lastst = kw_int64;
303
                        if (p[5]=='4' && p[6]=='0' && p[7]=='\0')
304
                                return lastst = kw_int40;
305
                        if (p[5]=='3' && p[6]=='2' && p[7]=='\0')
306
                                return lastst = kw_int32;
307
                        if (p[5]=='1' && p[6]=='6' && p[7]=='\0')
308
                                return lastst = kw_int16;
309
                        if (p[5]=='8' && p[6]=='\0')
310
                                return lastst = kw_int8;
311
                }
312
                if (p[2]=='c' && p[3]=='h' && p[4]=='e' && p[5]=='c' && p[6]=='k' && p[7]=='\0')
313
                        return lastst = kw_check;
314
                if (p[2]=='e' && p[3]=='x' && p[4]=='c' && p[5]=='e' && p[6]=='p' && p[7]=='t' && p[8]=='i' && p[9]=='o' && p[10]=='n' && p[11]=='\0')
315
                        return lastst = kw_exception;
316
                if (p[2]=='t' && p[3]=='a' && p[4]=='s' && p[5]=='k' && p[6]=='\0')
317
                        return lastst = kw_task;
318
                if (p[2]=='u' && p[3]=='n' && p[4]=='o' && p[5]=='r' && p[6]=='d' && p[7]=='e' && p[8]=='r' && p[9]=='e' && p[10]=='d' && p[11]=='\0')
319
                        return lastst = kw_unordered;
320
                if (p[2]=='l' && p[3]=='e' && p[4]=='a' && p[5]=='f' && p[6]=='s' && p[7]=='\0')
321
                        return lastst = kw_leafs;
322
                if (p[2]=='a' && p[3]=='t' && p[4]=='t' && p[5]=='r' && p[6]=='i' && p[7]=='b' && p[8]=='u' && p[9]=='t' && p[10]=='e' && p[11]=='_' && p[12]=='_' && p[13]=='\0')
323
                        return lastst = kw_attribute;
324
                if (p[2]=='n' && p[3]=='o' && p[4]=='_' && p[5]=='t' && p[6]=='e' && p[7]=='m' && p[8]=='p' && p[9]=='s' && p[10]=='\0')
325
                        return lastst = kw_no_temps;
326
                if (p[2]=='n' && p[3]=='o' && p[4]=='_' && p[5]=='p' && p[6]=='a' && p[7]=='r' && p[8]=='m' && p[9]=='s' && p[10]=='\0')
327
                        return lastst = kw_no_parms;
328
                if (p[2]=='f' && p[3]=='l' && p[4]=='o' && p[5]=='a' && p[6]=='t' && p[7]=='m' && p[8]=='a' && p[9]=='x' && p[10]=='\0')
329
                        return lastst = kw_floatmax;
330
                if (p[2] == 'f' && p[3] == 'l' && p[4] == 'o' && p[5] == 'a' && p[6] == 't' && p[7] == '1' && p[8] == '2' && p[9] == '8' && p[10] == '\0')
331
                        return lastst = kw_float128;
332
        }
333
 
334
        return 0;
335
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.