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