1: #
   2: #include "c0.h"
   3: /*
   4:  *  info on operators:
   5:  *   01-- is binary operator
   6:  *   02-- left (or only) operand must be lvalue
   7:  *   04-- is relational operator
   8:  *  010-- is assignment-type operator
   9:  *  020-- non-float req. on left
  10:  *  040-- non-float req. on right
  11:  * 0100-- is commutative
  12:  * 0200-- is right, not left-associative
  13:  * 0400-- is leaf of tree
  14:  * *0XX000-- XX is priority of operator
  15:  */
  16: int opdope[] {
  17:     000000, /* EOFC */
  18:     000000, /* ; */
  19:     000000, /* { */
  20:     000000, /* } */
  21:     036000, /* [ */
  22:     002000, /* ] */
  23:     037000, /* ( */
  24:     002000, /* ) */
  25:     014201, /* : */
  26:     007001, /* , */
  27:     000001, /* field selection */
  28:     034201, /* CAST */
  29:     000000, /* ETYPE */
  30:     000001, /* integer->ptr */
  31:     000001, /* ptr->integer */
  32:     000001, /* long->ptr */
  33:     000000, /* 16 */
  34:     000000, /* 17 */
  35:     000000, /* 18 */
  36:     000000, /* 19 */
  37:     000400, /* name */
  38:     000400, /* short constant */
  39:     000400, /* string */
  40:     000400, /* float */
  41:     000400, /* double */
  42:     000400, /* long constant */
  43:     000400, /* long constant <= 16 bits */
  44:     000000, /* 27 */
  45:     000000, /* 28 */
  46:     000000, /* 29 */
  47:     034203, /* ++pre */
  48:     034203, /* --pre */
  49:     034203, /* ++post */
  50:     034203, /* --post */
  51:     034200, /* !un */
  52:     034202, /* &un */
  53:     034220, /* *un */
  54:     034200, /* -un */
  55:     034220, /* ~un */
  56:     036001, /* . (structure reference) */
  57:     030101, /* + */
  58:     030001, /* - */
  59:     032101, /* * */
  60:     032001, /* / */
  61:     032001, /* % */
  62:     026061, /* >> */
  63:     026061, /* << */
  64:     020161, /* & */
  65:     017161, /* | */
  66:     017161, /* ^ */
  67:     036001, /* -> */
  68:     000000, /* int -> double */
  69:     000000, /* double -> int */
  70:     016001, /* && */
  71:     015001, /* || */
  72:     030001, /* &~ */
  73:     000000, /* 56 */
  74:     000000, /* 57 */
  75:     000000, /* 58 */
  76:     000000, /* 59 */
  77:     022005, /* == */
  78:     022005, /* != */
  79:     024005, /* <= */
  80:     024005, /* < */
  81:     024005, /* >= */
  82:     024005, /* > */
  83:     024005, /* <p */
  84:     024005, /* <=p */
  85:     024005, /* >p */
  86:     024005, /* >=p */
  87:     012213, /* =+ */
  88:     012213, /* =- */
  89:     012213, /* =* */
  90:     012213, /* =/ */
  91:     012213, /* =% */
  92:     012253, /* =>> */
  93:     012253, /* =<< */
  94:     012253, /* =& */
  95:     012253, /* =| */
  96:     012253, /* =^ */
  97:     012213, /* = */
  98:     000000, /* 81 */
  99:     000000, /* 82 */
 100:     000000, /* 83 */
 101:     000000, /* 84 */
 102:     000000, /* 85 */
 103:     000000, /* 86 */
 104:     000000, /* 87 */
 105:     000000, /* 88 */
 106:     000000, /* 89 */
 107:     014201, /* ? */
 108:     034200, /* sizeof */
 109:     000000, /* 92 */
 110:     021101, /* min */
 111:     021101, /* minp */
 112:     021101, /* max */
 113:     021101, /* maxp */
 114:     007001, /* , */
 115:     000000, /* 98 */
 116:     000000, /* 99 */
 117:     036001, /* call */
 118:     036001, /* mcall */
 119:     000000, /* goto */
 120:     000000, /* jump cond */
 121:     000000, /* branch cond */
 122:     000000, /* 105 */
 123:     000000, /* 106 */
 124:     000000, /* 107 */
 125:     000000, /* 108 */
 126:     000000, /* char->int */
 127:     000000  /* force r0 */
 128: };
 129: 
 130: /*
 131:  * conversion table:
 132:  * FTI: float (or double) to integer
 133:  * ITF: integer to float
 134:  * ITP: integer to pointer
 135:  * ITL: integer to long
 136:  * LTI: long to integer
 137:  * LTF: long to float
 138:  * FTL: float to long
 139:  * PTI: pointer to integer
 140:  * LTP: long to ptr (ptr[long])
 141:  * XX: usually illegal
 142:  * When FTI, LTI, FTL are added in they specify
 143:  * that it is the left operand that should be converted.
 144:  * For + this is done and the conversion is turned back into
 145:  * ITF, ITL, LTF.
 146:  * For = however the left operand can't be converted
 147:  * and the specified conversion is applied to the rhs.
 148:  */
 149: char cvtab[4][4] {
 150: /*		int	double		long		ptr */
 151: /* int */   0,  (FTI<<4)+ITF,   (LTI<<4)+ITL,   (ITP<<4)+ITP,
 152: /* double */    ITF,    0,      LTF,        XX,
 153: /* long */  ITL,    (FTL<<4)+LTF,   0,      (LTP<<4)+LTP,
 154: /* ptr */   ITP,    XX,     LTP,        PTI,
 155: };
 156: 
 157: /*
 158:  * relate conversion numbers to operators
 159:  */
 160: char    cvntab[] {
 161:     0, ITOF, ITOL, LTOF, ITOP, PTOI, FTOI, LTOI, FTOL, LTOP,
 162: };
 163: 
 164: /*
 165:  * character type table
 166:  */
 167: char ctab[] {
 168:     EOFC,   INSERT, UNKN,   UNKN,   UNKN,   UNKN,   UNKN,   UNKN,
 169:     UNKN,   SPACE,  NEWLN,  SPACE,  SPACE,  UNKN,   UNKN,   UNKN,
 170:     UNKN,   UNKN,   UNKN,   UNKN,   UNKN,   UNKN,   UNKN,   UNKN,
 171:     UNKN,   UNKN,   UNKN,   UNKN,   UNKN,   UNKN,   UNKN,   UNKN,
 172:     SPACE,  EXCLA,  DQUOTE, SHARP,  UNKN,   MOD,    AND,    SQUOTE,
 173:     LPARN,  RPARN,  TIMES,  PLUS,   COMMA,  MINUS,  PERIOD, DIVIDE,
 174:     DIGIT,  DIGIT,  DIGIT,  DIGIT,  DIGIT,  DIGIT,  DIGIT,  DIGIT,
 175:     DIGIT,  DIGIT,  COLON,  SEMI,   LESS,   ASSIGN, GREAT,  QUEST,
 176:     UNKN,   LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER,
 177:     LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER,
 178:     LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER,
 179:     LETTER, LETTER, LETTER, LBRACK, BSLASH, RBRACK, EXOR,   LETTER,
 180:     UNKN,   LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER,
 181:     LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER,
 182:     LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER,
 183:     LETTER, LETTER, LETTER, LBRACE, OR, RBRACE, COMPL,  UNKN
 184: };

Defined variables

ctab defined in line 167; never used
cvntab defined in line 160; never used
cvtab defined in line 149; never used
opdope defined in line 16; never used
Last modified: 1979-01-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 481
Valid CSS Valid XHTML 1.0 Strict