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

Subversion Repositories raptor64

[/] [raptor64/] [trunk/] [software/] [c64/] [source/] [IdentifyKeyword.c] - Blame information for rev 37

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 37 robfinch
// ============================================================================
2
// (C) 2012 Robert Finch
3
// All Rights Reserved.
4
// robfinch<remove>@opencores.org
5
//
6
// C64 - Raptor64 'C' derived language compiler
7
//  - 64 bit CPU
8
//
9
// This source file is free software: you can redistribute it and/or modify 
10
// it under the terms of the GNU Lesser General Public License as published 
11
// by the Free Software Foundation, either version 3 of the License, or     
12
// (at your option) any later version.                                      
13
//                                                                          
14
// This source file is distributed in the hope that it will be useful,      
15
// but WITHOUT ANY WARRANTY; without even the implied warranty of           
16
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            
17
// GNU General Public License for more details.                             
18
//                                                                          
19
// You should have received a copy of the GNU General Public License        
20
// along with this program.  If not, see <http://www.gnu.org/licenses/>.    
21
//                                                                          
22
// ============================================================================
23
//
24
#include <stdio.h>
25
#include "c.h"
26
#include "expr.h"
27
#include "gen.h"
28
#include "cglbdec.h"
29
 
30
int IdentifyKeyword()
31
{
32
        char *p = lastid;
33
 
34
        if (p[0]=='i') { // if,int,inton,intoff,interrupt,icache
35
                if (p[1]=='f' && p[2]=='\0')
36
                        return lastst = kw_if;
37
                if (p[1]=='n' && p[2]=='t' && p[3]=='\0')
38
                        return lastst = kw_int;
39
                if (p[1]=='n' && p[2]=='t' && p[3]=='o' && p[4]=='n' && p[5]=='\0')
40
                        return lastst = kw_inton;
41
                if (p[1]=='n' && p[2]=='t' && p[3]=='o' && p[4]=='f' && p[5]=='f' && p[6]=='\0')
42
                        return lastst = kw_intoff;
43
                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')
44
                        return lastst = kw_interrupt;
45
                if (p[1]=='c' && p[2]=='a' && p[3]=='c' && p[4]=='h' && p[5]=='e' && p[6]=='\0')
46
                        return lastst = kw_icache;
47
        }
48
 
49
        if (p[0]=='b' && p[1]=='r' && p[2]=='e' && p[3]=='a' && p[4]=='k' && p[5]=='\0')
50
                return lastst = kw_break;
51
        if (p[0]=='b' && p[1]=='y' && p[2]=='t' && p[3]=='e' && p[4]=='\0')
52
                return lastst = kw_byte;
53
        if (p[0]=='w' && p[1]=='h' && p[2]=='i' && p[3]=='l' && p[4]=='e' && p[5]=='\0')
54
                return lastst = kw_while;
55
 
56
        if (p[0]=='d') { // do,default,double,dcache
57
                if (p[1]=='o' && p[2]=='\0')
58
                        return lastst = kw_do;
59
                if (p[1]=='o' && p[2]=='u' && p[3]=='b' && p[4]=='l' && p[5]=='e' && p[6]=='\0')
60
                        return lastst = kw_double;
61
                if (p[1]=='e' && p[2]=='f' && p[3]=='a' && p[4]=='u' && p[5]=='l' && p[6]=='t' && p[7]=='\0')
62
                        return lastst = kw_default;
63
                if (p[1]=='c' && p[2]=='a' && p[3]=='c' && p[4]=='h' && p[5]=='e' && p[6]=='\0')
64
                        return lastst = kw_dcache;
65
        }
66
 
67
        if (p[0]=='o') { // or,oscall
68
                if (p[1]=='r' && p[2]=='\0')
69
                        return lastst = lor;
70
                if (p[1]=='s' && p[2]=='c' && p[3]=='a' && p[4]=='l' && p[5]=='l' && p[6]=='\0')
71
                        return lastst = kw_oscall;
72
        }
73
 
74
        if (p[0]=='c') { // case,catch,char,continue
75
                if(p[1]=='a' && p[2]=='s' && p[3]=='e' && p[4]=='\0')
76
                        return lastst = kw_case;
77
                if(p[1]=='a' && p[2]=='t' && p[3]=='c' && p[4]=='h' && p[5]=='\0')
78
                        return lastst = kw_catch;
79
                if(p[1]=='h' && p[2]=='a' && p[3]=='r' && p[4]=='\0')
80
                        return lastst = kw_char;
81
                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')
82
                        return lastst = kw_continue;
83
                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')
84
                        return lastst = kw_critical;
85
        }
86
 
87
        if (p[0]=='l') { // long,loop,lockfail
88
                if (p[1]=='o' && p[2]=='n' && p[3]=='g' && p[4]=='\0')
89
                        return lastst = kw_long;
90
                if (p[1]=='o' && p[2]=='o' && p[3]=='p' && p[4]=='\0')
91
                        return lastst = kw_loop;
92
                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')
93
                        return lastst = kw_lockfail;
94
        }
95
 
96
        if (p[0]=='s') { // switch,short,static,stop,struct,sizeof,signed
97
                if (p[1]=='w' && p[2]=='i' && p[3]=='t' && p[4]=='c' && p[5]=='h' && p[6]=='\0')
98
                        return lastst = kw_switch;
99
                if (p[1]=='t' && p[2]=='a' && p[3]=='t' && p[4]=='i' && p[5]=='c' && p[6]=='\0')
100
                        return lastst = kw_static;
101
                if (p[1]=='h' && p[2]=='o' && p[3]=='r' && p[4]=='t' && p[5]=='\0')
102
                        return lastst = kw_short;
103
                if (p[1]=='t' && p[2]=='o' && p[3]=='p' && p[4]=='\0')
104
                        return lastst = kw_stop;
105
                if (p[1]=='t' && p[2]=='r' && p[3]=='u' && p[4]=='c' && p[5]=='t' && p[6]=='\0')
106
                        return lastst = kw_struct;
107
                if (p[1]=='i' && p[2]=='z' && p[3]=='e' && p[4]=='o' && p[5]=='f' && p[6]=='\0')
108
                        return lastst = kw_sizeof;
109
                if (p[1]=='i' && p[2]=='g' && p[3]=='n' && p[4]=='e' && p[5]=='d' && p[6]=='\0')
110
                        return lastst = kw_signed;
111
        }
112
 
113
        if (p[0]=='t') { // typedef,typenum,throw,then,try
114
                if (p[1]=='y' && p[2]=='p' && p[3]=='e' && p[4]=='d' && p[5]=='e' && p[6]=='f' && p[7]=='\0')
115
                        return lastst = kw_typedef;
116
                if (p[1]=='y' && p[2]=='p' && p[3]=='e' && p[4]=='n' && p[5]=='u' && p[6]=='n' && p[7]=='\0')
117
                        return lastst = kw_typenum;
118
                if (p[1]=='h' && p[2]=='r' && p[3]=='o' && p[4]=='w' && p[5]=='\0')
119
                        return lastst = kw_throw;
120
                if (p[1]=='h' && p[2]=='e' && p[3]=='n' && p[4]=='\0')
121
                        return lastst = kw_then;
122
                if (p[1]=='r' && p[2]=='y' && p[3]=='\0')
123
                        return lastst = kw_try;
124
        }
125
 
126
        if (p[0]=='g' && p[1]=='o' && p[2]=='t' && p[3]=='o' && p[4]=='\0')
127
                return lastst = kw_goto;
128
        if (p[0]=='j' && p[1]=='u' && p[2]=='m' && p[3]=='p' && p[4]=='\0')
129
                return lastst = kw_goto;
130
 
131
        if (p[0]=='e') { // else,enum,extern
132
                if (p[1]=='l' && p[2]=='s' && p[3]=='e' && p[4]=='\0')
133
                        return lastst = kw_else;
134
                if (p[1]=='l' && p[2]=='s' && p[3]=='i' && p[4]=='f' && p[5]=='\0')
135
                        return lastst = kw_elsif;
136
                if (p[1]=='n' && p[2]=='u' && p[3]=='m' && p[4]=='\0')
137
                        return lastst = kw_enum;
138
                if (p[1]=='x' && p[2]=='t' && p[3]=='e' && p[4]=='r' && p[5]=='n' && p[6]=='\0')
139
                        return lastst = kw_extern;
140
        }
141
        if (p[0]=='a') { // and,asm
142
                if (p[1]=='n' && p[2]=='d' && p[3]=='\0')
143
                        return lastst = land;
144
                if (p[1]=='s' && p[2]=='m' && p[3]=='\0')
145
                        return lastst = kw_asm;
146
        }
147
        if (p[0]=='v' && p[1]=='o' && p[2]=='i' && p[3]=='d' && p[4]=='\0')
148
                return lastst = kw_void;
149
        if (p[0]=='r' && p[1]=='e') {    // return,register
150
                if (p[2]=='t' && p[3]=='u' && p[4]=='r' && p[5]=='n' && p[6]=='\0')
151
                        return lastst = kw_return;
152
                if (p[2]=='g' && p[3]=='i' && p[4]=='s' && p[5]=='t' && p[6]=='e' && p[7]=='r' && p[8]=='\0')
153
                        return lastst = kw_register;
154
        }
155
        if (p[0]=='l' && p[1]=='o' && p[2]=='o' && p[3]=='p' && p[4]=='\0')
156
                return lastst = kw_loop;
157
        if (p[0]=='u') { // unsigned,union,until
158
                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')
159
                        return lastst = kw_unsigned;
160
                if (p[1]=='n' && p[2]=='i' && p[3]=='o' && p[4]=='n' && p[5]=='\0')
161
                        return lastst = kw_union;
162
                if (p[1]=='n' && p[2]=='t' && p[3]=='i' && p[4]=='l' && p[5]=='\0')
163
                        return lastst = kw_until;
164
        }
165
        if (p[0]=='f') { // float,forever,for,fallthru,firstcall
166
                if (p[1]=='o' && p[2]=='r' && p[3]=='\0')
167
                        return lastst = kw_for;
168
                if (p[1]=='l' && p[2]=='o' && p[3]=='a' && p[4]=='t' && p[5]=='\0')
169
                        return lastst = kw_float;
170
                if (p[1]=='o' && p[2]=='r' && p[3]=='e' && p[4]=='v' && p[5]=='e' && p[6]=='r' && p[7]=='\0')
171
                        return lastst = kw_forever;
172
                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')
173
                        return lastst = kw_fallthru;
174
                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')
175
                        return lastst = kw_firstcall;
176
        }
177
        if (p[0]=='m' && p[1]=='o' && p[2]=='d' && p[3]=='\0')
178
                return lastst = modop;
179
 
180
        if (p[0]=='p') { // private,public,pascal
181
                if (p[1]=='r' && p[2]=='i' && p[3]=='v' && p[4]=='a' && p[5]=='t' && p[6]=='e' && p[7]=='\0')
182
                        return lastst = kw_private;
183
                if (p[1]=='u' && p[2]=='b' && p[3]=='l' && p[4]=='i' && p[5]=='c' && p[6]=='\0')
184
                        return lastst = kw_public;
185
                if (p[1]=='a' && p[2]=='s' && p[3]=='c' && p[4]=='a' && p[5]=='l' && p[6]=='\0')
186
                        return lastst = kw_pascal;
187
        }
188
        if (p[0]=='n') { // nocall
189
                if (p[1]=='o' && p[2]=='c' && p[3]=='a' && p[4]=='l' && p[5]=='l' && p[6]=='\0')
190
                        return lastst = kw_nocall;
191
        }
192
        // __spinlock,__spinunlock
193
        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')
194
                return lastst = kw_spinlock;
195
        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')
196
                return lastst = kw_spinunlock;
197
 
198
        if (p[0]=='f' && p[1]=='a' && p[2]=='l' && p[3]=='s' && p[4]=='e' && p[5]=='\0') {
199
                ival = 0;
200
                return lastst = iconst;
201
        }
202
        if (p[0]=='t' && p[1]=='r' && p[2]=='u' && p[3]=='e' && p[4]=='\0') {
203
                ival = 1;
204
                return lastst = iconst;
205
        }
206
 
207
        return 0;
208
}

powered by: WebSVN 2.1.0

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