mrrl

Minimal Reliable Reproducible Linux
git clone https://ccx.te2000.cz/git/mrrl
Log | Files | Refs | Submodules | README

nawk-20250116-proctab.c (4284B)


      1 #include <stdio.h>
      2 #include "awk.h"
      3 #include "awkgram.tab.h"
      4 
      5 static const char * const printname[95] = {
      6 	"FIRSTTOKEN",	/* 258 */
      7 	"PROGRAM",	/* 259 */
      8 	"PASTAT",	/* 260 */
      9 	"PASTAT2",	/* 261 */
     10 	"XBEGIN",	/* 262 */
     11 	"XEND",	/* 263 */
     12 	"NL",	/* 264 */
     13 	"ARRAY",	/* 265 */
     14 	"MATCH",	/* 266 */
     15 	"NOTMATCH",	/* 267 */
     16 	"MATCHOP",	/* 268 */
     17 	"FINAL",	/* 269 */
     18 	"DOT",	/* 270 */
     19 	"ALL",	/* 271 */
     20 	"CCL",	/* 272 */
     21 	"NCCL",	/* 273 */
     22 	"CHAR",	/* 274 */
     23 	"OR",	/* 275 */
     24 	"STAR",	/* 276 */
     25 	"QUEST",	/* 277 */
     26 	"PLUS",	/* 278 */
     27 	"EMPTYRE",	/* 279 */
     28 	"ZERO",	/* 280 */
     29 	"AND",	/* 281 */
     30 	"BOR",	/* 282 */
     31 	"APPEND",	/* 283 */
     32 	"EQ",	/* 284 */
     33 	"GE",	/* 285 */
     34 	"GT",	/* 286 */
     35 	"LE",	/* 287 */
     36 	"LT",	/* 288 */
     37 	"NE",	/* 289 */
     38 	"IN",	/* 290 */
     39 	"ARG",	/* 291 */
     40 	"BLTIN",	/* 292 */
     41 	"BREAK",	/* 293 */
     42 	"CLOSE",	/* 294 */
     43 	"CONTINUE",	/* 295 */
     44 	"DELETE",	/* 296 */
     45 	"DO",	/* 297 */
     46 	"EXIT",	/* 298 */
     47 	"FOR",	/* 299 */
     48 	"FUNC",	/* 300 */
     49 	"SUB",	/* 301 */
     50 	"GSUB",	/* 302 */
     51 	"IF",	/* 303 */
     52 	"INDEX",	/* 304 */
     53 	"LSUBSTR",	/* 305 */
     54 	"MATCHFCN",	/* 306 */
     55 	"NEXT",	/* 307 */
     56 	"NEXTFILE",	/* 308 */
     57 	"ADD",	/* 309 */
     58 	"MINUS",	/* 310 */
     59 	"MULT",	/* 311 */
     60 	"DIVIDE",	/* 312 */
     61 	"MOD",	/* 313 */
     62 	"ASSIGN",	/* 314 */
     63 	"ASGNOP",	/* 315 */
     64 	"ADDEQ",	/* 316 */
     65 	"SUBEQ",	/* 317 */
     66 	"MULTEQ",	/* 318 */
     67 	"DIVEQ",	/* 319 */
     68 	"MODEQ",	/* 320 */
     69 	"POWEQ",	/* 321 */
     70 	"PRINT",	/* 322 */
     71 	"PRINTF",	/* 323 */
     72 	"SPRINTF",	/* 324 */
     73 	"ELSE",	/* 325 */
     74 	"INTEST",	/* 326 */
     75 	"CONDEXPR",	/* 327 */
     76 	"POSTINCR",	/* 328 */
     77 	"PREINCR",	/* 329 */
     78 	"POSTDECR",	/* 330 */
     79 	"PREDECR",	/* 331 */
     80 	"VAR",	/* 332 */
     81 	"IVAR",	/* 333 */
     82 	"VARNF",	/* 334 */
     83 	"CALL",	/* 335 */
     84 	"NUMBER",	/* 336 */
     85 	"STRING",	/* 337 */
     86 	"REGEXPR",	/* 338 */
     87 	"GETLINE",	/* 339 */
     88 	"RETURN",	/* 340 */
     89 	"SPLIT",	/* 341 */
     90 	"SUBSTR",	/* 342 */
     91 	"WHILE",	/* 343 */
     92 	"CAT",	/* 344 */
     93 	"NOT",	/* 345 */
     94 	"UMINUS",	/* 346 */
     95 	"UPLUS",	/* 347 */
     96 	"POWER",	/* 348 */
     97 	"DECR",	/* 349 */
     98 	"INCR",	/* 350 */
     99 	"INDIRECT",	/* 351 */
    100 	"LASTTOKEN",	/* 352 */
    101 };
    102 
    103 
    104 Cell *(*proctab[95])(Node **, int) = {
    105 	nullproc,	/* FIRSTTOKEN */
    106 	program,	/* PROGRAM */
    107 	pastat,	/* PASTAT */
    108 	dopa2,	/* PASTAT2 */
    109 	nullproc,	/* XBEGIN */
    110 	nullproc,	/* XEND */
    111 	nullproc,	/* NL */
    112 	array,	/* ARRAY */
    113 	matchop,	/* MATCH */
    114 	matchop,	/* NOTMATCH */
    115 	nullproc,	/* MATCHOP */
    116 	nullproc,	/* FINAL */
    117 	nullproc,	/* DOT */
    118 	nullproc,	/* ALL */
    119 	nullproc,	/* CCL */
    120 	nullproc,	/* NCCL */
    121 	nullproc,	/* CHAR */
    122 	nullproc,	/* OR */
    123 	nullproc,	/* STAR */
    124 	nullproc,	/* QUEST */
    125 	nullproc,	/* PLUS */
    126 	nullproc,	/* EMPTYRE */
    127 	nullproc,	/* ZERO */
    128 	boolop,	/* AND */
    129 	boolop,	/* BOR */
    130 	nullproc,	/* APPEND */
    131 	relop,	/* EQ */
    132 	relop,	/* GE */
    133 	relop,	/* GT */
    134 	relop,	/* LE */
    135 	relop,	/* LT */
    136 	relop,	/* NE */
    137 	instat,	/* IN */
    138 	arg,	/* ARG */
    139 	bltin,	/* BLTIN */
    140 	jump,	/* BREAK */
    141 	closefile,	/* CLOSE */
    142 	jump,	/* CONTINUE */
    143 	awkdelete,	/* DELETE */
    144 	dostat,	/* DO */
    145 	jump,	/* EXIT */
    146 	forstat,	/* FOR */
    147 	nullproc,	/* FUNC */
    148 	dosub,	/* SUB */
    149 	dosub,	/* GSUB */
    150 	ifstat,	/* IF */
    151 	sindex,	/* INDEX */
    152 	nullproc,	/* LSUBSTR */
    153 	matchop,	/* MATCHFCN */
    154 	jump,	/* NEXT */
    155 	jump,	/* NEXTFILE */
    156 	arith,	/* ADD */
    157 	arith,	/* MINUS */
    158 	arith,	/* MULT */
    159 	arith,	/* DIVIDE */
    160 	arith,	/* MOD */
    161 	assign,	/* ASSIGN */
    162 	nullproc,	/* ASGNOP */
    163 	assign,	/* ADDEQ */
    164 	assign,	/* SUBEQ */
    165 	assign,	/* MULTEQ */
    166 	assign,	/* DIVEQ */
    167 	assign,	/* MODEQ */
    168 	assign,	/* POWEQ */
    169 	printstat,	/* PRINT */
    170 	awkprintf,	/* PRINTF */
    171 	awksprintf,	/* SPRINTF */
    172 	nullproc,	/* ELSE */
    173 	intest,	/* INTEST */
    174 	condexpr,	/* CONDEXPR */
    175 	incrdecr,	/* POSTINCR */
    176 	incrdecr,	/* PREINCR */
    177 	incrdecr,	/* POSTDECR */
    178 	incrdecr,	/* PREDECR */
    179 	nullproc,	/* VAR */
    180 	nullproc,	/* IVAR */
    181 	getnf,	/* VARNF */
    182 	call,	/* CALL */
    183 	nullproc,	/* NUMBER */
    184 	nullproc,	/* STRING */
    185 	nullproc,	/* REGEXPR */
    186 	awkgetline,	/* GETLINE */
    187 	jump,	/* RETURN */
    188 	split,	/* SPLIT */
    189 	substr,	/* SUBSTR */
    190 	whilestat,	/* WHILE */
    191 	cat,	/* CAT */
    192 	boolop,	/* NOT */
    193 	arith,	/* UMINUS */
    194 	arith,	/* UPLUS */
    195 	arith,	/* POWER */
    196 	nullproc,	/* DECR */
    197 	nullproc,	/* INCR */
    198 	indirect,	/* INDIRECT */
    199 	nullproc,	/* LASTTOKEN */
    200 };
    201 
    202 const char *tokname(int n)
    203 {
    204 	static char buf[100];
    205 
    206 	if (n < FIRSTTOKEN || n > LASTTOKEN) {
    207 		snprintf(buf, sizeof(buf), "token %d", n);
    208 		return buf;
    209 	}
    210 	return printname[n-FIRSTTOKEN];
    211 }