]> pd.if.org Git - mmurtl/blob - msamples/cm32m/tokens32.h
autocommit for file dated 1995-02-09 16:22:58
[mmurtl] / msamples / cm32m / tokens32.h
1 /* TOKENS32.h\r
2    Tokens for the C Minus compiler:\r
3    The tokens are arranged in alphebetical order by the first\r
4    character.  From there they are grouped grouped from longest to\r
5    shortest (i.e. = comes after ==).\r
6    Copyright 1991, 1992 R.A. Burgess\r
7 */\r
8 \r
9 /*\r
10     This is an index table for the first character of the token.\r
11         It's ASCII numeric value provides an index to the token table.\r
12         This cuts searching and comparison down to less than 4 compares\r
13         worst case, 2 on the average!\r
14 */\r
15         static unsigned char itoken[128] = {\r
16                 0,   0,   0,   0,   0,   0,   0,   0,    /* 00 - 07  */\r
17                 0,   0,   0,   0,   0,   0,   0,   0,    /* 08 - 15  */\r
18                 0,   0,   0,   0,   0,   0,   0,   0,    /* 16 - 23  */\r
19                 0,   0,   0,   0,   0,   0,   0,   0,    /* 24 - 31  */\r
20                 0,   1,   0,   0,   0,   3,   5,   0,    /* 32 - 39  */\r
21                 8,   9,  10,  12,  15,  16,  20,  22,    /* 40 - 47  */\r
22                 0,   0,   0,   0,   0,   0,   0,   0,    /* 48 - 55  */\r
23                 0,   0,  24,  25,  26,  30,  32,  36,    /* 56 - 63  */\r
24                 0,   0,   0,   0,   0,   0,   0,   0,    /* 64 - 71  */\r
25                 0,   0,   0,   0,   0,   0,   0,   0,    /* 72 - 79  */\r
26                 0,   0,   0,   0,   0,   0,   0,   0,    /* 80 - 87  */\r
27                 0,   0,   0,  37,   0,  38,  39,   0,    /* 88 - 95  */\r
28                 0,   0,  41,  42,  46,  48,  50,  52,    /* 96 - 103 */\r
29                 0,  53,   0,   0,  56,   0,   0,   0,    /* 104- 111 */\r
30                 0,   0,  57,  59,  65,  66,  68,  69,    /* 112- 119 */\r
31                 0,   0,   0,  70,  71,  74,  75,   0};   /* 120- 127 */\r
32 \r
33         static char *tokens[] = {\r
34 \r
35         /* token         number  priority  optype  ASCII */\r
36                 "",          /* 00       0       0        0  */\r
37                 "!=",        /* 01       9       2        33 */\r
38                 "!",         /* 02       0       1           */\r
39                 "%=",        /* 03       2       3        37 */\r
40                 "%",         /* 04       13      2           */\r
41                 "&&",        /* 05       5       4        38 */\r
42                 "&=",        /* 06       2       3           */\r
43                 "&",         /* 07       8       2           */\r
44                 "(",         /* 08       0       0        40 */\r
45                 ")",         /* 09       0       0        41 */\r
46                 "*=",        /* 10       2       3        42 */\r
47                 "*",         /* 11       13      2           */\r
48                 "++",        /* 12       15      0        43 */\r
49                 "+=",        /* 13       2       3           */\r
50                 "+",         /* 14       12      2           */\r
51                 ",",         /* 15       0       0        44 */\r
52                 "--",        /* 16       15      0        45 */\r
53                 "-=",        /* 17       2       3           */\r
54                 "->",        /* 18       15      2           */\r
55                 "-",         /* 19       12      2           */\r
56                 "...",       /* 20       0       0        46 */\r
57                 ".",         /* 21       15      2        46 */\r
58                 "/=",        /* 22       2       3        47 */\r
59                 "/",         /* 23       13      2           */\r
60                 ":",         /* 24       0       0        58 */\r
61                 ";",         /* 25       0       0        59 */\r
62                 "<<=",       /* 26       2       3        60 */\r
63                 "<<",        /* 27       11      2           */\r
64                 "<=",        /* 28       10      2           */\r
65                 "<",         /* 29       10      2           */\r
66                 "==",        /* 30       9       2        61 */\r
67                 "=",         /* 31       2       3           */\r
68                 ">>=",       /* 32       2       3        62 */\r
69                 ">>",        /* 33       11      2           */\r
70                 ">=",        /* 34       10      2           */\r
71                 ">",         /* 35       10      2           */\r
72                 "?",         /* 36       3       4        63 */\r
73                 "[",         /* 37       0       0        91 */\r
74                 "]",         /* 38       0       0        93 */\r
75                 "^=",        /* 39       2       3        94 */\r
76                 "^",         /* 40       7       2           */\r
77                 "break",     /* 41       0       0        98 */\r
78                 "case",      /* 42       0       0        99 */\r
79                 "char",      /* 43       0       0           */\r
80                 "const",     /* 44       0       0           */\r
81                 "continue",  /* 45       0       0           */\r
82                 "default",   /* 46       0       0        100*/\r
83                 "do",        /* 47       0       0           */\r
84                 "else",      /* 48       0       0        101*/\r
85                 "extern",    /* 49       0       0           */\r
86                 "far",       /* 50       0       0        102*/\r
87                 "for",       /* 51       0       0           */\r
88                 "goto",      /* 52       0       0        103*/\r
89                 "interrupt", /* 53       0       0        105*/\r
90                 "int",       /* 54       0       0           */\r
91                 "if",        /* 55       0       0           */\r
92                 "long",      /* 56       0       0        108*/\r
93                 "register",  /* 57       0       0        114*/\r
94                 "return",    /* 58       0       0           */\r
95                 "signed",    /* 59       0       0        115*/\r
96                 "sizeof",    /* 60       0       1           */\r
97                 "static",    /* 61       0       0           */\r
98                 "struct",    /* 62       0       0           */\r
99                 "switch",    /* 63       0       0           */\r
100                 "short",     /* 64       0       0           */\r
101                 "typedef",   /* 65       0       0        116*/\r
102                 "unsigned",  /* 66       0       0        117*/\r
103                 "union",     /* 67       0       0           */\r
104                 "void",      /* 68       0       0        118*/\r
105                 "while",     /* 69       0       0        119*/\r
106                 "{",         /* 70       0       0        123*/\r
107                 "||",        /* 71       4       4        124*/\r
108                 "|=",        /* 72       2       3           */\r
109                 "|",         /* 73       6       2           */\r
110                 "}",         /* 74       0       0        125*/\r
111                 "~",         /* 75       ?       1        126*/\r
112                 0};           /* End of table */\r
113 \r
114 #define NE               1              /* '!='  */\r
115 #define NOT              2              /* '!'   */\r
116 #define MODE     3              /* '%='  */\r
117 #define MOD              4              /* '%'   */\r
118 #define DAND     5              /* '&&' (marks beginning of binaries) */\r
119 #define ANDE     6              /* '&='  */\r
120 #define AND              7              /* '&' - And & address of */\r
121 #define ORB              8              /* (     */\r
122 #define CRB              9              /* )     */\r
123 #define STARE   10              /* '*='  */\r
124 #define STAR    11              /* '*' - multiply & pointer */\r
125 #define INC             12              /* '++'  */\r
126 #define ADDE    13              /* '+='  */\r
127 #define ADD             14              /* '+'   */\r
128 #define COMMA   15              /* ,     */\r
129 #define DEC             16              /* '--'  */\r
130 #define SUBE    17              /* '-='  */\r
131 #define DEREF   18              /* '->'  */\r
132 #define SUB             19              /* '-' - subtract & negate */\r
133 #define ELIPSE  20              /* '...' Elipse for args */\r
134 #define DOT             21              /* '.'   */\r
135 #define DIVE    22              /* '/='  */\r
136 #define DIV             23              /* '/'   */\r
137 #define COLON   24              /* :     */\r
138 #define SEMI    25              /* ;     */\r
139 #define SHLE    26              /* '<<=' */\r
140 #define SHL             27              /* '<<'  */\r
141 #define LE              28              /* '<='  */\r
142 #define LT              29              /* '<'   */\r
143 #define EQ              30              /* '=='  */\r
144 #define ASSIGN  31              /* '='   */\r
145 #define SHRE    32              /* '>>=' */\r
146 #define SHR             33              /* '>>'  */\r
147 #define GE              34              /* '>='  */\r
148 #define GT              35              /* '>'   */\r
149 #define QUEST   36              /* '?' (marks ending of binaries) */\r
150 #define OSB             37              /* [     */\r
151 #define CSB             38              /* ]     */\r
152 #define XORE    39              /* '^='  */\r
153 #define XOR             40              /* '^'   */\r
154 #define BREAK   41              /* 'break' statement */\r
155 #define CASE    42              /* 'case' statement */\r
156 #define CHAR    43              /* 'char' */\r
157 #define CONST   44              /* 'const' */\r
158 #define CONTIN  45              /* 'continue' statement */\r
159 #define DEFAULT 46              /* 'default' statement */\r
160 #define DO              47              /* 'do' statement */\r
161 #define ELSE    48              /* 'else' modifier */\r
162 #define EXTERN  49              /* 'extern' */\r
163 #define FARR    50              /* 'far'  */\r
164 #define FOR             51              /* 'for' statement */\r
165 #define GOTO    52              /* 'goto' statement */\r
166 #define INTR    53              /* 'interrupt' type for functions */\r
167 #define INT             54              /* 'int'   */\r
168 #define IF              55              /* 'if' statement */\r
169 #define LONG    56              /* 'long'   */\r
170 #define REGIS   57              /* 'register' */\r
171 #define RETURN  58              /* 'return' statement */\r
172 #define SIGNED  59              /* 'signed' */\r
173 #define SIZEOF  60              /* 'sizeof' */\r
174 #define STAT    61              /* 'static' */\r
175 #define STRUC   62              /* 'struct' */\r
176 #define SWITCH  63              /* 'switch' statement */\r
177 #define SHORT   64              /* 'short' */\r
178 #define TYPEDEF 65              /* 'typedef' */\r
179 #define UNSIGN  66              /* 'unsigned' */\r
180 #define UNION   67              /* 'union' */\r
181 #define VOIDD   68              /* 'void' */\r
182 #define WHILE   69              /* 'while' statement */\r
183 #define OCB             70              /* {    */\r
184 #define DOR             71              /* '||' */\r
185 #define ORE             72              /* '|=' */\r
186 #define OR              73              /* '|'  */\r
187 #define CCB             74              /* }    */\r
188 #define COM             75              /* '~'  */\r
189 \r
190 #define ULT     76              /* pseudo operators for unsigned compares */\r
191 #define ULE     77              /* pseudo operators for unsigned compares */\r
192 #define UGT     78              /* pseudo operators for unsigned compares */\r
193 #define UGE     79              /* pseudo operators for unsigned compares */\r
194 \r
195 /* Table defining expression operator precedence.\r
196    Position in array is token number, while value\r
197    in that position is priority. (15 is highest)\r
198 */\r
199         static char priority[] = {\r
200                  0,       9,  0,  2, 13,  5,  2,  8,    /* 00 - 07 */\r
201                  0,   0,  2, 13, 15,  2, 12,  0,        /* 08 - 15 */\r
202                  15,  2, 15, 12,  0, 15,  2, 13,        /* 16 - 23 */\r
203                  0,   0,  2, 11, 10, 10,  9,  2,        /* 24 - 31 */\r
204                  2,  11, 10, 10,  3,  0,  0,  2,        /* 32 - 39 */\r
205                  7,       0,  0,  0,  0,  0,  0,  0,    /* 40 - 47 */\r
206                  0,   0,  0,  0,  0,  0,  0,  0,        /* 48 - 55 */\r
207                  0,   0,  0,  0,  0,  0,  0,  0,        /* 56 - 63 */\r
208                  0,   0,  0,  0,  0,  0,  0,  4,        /* 64 - 71 */\r
209                  2,   6,  0,  0,  0,  0,  0,  0,        /* 72 - 79 */\r
210                  0,   0,  0,  0,  0,  0,  0,  0,        /* 80 - 87 */\r
211                  0,   0,  0,  0,  0,  0,  0,  0,        /* 88 - 95 */\r
212                  0,   0,  0,  0,  0,  0,  0,  0,        /* 96 - 103*/\r
213                  0,   0,  0,  0,  0,  0,  0,  0,        /* 104- 111*/\r
214                  0,   0,  0,  0,  0,  0,  0,  0,        /* 112- 119*/\r
215                  0,   0,  0,  0,  0,  0,  0,  0         /* 120- 127*/\r
216          };\r
217 \r
218 /* This table determines operator type.\r
219    Two operators grouped Right to Left = 3.\r
220    Two operators grouped Left to Right = 2.\r
221    One operator (ALWAYS grouped Right to Left) = 1.\r
222    Logical operators are not included. They are handled\r
223    separately in the code (numbered as 4).\r
224 */\r
225         static char optype[] = {\r
226                  0,      2,  1,  3,  2,  4,  3,  2,             /* 00 - 07 */\r
227                  0,  0,  3,  2,  0,  3,  2,  0,         /* 08 - 15 */\r
228                  0,  3,  2,  2,  0,  2,  3,  2,         /* 16 - 23 */\r
229                  0,  0,  3,  2,  2,  2,  2,  3,         /* 24 - 31 */\r
230                  3,  2,  2,  2,  4,  0,  0,  3,         /* 32 - 39 */\r
231                  2,      0,  0,  0,  0,  0,  0,  0,             /* 40 - 47 */\r
232                  0,  0,  0,  0,  0,  0,  0,  0,         /* 48 - 55 */\r
233                  0,  0,  0,  0,  1,  0,  0,  0,         /* 56 - 63 */\r
234                  0,  0,  0,  0,  0,  0,  0,  4,         /* 64 - 71 */\r
235                  3,  2,  0,  1,  0,  0,  0,  0,         /* 72 - 79 */\r
236                  0,  0,  0,  0,  0,  0,  0,  0,         /* 80 - 87 */\r
237                  0,  0,  0,  0,  0,  0,  0,  0,         /* 88 - 95 */\r
238                  0,  0,  0,  0,  0,  0,  0,  0,         /* 96 - 103*/\r
239                  0,  0,  0,  0,  0,  0,  0,  0,         /* 104- 111*/\r
240                  0,  0,  0,  0,  0,  0,  0,  0,         /* 112- 119*/\r
241                  0,  0,  0,  0,  0,  0,  0,  0          /* 120- 127*/\r
242          };\r
243 \r
244 /* End of tokens32.h */\r