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