Annotation of 43BSD/contrib/apl/src/tab.c, revision 1.1.1.1

1.1       root        1: static char tab_c_Sccsid[] = "tab.c @(#)tab.c  1.3     10/5/82 Berkeley ";
                      2: 
                      3: /*
                      4:  * This table defines the operators in APL\11.
                      5:  * The first entry is the character representing
                      6:  * the operator, the second is the unique operator
                      7:  * identifier (which should give you a hint as
                      8:  * to what the operator is), and the third is
                      9:  * the operator type, of interest only to the
                     10:  * interpreter.
                     11:  * Those characters represented by octal numbers are actually
                     12:  * two-character overstrikes.  Ignore the leading "2", and
                     13:  * the rest of the number is an index into "chartab", below,
                     14:  * which lists the two-character overstrikes.  Overstrikes
                     15:  * may be in either order.
                     16:  *
                     17:  * Note: What isn't shown here is that unary minus
                     18:  * is ` (backwards apostrophe).  This is handled in lex.c, a0.c
                     19:  * and a2.c (both input and output).
                     20:  */
                     21: struct tab
                     22: {
                     23:        int     input;
                     24:        int     lexval;
                     25:        int     retval;
                     26: } tab[] = {
                     27: 
                     28: /*
                     29:  * one of a kind
                     30:  */
                     31: 
                     32:        '(',    unk,lpar,
                     33:        ')',    unk,rpar,
                     34:        '[',    unk,lbkt,
                     35:        ']',    unk,rbkt,
                     36:        '/',    COM,com,
                     37:        0200  , COM0,com0,
                     38:        '\\',   EXD,com,
                     39:        0201  , EXD0,com0,
                     40:        '\'',   unk,strng,
                     41:        'J',    unk,null,
                     42:        '.',    IPROD,dot,
                     43:        'L',    QUAD,Quad,
                     44:        0202  , QQUAD,Quad,
                     45:        0203  , CQUAD,Quad,
                     46:        ';',    unk,semi,
                     47:        ':',    unk,cln,
                     48:        0204  , COMNT,comnt,
                     49:        'C',    COMNT,comnt,
                     50:        '}',    BRAN0,tran,
                     51: 
                     52: /*
                     53:  * dyadic scalars
                     54:  *     op2 op1 v (dyadic op)
                     55:  */
                     56: 
                     57:        '<',    LT,dscal,
                     58:        '>',    GT,dscal,
                     59:        '$',    LE,dscal,
                     60:        0220,   LE,dscal,
                     61:        '&',    GE,dscal,
                     62:        0221,   GE,dscal,
                     63:        '=',    EQ,dscal,
                     64:        '#',    NE,dscal,
                     65:        0222,   NE,dscal,
                     66:        '^',    AND,dscal,
                     67:        'A',    AND,dscal,
                     68:        'Q',    OR,dscal,
                     69:        'V',    OR,dscal,
                     70:        0205  , NAND,dscal,
                     71:        0231,   NAND,dscal,
                     72:        0206  , NOR,dscal,
                     73:        0223,   NAND,dscal,
                     74:        0224,   NOR,dscal,
                     75: 
                     76: /*
                     77:  * monadic or dyadic scalars
                     78:  *     op2 op1 v (dyadic op)
                     79:  *     op1 v+1 (monadic op)
                     80:  */
                     81: 
                     82:        '+',    ADD,mdscal,
                     83:        '-',    SUB,mdscal,
                     84:        'M',    MUL,mdscal,
                     85:        'X',    MUL,mdscal,
                     86:        0225,   MUL,mdscal,
                     87:        'P',    DIV,mdscal,
                     88:        0240,   DIV,mdscal,
                     89:        '%',    DIV,mdscal,
                     90:        0226,   DIV,mdscal,
                     91:        '|',    MOD,mdscal,
                     92:        'D',    MIN,mdscal,
                     93:        'S',    MAX,mdscal,
                     94:        '*',    PWR,mdscal,
                     95:        0207  , LOG,mdscal,
                     96:        'O',    CIR,mdscal,
                     97:        0210  , COMB,mdscal,
                     98:        '!',    COMB,mdscal,
                     99: 
                    100: /*
                    101:  * monadic
                    102:  *     op1 v (monadic op)
                    103:  */
                    104: 
                    105:        '~',    NOT,m,
                    106:        0241,   EPS+1,m,
                    107: /*
                    108:  * dyadic
                    109:  *     op2 op1 v (dyadic op)
                    110:  */
                    111: 
                    112:        'N',    REP,d,
                    113:        'Y',    TAKE,d,
                    114:        'U',    DROP,d,
                    115:        '_',    ASGN,asg,
                    116:        '{',    ASGN,asg,
                    117: 
                    118: /*
                    119:  * monadic or dyadic
                    120:  *     op2 op1 v (dyadic op)
                    121:  *     op1 v+1 (monadic op)
                    122:  */
                    123: 
                    124:        'E',    EPS,md,
                    125:        'B',    BASE,md,
                    126:        '?',    DEAL,md,
                    127:        'R',    DRHO,md,
                    128:        'I',    DIOT,md,
                    129:        0211  , ROT0,md,
                    130:        0212  , DTRN,md,
                    131:        0213  , DIBM,md,
                    132:        0214  , DDOM,md,
                    133:        0242,   DFMT,md,
                    134: 
                    135: 
                    136: 
                    137: /*
                    138:  * monadic with optional subscript
                    139:  *     op1 v (monadic op)
                    140:  *     op1 sub v+1 (subscripted monadic op)
                    141:  */
                    142: 
                    143:        0215  , GDU,msub,
                    144:        0216  , GDD,msub,
                    145:        0227,   GDU,msub,
                    146:        0230,   GDD,msub,
                    147: 
                    148: /*
                    149:  * dyadic with optional subscript
                    150:  *     op2 op1 v (dyadic op)
                    151:  *     op2 op1 sub v+1 (subscripted dyadic op)
                    152:  */
                    153: 
                    154: 
                    155: /*
                    156:  * monadic or dyadic with optional subscript
                    157:  *     op2 op1 v (dyadic op)
                    158:  *     op1 v+1 (monadic op)
                    159:  *     op2 op1 sub v+2 (subscripted dyadic op)
                    160:  *     op1 sub v+3 (subscripted monadic op)
                    161:  */
                    162: 
                    163:        0217  , ROT,mdsub,
                    164:        ',',    CAT,mdsub,
                    165: 
                    166: /*
                    167:  *     ISP and PSI
                    168:  */
                    169:        0232,   PSI,d,
                    170:        0233,   ISP,d,
                    171: 
                    172: /*
                    173:  *     other, non-function
                    174:  */
                    175:        0234,   unk,null,
                    176:        0235,   unk,null,
                    177:        0236,   unk,null,
                    178:        0237,   unk,null,
                    179:        '@',    unk,null,
                    180: 
                    181: /*
                    182:  * end of list
                    183:  */
                    184: 
                    185:        0
                    186: };
                    187: 
                    188: struct {
                    189:        char    *ct_name;               /* command name string */
                    190:        int     ct_ytype;               /* command type */
                    191:        int     ct_ylval;               /* "yylval" value */
                    192: } comtab[] = {
                    193:        "clear",        comnull,        CLEAR,
                    194:        "continue",     comnull,        CONTIN,
                    195:        "copy",         comnam,         COPY,
                    196:        "debug",        comnull,        DEBUG,
                    197:        "digits",       comexpr,        DIGITS,
                    198:        "drop",         comlist,        DROPC,
                    199:        "edit",         comnam,         EDIT,
                    200:        "editf",        comnam,         EDITF,
                    201:        "write",        comnam,         WRITE,
                    202:        "trace",        comnull,        TRACE,
                    203:        "untrace",      comnull,        UNTRACE,
                    204:        "erase",        comlist,        ERASE,
                    205:        "fns",          comnull,        FNS,
                    206:        "fuzz",         comexpr,        FUZZ,
                    207:        "lib",          comnull,        LIB,
                    208:        "load",         comnam,         LOAD,
                    209:        "off",          comnull,        OFF,
                    210:        "origin",       comexpr,        ORIGIN,
                    211:        "read",         comnam,         READ,
                    212:        "save",         comnam,         SAVE,
                    213:        "vars",         comnull,        VARS,
                    214:        "width",        comexpr,        WIDTH,
                    215:        "vsave",        comnam,         VSAVE,
                    216:        "script",       comnam,         SCRIPT,
                    217:        "reset",        comnull,        RESET,
                    218:        "si",           comnull,        SICOM,
                    219:        "code",         comnam,         CODE,
                    220:        "del",          comnam,         DEL,
                    221:        "shell",        comnull,        SHELL,
                    222:        "list",         comnam,         LIST,
                    223:        "prws",         comnull,        PRWS,
                    224:        0,              unk
                    225: };
                    226: 
                    227: /*
                    228:  * List of two-character escapes.  Indexed by 02XX entries
                    229:  * in "tab", above.  Entries must be in lexical order, i.e.
                    230:  * 'V~' will work, '~V' will not (since overstrikes are
                    231:  * sorted before they are looked up).  'V~' is 6 down in
                    232:  * the table, and thus corresponds to 0206,
                    233:  * which "tab" shows to be NOR.
                    234:  */
                    235: int     chartab[] = {
                    236: 
                    237:        '-/',           /* 0200 comprs */
                    238:        '-\\',          /* 0201 expand */
                    239:        '\'L',          /* 0202 quote quad */
                    240:        'LO',           /* 0203 circle quad */
                    241:        'CJ',           /* 0204 lamp */
                    242:        '^~',           /* 0205 nand */
                    243:        'V~',           /* 0206 nor */
                    244:        '*O',           /* 0207 log */
                    245:        '\'.',          /* 0210 comb/fact ('!') */
                    246:        '-O',           /* 0211 rotate */
                    247:        'O\\',          /* 0212 transpose */
                    248:        'BN',           /* 0213 i beam */
                    249:        '%L',           /* 0214 domino */
                    250:        'A|',           /* 0215 grade up */
                    251:        'V|',           /* 0216 grade dn */
                    252:        'O|',           /* 0217 rotate */
                    253:        '<=',           /* 0220 less eq */
                    254:        '=>',           /* 0221 greater eq */
                    255:        '/=',           /* 0222 not eq */
                    256:        'A~',           /* 0223 nand */
                    257:        'Q~',           /* 0224 nor */
                    258:        '/\\',          /* 0225 multiply */
                    259:        '-:',           /* 0226 divide */
                    260:        'H|',           /* 0227 another grade up */
                    261:        'G|',           /* 0230 another dgrade dn */
                    262:        '&~',           /* 0231 yet another nand */
                    263:        'U|',           /* 0232 PSI */
                    264:        'C|',           /* 0233 ISP */
                    265:        'Y~',           /* 0234 bracket 1 */
                    266:        'U~',           /* 0235 bracket 2 */
                    267:        '-U',           /* 0236 another bracket 2 */
                    268:        '-Y',           /* 0237 another bracket 2 */
                    269:        '//',           /* 0240 alternate divide */
                    270:        'BJ',           /* 0241 standard execute */
                    271:        'JN',           /* 0242 format */
                    272: /*
                    273:  *     function alpha() in lex.c must be changed whenever this
                    274:  *     table is updated.  It must know the index of the alternate
                    275:  *     character set (currently 0243)
                    276:  */
                    277:        'Fa',           /* alternate character set */
                    278:        'Fb',
                    279:        'Fc',
                    280:        'Fd',
                    281:        'Fe',
                    282:        'Ff',
                    283:        'Fg',
                    284:        'Fh',
                    285:        'Fi',
                    286:        'Fj',
                    287:        'Fk',
                    288:        'Fl',
                    289:        'Fm',
                    290:        'Fn',
                    291:        'Fo',
                    292:        'Fp',
                    293:        'Fq',
                    294:        'Fr',
                    295:        'Fs',
                    296:        'Ft',
                    297:        'Fu',
                    298:        'Fv',
                    299:        'Fw',
                    300:        'Fx',
                    301:        'Fy',
                    302:        'Fz',
                    303:        0
                    304: };
                    305: 
                    306: /*
                    307:  *     qtab -- table of valid quad functions
                    308:  *     the format of the qtab is the similar to tab, above
                    309:  *
                    310:  */
                    311: struct qtab{
                    312:        char    *qname;
                    313:        int     qtype;
                    314:        int     rtype;
                    315: } qtab[] = {
                    316: 
                    317:        "lx",   XQUAD,  Quad,
                    318:        "width", QWID,  Quad,
                    319:        "run",  QRUN,   m,
                    320:        "fuzz", QFUZZ,  Quad,
                    321:        "fork", QFORK,  m,
                    322:        "wait", QWAIT,  m,
                    323:        "exec", QEXEC,  m,
                    324:        "cr",   QCRP,   m,
                    325:        "fx",   FDEF,   m,
                    326:        "exit", QEXIT,  m,
                    327:        "pipe", QPIPE,  m,
                    328:        "chdir",QCHDIR, m,
                    329:        "open", QOPEN,  d,
                    330:        "close", QCLOSE, m,
                    331:        "read", QREAD,  d,
                    332:        "write",QWRITE, d,
                    333:        "creat",QCREAT, d,
                    334:        "seek", QSEEK,  m,
                    335:        "kill", QKILL,  d,
                    336:        "rd",   QRD,    m,
                    337:        "rm",   QUNLNK, m,
                    338:        "dup",  QDUP,   m,
                    339:        "ap",   QAP,    d,
                    340:        "rline",QRD,    m,
                    341:        "nc",   QNC,    m,
                    342:        "sig",  QSIGNL, d,
                    343:        "float",QFLOAT, m,
                    344:        "nl"    ,QNL,   m,
                    345:        0};

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.