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