Research V5 development
[unix-history] / usr / c / c04.c
#
#include "c0h.c"
/*
* info on operators:
* 01-- is binary operator
* 02-- left (or only) operand must be lvalue
* 04-- is relational operator
* 010-- is assignment-type operator
* 020-- non-float req. on left
* 040-- non-float req. on right
* 0100-- is commutative
* 0200-- is right, not left-associative
* 0400-- is leaf of tree
* *0XX000-- XX is priority of operator
*/
int opdope[] {
000000, /* EOF */
000000, /* ; */
000000, /* { */
000000, /* } */
036000, /* [ */
002000, /* ] */
036000, /* ( */
002000, /* ) */
014201, /* : */
007001, /* , */
000000, /* 10 */
000000, /* 11 */
000000, /* 12 */
000000, /* 13 */
000000, /* 14 */
000000, /* 15 */
000000, /* 16 */
000000, /* 17 */
000000, /* 18 */
000000, /* 19 */
000400, /* name */
000400, /* short constant */
000400, /* string */
000400, /* float */
000400, /* double */
000000, /* 25 */
000000, /* 26 */
000000, /* 27 */
000000, /* 28 */
034200, /* sizeof */
034202, /* ++pre */
034202, /* --pre */
034202, /* ++post */
034202, /* --post */
034220, /* !un */
034202, /* &un */
034220, /* *un */
034200, /* -un */
034220, /* ~un */
036001, /* . (structure reference) */
030101, /* + */
030001, /* - */
032101, /* * */
032001, /* / */
032001, /* % */
026061, /* >> */
026061, /* << */
020161, /* & */
017161, /* | */
017161, /* ^ */
036001, /* -> */
000000, /* int -> double */
000000, /* double -> int */
016001, /* && */
015001, /* || */
000000, /* 55 */
000000, /* 56 */
000000, /* 57 */
000000, /* 58 */
000000, /* 59 */
022005, /* == */
022005, /* != */
024005, /* <= */
024005, /* < */
024005, /* >= */
024005, /* > */
024005, /* <p */
024005, /* <=p */
024005, /* >p */
024005, /* >=p */
012213, /* =+ */
012213, /* =- */
012213, /* =* */
012213, /* =/ */
012213, /* =% */
012253, /* =>> */
012253, /* =<< */
012253, /* =& */
012253, /* =| */
012253, /* =^ */
012213, /* = */
000000, /* 81 */
000000, /* 82 */
000000, /* 83 */
000000, /* 84 */
000000, /* 85 */
000000, /* 86 */
000000, /* 87 */
000000, /* 88 */
000000, /* 89 */
014201, /* ? */
000000, /* 91 */
000000, /* 92 */
000000, /* 93 */
000000, /* 94 */
000000, /* 95 */
000000, /* 96 */
000000, /* 97 */
000000, /* 98 */
000000, /* 99 */
036001, /* call */
036001, /* mcall */
000000, /* goto */
000000, /* jump cond */
000000, /* branch cond */
000000, /* 105 */
000000, /* 106 */
000000, /* 107 */
000000, /* 108 */
000000, /* 109 */
000000 /* force r0 */
};
/*
* conversion table:
* 0100-- convert left operand
* 0*0XX-- XX is conversion number, to wit:
* 000: none
* 001: int -> ptr
* 002: ptr -> int
* 003: int -> double
* 004: double -> int
* 077: generally illegal
*/
char cvtab[] {
0000, /* i : i */
0000, /* i : c */
0103, /* i : f */
0103, /* i : d */
0077, /* i : s */
0101, /* i : *i */
0000, /* i : *c */
0101, /* i : *f */
0101, /* i : *d */
0101, /* i : *s */
0101, /* i : ** */
0000, /* c : i */
0000, /* c : c */
0103, /* c : f */
0103, /* c : d */
0077, /* c : s */
0101, /* c : *i */
0000, /* c : *c */
0101, /* c : *f */
0101, /* c : *d */
0101, /* c : *s */
0101, /* c : ** */
0003, /* f : i */
0003, /* f : c */
0000, /* f : f */
0000, /* f : d */
0077, /* f : s */
0077, /* f : *i */
0077, /* f : *c */
0077, /* f : *f */
0077, /* f : *d */
0077, /* f : *s */
0077, /* f : ** */
0003, /* d : i */
0003, /* d : c */
0000, /* d : f */
0000, /* d : d */
0077, /* d : s */
0077, /* d : *i */
0077, /* d : *c */
0077, /* d : *f */
0077, /* d : *d */
0077, /* d : *s */
0077, /* d : ** */
0077, /* s : i */
0077, /* s : c */
0077, /* s : f */
0077, /* s : d */
0077, /* s : s */
0077, /* s : *i */
0077, /* s : *c */
0077, /* s : *f */
0077, /* s : *d */
0077, /* s : *s */
0077, /* s : ** */
0001, /* *i : i */
0001, /* *i : c */
0077, /* *i : f */
0077, /* *i : d */
0077, /* *i : s */
0002, /* *i : *i */
0077, /* *i : *c */
0077, /* *i : *f */
0077, /* *i : *d */
0077, /* *i : *s */
0002, /* *i : ** */
0000, /* *c : i */
0000, /* *c : c */
0077, /* *c : f */
0077, /* *c : d */
0077, /* *c : s */
0077, /* *c : *i */
0000, /* *c : *c */
0077, /* *c : *f */
0077, /* *c : *d */
0077, /* *c : *s */
0077, /* *c : ** */
0001, /* *f : i */
0001, /* *f : c */
0077, /* *f : f */
0077, /* *f : d */
0077, /* *f : s */
0077, /* *f : *i */
0077, /* *f : *c */
0002, /* *f : *f */
0077, /* *f : *d */
0077, /* *f : *s */
0077, /* *f : ** */
0001, /* *d : i */
0001, /* *d : c */
0077, /* *d : f */
0077, /* *d : d */
0077, /* *d : s */
0077, /* *d : *i */
0077, /* *d : *c */
0077, /* *d : *f */
0002, /* *d : *d */
0077, /* *d : *s */
0077, /* *d : ** */
0001, /* *s : i */
0001, /* *s : c */
0077, /* *s : f */
0077, /* *s : d */
0077, /* *s : s */
0077, /* *s : *i */
0077, /* *s : *c */
0077, /* *s : *f */
0077, /* *s : *d */
0002, /* *s : *s */
0077, /* *s : ** */
0001, /* ** : i */
0001, /* ** : c */
0077, /* ** : f */
0077, /* ** : d */
0077, /* ** : s */
0002, /* ** : *i */
0077, /* ** : *c */
0077, /* ** : *f */
0077, /* ** : *d */
0077, /* ** : *s */
0002 /* ** : ** */
};
/*
* character type table
*/
char ctab[] {
EOF, INSERT, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN,
UNKN, SPACE, NEWLN, UNKN, UNKN, UNKN, UNKN, UNKN,
UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN,
UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN,
SPACE, EXCLA, DQUOTE, UNKN, UNKN, MOD, AND, SQUOTE,
LPARN, RPARN, TIMES, PLUS, COMMA, MINUS, PERIOD, DIVIDE,
DIGIT, DIGIT, DIGIT, DIGIT, DIGIT, DIGIT, DIGIT, DIGIT,
DIGIT, DIGIT, COLON, SEMI, LESS, ASSIGN, GREAT, QUEST,
UNKN, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER,
LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER,
LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER,
LETTER, LETTER, LETTER, LBRACK, UNKN, RBRACK, EXOR, LETTER,
UNKN, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER,
LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER,
LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER,
LETTER, LETTER, LETTER, LBRACE, OR, RBRACE, COMPL, UNKN
};