proctab.c - 9base - revived minimalist port of Plan 9 userland to Unix
 (HTM) git clone git://git.suckless.org/9base
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       proctab.c (5141B)
       ---
            1 #include <stdio.h>
            2 #include <math.h>
            3 #include "awk.h"
            4 #include "y.tab.h"
            5 
            6 static char *printname[92] = {
            7         (char *) "FIRSTTOKEN",        /* 57346 */
            8         (char *) "PROGRAM",        /* 57347 */
            9         (char *) "PASTAT",        /* 57348 */
           10         (char *) "PASTAT2",        /* 57349 */
           11         (char *) "XBEGIN",        /* 57350 */
           12         (char *) "XEND",        /* 57351 */
           13         (char *) "NL",        /* 57352 */
           14         (char *) "ARRAY",        /* 57353 */
           15         (char *) "MATCH",        /* 57354 */
           16         (char *) "NOTMATCH",        /* 57355 */
           17         (char *) "MATCHOP",        /* 57356 */
           18         (char *) "FINAL",        /* 57357 */
           19         (char *) "DOT",        /* 57358 */
           20         (char *) "ALL",        /* 57359 */
           21         (char *) "CCL",        /* 57360 */
           22         (char *) "NCCL",        /* 57361 */
           23         (char *) "CHAR",        /* 57362 */
           24         (char *) "OR",        /* 57363 */
           25         (char *) "STAR",        /* 57364 */
           26         (char *) "QUEST",        /* 57365 */
           27         (char *) "PLUS",        /* 57366 */
           28         (char *) "AND",        /* 57367 */
           29         (char *) "BOR",        /* 57368 */
           30         (char *) "APPEND",        /* 57369 */
           31         (char *) "EQ",        /* 57370 */
           32         (char *) "GE",        /* 57371 */
           33         (char *) "GT",        /* 57372 */
           34         (char *) "LE",        /* 57373 */
           35         (char *) "LT",        /* 57374 */
           36         (char *) "NE",        /* 57375 */
           37         (char *) "IN",        /* 57376 */
           38         (char *) "ARG",        /* 57377 */
           39         (char *) "BLTIN",        /* 57378 */
           40         (char *) "BREAK",        /* 57379 */
           41         (char *) "CLOSE",        /* 57380 */
           42         (char *) "CONTINUE",        /* 57381 */
           43         (char *) "DELETE",        /* 57382 */
           44         (char *) "DO",        /* 57383 */
           45         (char *) "EXIT",        /* 57384 */
           46         (char *) "FOR",        /* 57385 */
           47         (char *) "FUNC",        /* 57386 */
           48         (char *) "SUB",        /* 57387 */
           49         (char *) "GSUB",        /* 57388 */
           50         (char *) "IF",        /* 57389 */
           51         (char *) "INDEX",        /* 57390 */
           52         (char *) "LSUBSTR",        /* 57391 */
           53         (char *) "MATCHFCN",        /* 57392 */
           54         (char *) "NEXT",        /* 57393 */
           55         (char *) "NEXTFILE",        /* 57394 */
           56         (char *) "ADD",        /* 57395 */
           57         (char *) "MINUS",        /* 57396 */
           58         (char *) "MULT",        /* 57397 */
           59         (char *) "DIVIDE",        /* 57398 */
           60         (char *) "MOD",        /* 57399 */
           61         (char *) "ASSIGN",        /* 57400 */
           62         (char *) "ASGNOP",        /* 57401 */
           63         (char *) "ADDEQ",        /* 57402 */
           64         (char *) "SUBEQ",        /* 57403 */
           65         (char *) "MULTEQ",        /* 57404 */
           66         (char *) "DIVEQ",        /* 57405 */
           67         (char *) "MODEQ",        /* 57406 */
           68         (char *) "POWEQ",        /* 57407 */
           69         (char *) "PRINT",        /* 57408 */
           70         (char *) "PRINTF",        /* 57409 */
           71         (char *) "SPRINTF",        /* 57410 */
           72         (char *) "ELSE",        /* 57411 */
           73         (char *) "INTEST",        /* 57412 */
           74         (char *) "CONDEXPR",        /* 57413 */
           75         (char *) "POSTINCR",        /* 57414 */
           76         (char *) "PREINCR",        /* 57415 */
           77         (char *) "POSTDECR",        /* 57416 */
           78         (char *) "PREDECR",        /* 57417 */
           79         (char *) "VAR",        /* 57418 */
           80         (char *) "IVAR",        /* 57419 */
           81         (char *) "VARNF",        /* 57420 */
           82         (char *) "CALL",        /* 57421 */
           83         (char *) "NUMBER",        /* 57422 */
           84         (char *) "STRING",        /* 57423 */
           85         (char *) "REGEXPR",        /* 57424 */
           86         (char *) "GETLINE",        /* 57425 */
           87         (char *) "RETURN",        /* 57426 */
           88         (char *) "SPLIT",        /* 57427 */
           89         (char *) "SUBSTR",        /* 57428 */
           90         (char *) "WHILE",        /* 57429 */
           91         (char *) "CAT",        /* 57430 */
           92         (char *) "NOT",        /* 57431 */
           93         (char *) "UMINUS",        /* 57432 */
           94         (char *) "POWER",        /* 57433 */
           95         (char *) "DECR",        /* 57434 */
           96         (char *) "INCR",        /* 57435 */
           97         (char *) "INDIRECT",        /* 57436 */
           98         (char *) "LASTTOKEN",        /* 57437 */
           99 };
          100 
          101 
          102 Cell *(*proctab[92])(Node **, int) = {
          103         nullproc,        /* FIRSTTOKEN */
          104         program,        /* PROGRAM */
          105         pastat,        /* PASTAT */
          106         dopa2,        /* PASTAT2 */
          107         nullproc,        /* XBEGIN */
          108         nullproc,        /* XEND */
          109         nullproc,        /* NL */
          110         array,        /* ARRAY */
          111         matchop,        /* MATCH */
          112         matchop,        /* NOTMATCH */
          113         nullproc,        /* MATCHOP */
          114         nullproc,        /* FINAL */
          115         nullproc,        /* DOT */
          116         nullproc,        /* ALL */
          117         nullproc,        /* CCL */
          118         nullproc,        /* NCCL */
          119         nullproc,        /* CHAR */
          120         nullproc,        /* OR */
          121         nullproc,        /* STAR */
          122         nullproc,        /* QUEST */
          123         nullproc,        /* PLUS */
          124         boolop,        /* AND */
          125         boolop,        /* BOR */
          126         nullproc,        /* APPEND */
          127         relop,        /* EQ */
          128         relop,        /* GE */
          129         relop,        /* GT */
          130         relop,        /* LE */
          131         relop,        /* LT */
          132         relop,        /* NE */
          133         instat,        /* IN */
          134         arg,        /* ARG */
          135         bltin,        /* BLTIN */
          136         jump,        /* BREAK */
          137         closefile,        /* CLOSE */
          138         jump,        /* CONTINUE */
          139         awkdelete,        /* DELETE */
          140         dostat,        /* DO */
          141         jump,        /* EXIT */
          142         forstat,        /* FOR */
          143         nullproc,        /* FUNC */
          144         sub,        /* SUB */
          145         gsub,        /* GSUB */
          146         ifstat,        /* IF */
          147         sindex,        /* INDEX */
          148         nullproc,        /* LSUBSTR */
          149         matchop,        /* MATCHFCN */
          150         jump,        /* NEXT */
          151         jump,        /* NEXTFILE */
          152         arith,        /* ADD */
          153         arith,        /* MINUS */
          154         arith,        /* MULT */
          155         arith,        /* DIVIDE */
          156         arith,        /* MOD */
          157         assign,        /* ASSIGN */
          158         nullproc,        /* ASGNOP */
          159         assign,        /* ADDEQ */
          160         assign,        /* SUBEQ */
          161         assign,        /* MULTEQ */
          162         assign,        /* DIVEQ */
          163         assign,        /* MODEQ */
          164         assign,        /* POWEQ */
          165         printstat,        /* PRINT */
          166         awkprintf,        /* PRINTF */
          167         awksprintf,        /* SPRINTF */
          168         nullproc,        /* ELSE */
          169         intest,        /* INTEST */
          170         condexpr,        /* CONDEXPR */
          171         incrdecr,        /* POSTINCR */
          172         incrdecr,        /* PREINCR */
          173         incrdecr,        /* POSTDECR */
          174         incrdecr,        /* PREDECR */
          175         nullproc,        /* VAR */
          176         nullproc,        /* IVAR */
          177         getnf,        /* VARNF */
          178         call,        /* CALL */
          179         nullproc,        /* NUMBER */
          180         nullproc,        /* STRING */
          181         nullproc,        /* REGEXPR */
          182         getline,        /* GETLINE */
          183         jump,        /* RETURN */
          184         split,        /* SPLIT */
          185         substr,        /* SUBSTR */
          186         whilestat,        /* WHILE */
          187         cat,        /* CAT */
          188         boolop,        /* NOT */
          189         arith,        /* UMINUS */
          190         arith,        /* POWER */
          191         nullproc,        /* DECR */
          192         nullproc,        /* INCR */
          193         indirect,        /* INDIRECT */
          194         nullproc,        /* LASTTOKEN */
          195 };
          196 
          197 char *tokname(int n)
          198 {
          199         static char buf[100];
          200 
          201         if (n < FIRSTTOKEN || n > LASTTOKEN) {
          202                 sprintf(buf, "token %d", n);
          203                 return buf;
          204         }
          205         return printname[n-FIRSTTOKEN];
          206 }