--- /dev/null
+/* TOKENS32.h\r
+ Tokens for the C Minus compiler:\r
+ The tokens are arranged in alphebetical order by the first\r
+ character. From there they are grouped grouped from longest to\r
+ shortest (i.e. = comes after ==).\r
+ Copyright 1991, 1992 R.A. Burgess\r
+*/\r
+\r
+/*\r
+ This is an index table for the first character of the token.\r
+ It's ASCII numeric value provides an index to the token table.\r
+ This cuts searching and comparison down to less than 4 compares\r
+ worst case, 2 on the average!\r
+*/\r
+ static unsigned char itoken[128] = {\r
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 00 - 07 */\r
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 08 - 15 */\r
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 16 - 23 */\r
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 24 - 31 */\r
+ 0, 1, 0, 0, 0, 3, 5, 0, /* 32 - 39 */\r
+ 8, 9, 10, 12, 15, 16, 20, 22, /* 40 - 47 */\r
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 48 - 55 */\r
+ 0, 0, 24, 25, 26, 30, 32, 36, /* 56 - 63 */\r
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 64 - 71 */\r
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 72 - 79 */\r
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 80 - 87 */\r
+ 0, 0, 0, 37, 0, 38, 39, 0, /* 88 - 95 */\r
+ 0, 0, 41, 42, 46, 48, 50, 52, /* 96 - 103 */\r
+ 0, 53, 0, 0, 56, 0, 0, 0, /* 104- 111 */\r
+ 0, 0, 57, 59, 65, 66, 68, 69, /* 112- 119 */\r
+ 0, 0, 0, 70, 71, 74, 75, 0}; /* 120- 127 */\r
+\r
+ static char *tokens[] = {\r
+\r
+ /* token number priority optype ASCII */\r
+ "", /* 00 0 0 0 */\r
+ "!=", /* 01 9 2 33 */\r
+ "!", /* 02 0 1 */\r
+ "%=", /* 03 2 3 37 */\r
+ "%", /* 04 13 2 */\r
+ "&&", /* 05 5 4 38 */\r
+ "&=", /* 06 2 3 */\r
+ "&", /* 07 8 2 */\r
+ "(", /* 08 0 0 40 */\r
+ ")", /* 09 0 0 41 */\r
+ "*=", /* 10 2 3 42 */\r
+ "*", /* 11 13 2 */\r
+ "++", /* 12 15 0 43 */\r
+ "+=", /* 13 2 3 */\r
+ "+", /* 14 12 2 */\r
+ ",", /* 15 0 0 44 */\r
+ "--", /* 16 15 0 45 */\r
+ "-=", /* 17 2 3 */\r
+ "->", /* 18 15 2 */\r
+ "-", /* 19 12 2 */\r
+ "...", /* 20 0 0 46 */\r
+ ".", /* 21 15 2 46 */\r
+ "/=", /* 22 2 3 47 */\r
+ "/", /* 23 13 2 */\r
+ ":", /* 24 0 0 58 */\r
+ ";", /* 25 0 0 59 */\r
+ "<<=", /* 26 2 3 60 */\r
+ "<<", /* 27 11 2 */\r
+ "<=", /* 28 10 2 */\r
+ "<", /* 29 10 2 */\r
+ "==", /* 30 9 2 61 */\r
+ "=", /* 31 2 3 */\r
+ ">>=", /* 32 2 3 62 */\r
+ ">>", /* 33 11 2 */\r
+ ">=", /* 34 10 2 */\r
+ ">", /* 35 10 2 */\r
+ "?", /* 36 3 4 63 */\r
+ "[", /* 37 0 0 91 */\r
+ "]", /* 38 0 0 93 */\r
+ "^=", /* 39 2 3 94 */\r
+ "^", /* 40 7 2 */\r
+ "break", /* 41 0 0 98 */\r
+ "case", /* 42 0 0 99 */\r
+ "char", /* 43 0 0 */\r
+ "const", /* 44 0 0 */\r
+ "continue", /* 45 0 0 */\r
+ "default", /* 46 0 0 100*/\r
+ "do", /* 47 0 0 */\r
+ "else", /* 48 0 0 101*/\r
+ "extern", /* 49 0 0 */\r
+ "far", /* 50 0 0 102*/\r
+ "for", /* 51 0 0 */\r
+ "goto", /* 52 0 0 103*/\r
+ "interrupt", /* 53 0 0 105*/\r
+ "int", /* 54 0 0 */\r
+ "if", /* 55 0 0 */\r
+ "long", /* 56 0 0 108*/\r
+ "register", /* 57 0 0 114*/\r
+ "return", /* 58 0 0 */\r
+ "signed", /* 59 0 0 115*/\r
+ "sizeof", /* 60 0 1 */\r
+ "static", /* 61 0 0 */\r
+ "struct", /* 62 0 0 */\r
+ "switch", /* 63 0 0 */\r
+ "short", /* 64 0 0 */\r
+ "typedef", /* 65 0 0 116*/\r
+ "unsigned", /* 66 0 0 117*/\r
+ "union", /* 67 0 0 */\r
+ "void", /* 68 0 0 118*/\r
+ "while", /* 69 0 0 119*/\r
+ "{", /* 70 0 0 123*/\r
+ "||", /* 71 4 4 124*/\r
+ "|=", /* 72 2 3 */\r
+ "|", /* 73 6 2 */\r
+ "}", /* 74 0 0 125*/\r
+ "~", /* 75 ? 1 126*/\r
+ 0}; /* End of table */\r
+\r
+#define NE 1 /* '!=' */\r
+#define NOT 2 /* '!' */\r
+#define MODE 3 /* '%=' */\r
+#define MOD 4 /* '%' */\r
+#define DAND 5 /* '&&' (marks beginning of binaries) */\r
+#define ANDE 6 /* '&=' */\r
+#define AND 7 /* '&' - And & address of */\r
+#define ORB 8 /* ( */\r
+#define CRB 9 /* ) */\r
+#define STARE 10 /* '*=' */\r
+#define STAR 11 /* '*' - multiply & pointer */\r
+#define INC 12 /* '++' */\r
+#define ADDE 13 /* '+=' */\r
+#define ADD 14 /* '+' */\r
+#define COMMA 15 /* , */\r
+#define DEC 16 /* '--' */\r
+#define SUBE 17 /* '-=' */\r
+#define DEREF 18 /* '->' */\r
+#define SUB 19 /* '-' - subtract & negate */\r
+#define ELIPSE 20 /* '...' Elipse for args */\r
+#define DOT 21 /* '.' */\r
+#define DIVE 22 /* '/=' */\r
+#define DIV 23 /* '/' */\r
+#define COLON 24 /* : */\r
+#define SEMI 25 /* ; */\r
+#define SHLE 26 /* '<<=' */\r
+#define SHL 27 /* '<<' */\r
+#define LE 28 /* '<=' */\r
+#define LT 29 /* '<' */\r
+#define EQ 30 /* '==' */\r
+#define ASSIGN 31 /* '=' */\r
+#define SHRE 32 /* '>>=' */\r
+#define SHR 33 /* '>>' */\r
+#define GE 34 /* '>=' */\r
+#define GT 35 /* '>' */\r
+#define QUEST 36 /* '?' (marks ending of binaries) */\r
+#define OSB 37 /* [ */\r
+#define CSB 38 /* ] */\r
+#define XORE 39 /* '^=' */\r
+#define XOR 40 /* '^' */\r
+#define BREAK 41 /* 'break' statement */\r
+#define CASE 42 /* 'case' statement */\r
+#define CHAR 43 /* 'char' */\r
+#define CONST 44 /* 'const' */\r
+#define CONTIN 45 /* 'continue' statement */\r
+#define DEFAULT 46 /* 'default' statement */\r
+#define DO 47 /* 'do' statement */\r
+#define ELSE 48 /* 'else' modifier */\r
+#define EXTERN 49 /* 'extern' */\r
+#define FARR 50 /* 'far' */\r
+#define FOR 51 /* 'for' statement */\r
+#define GOTO 52 /* 'goto' statement */\r
+#define INTR 53 /* 'interrupt' type for functions */\r
+#define INT 54 /* 'int' */\r
+#define IF 55 /* 'if' statement */\r
+#define LONG 56 /* 'long' */\r
+#define REGIS 57 /* 'register' */\r
+#define RETURN 58 /* 'return' statement */\r
+#define SIGNED 59 /* 'signed' */\r
+#define SIZEOF 60 /* 'sizeof' */\r
+#define STAT 61 /* 'static' */\r
+#define STRUC 62 /* 'struct' */\r
+#define SWITCH 63 /* 'switch' statement */\r
+#define SHORT 64 /* 'short' */\r
+#define TYPEDEF 65 /* 'typedef' */\r
+#define UNSIGN 66 /* 'unsigned' */\r
+#define UNION 67 /* 'union' */\r
+#define VOIDD 68 /* 'void' */\r
+#define WHILE 69 /* 'while' statement */\r
+#define OCB 70 /* { */\r
+#define DOR 71 /* '||' */\r
+#define ORE 72 /* '|=' */\r
+#define OR 73 /* '|' */\r
+#define CCB 74 /* } */\r
+#define COM 75 /* '~' */\r
+\r
+#define ULT 76 /* pseudo operators for unsigned compares */\r
+#define ULE 77 /* pseudo operators for unsigned compares */\r
+#define UGT 78 /* pseudo operators for unsigned compares */\r
+#define UGE 79 /* pseudo operators for unsigned compares */\r
+\r
+/* Table defining expression operator precedence.\r
+ Position in array is token number, while value\r
+ in that position is priority. (15 is highest)\r
+*/\r
+ static char priority[] = {\r
+ 0, 9, 0, 2, 13, 5, 2, 8, /* 00 - 07 */\r
+ 0, 0, 2, 13, 15, 2, 12, 0, /* 08 - 15 */\r
+ 15, 2, 15, 12, 0, 15, 2, 13, /* 16 - 23 */\r
+ 0, 0, 2, 11, 10, 10, 9, 2, /* 24 - 31 */\r
+ 2, 11, 10, 10, 3, 0, 0, 2, /* 32 - 39 */\r
+ 7, 0, 0, 0, 0, 0, 0, 0, /* 40 - 47 */\r
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 48 - 55 */\r
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 56 - 63 */\r
+ 0, 0, 0, 0, 0, 0, 0, 4, /* 64 - 71 */\r
+ 2, 6, 0, 0, 0, 0, 0, 0, /* 72 - 79 */\r
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 80 - 87 */\r
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 88 - 95 */\r
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 96 - 103*/\r
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 104- 111*/\r
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 112- 119*/\r
+ 0, 0, 0, 0, 0, 0, 0, 0 /* 120- 127*/\r
+ };\r
+\r
+/* This table determines operator type.\r
+ Two operators grouped Right to Left = 3.\r
+ Two operators grouped Left to Right = 2.\r
+ One operator (ALWAYS grouped Right to Left) = 1.\r
+ Logical operators are not included. They are handled\r
+ separately in the code (numbered as 4).\r
+*/\r
+ static char optype[] = {\r
+ 0, 2, 1, 3, 2, 4, 3, 2, /* 00 - 07 */\r
+ 0, 0, 3, 2, 0, 3, 2, 0, /* 08 - 15 */\r
+ 0, 3, 2, 2, 0, 2, 3, 2, /* 16 - 23 */\r
+ 0, 0, 3, 2, 2, 2, 2, 3, /* 24 - 31 */\r
+ 3, 2, 2, 2, 4, 0, 0, 3, /* 32 - 39 */\r
+ 2, 0, 0, 0, 0, 0, 0, 0, /* 40 - 47 */\r
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 48 - 55 */\r
+ 0, 0, 0, 0, 1, 0, 0, 0, /* 56 - 63 */\r
+ 0, 0, 0, 0, 0, 0, 0, 4, /* 64 - 71 */\r
+ 3, 2, 0, 1, 0, 0, 0, 0, /* 72 - 79 */\r
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 80 - 87 */\r
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 88 - 95 */\r
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 96 - 103*/\r
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 104- 111*/\r
+ 0, 0, 0, 0, 0, 0, 0, 0, /* 112- 119*/\r
+ 0, 0, 0, 0, 0, 0, 0, 0 /* 120- 127*/\r
+ };\r
+\r
+/* End of tokens32.h */\r