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