]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/C/VfrCompile/Pccts/h/err.h
BaseTools: Fix various typos
[mirror_edk2.git] / BaseTools / Source / C / VfrCompile / Pccts / h / err.h
CommitLineData
30fdf114
LG
1/*\r
2 * err.h\r
3 *\r
4 * Standard error handling mechanism\r
5 *\r
6 * SOFTWARE RIGHTS\r
7 *\r
8 * We reserve no LEGAL rights to the Purdue Compiler Construction Tool\r
9 * Set (PCCTS) -- PCCTS is in the public domain. An individual or\r
10 * company may do whatever they wish with source code distributed with\r
11 * PCCTS or the code generated by PCCTS, including the incorporation of\r
12 * PCCTS, or its output, into commerical software.\r
13 *\r
14 * We encourage users to develop software with PCCTS. However, we do ask\r
15 * that credit is given to us for developing PCCTS. By "credit",\r
16 * we mean that if you incorporate our source code into one of your\r
17 * programs (commercial product, research project, or otherwise) that you\r
18 * acknowledge this fact somewhere in the documentation, research report,\r
19 * etc... If you like PCCTS and have developed a nice tool with the\r
20 * output, please mention that you developed it using PCCTS. In\r
21 * addition, we ask that this header remain intact in our source code.\r
22 * As long as these guidelines are kept, we expect to continue enhancing\r
23 * this system and expect to make other tools available as they are\r
24 * completed.\r
25 *\r
26 * Has grown to hold all kinds of stuff (err.h is increasingly misnamed)\r
27 *\r
28 * ANTLR 1.33\r
29 * Terence Parr\r
30 * Parr Research Corporation\r
31 * with Purdue University and AHPCRC, University of Minnesota\r
32 * 1989-2000\r
33 */\r
34\r
35#ifndef ERR_H\r
36#define ERR_H\r
37\r
38#include "pcctscfg.h"\r
39#include <stdlib.h>\r
40#include <assert.h>\r
41\r
42/* */\r
43/* 7-Apr-97 133MR1 */\r
44/* Proper choice of STDC and cplusplus pre-processor symbols (?) */\r
45/* */\r
46#include "pccts_string.h"\r
47\r
48#ifdef PCCTS_USE_STDARG\r
49#include "pccts_stdarg.h"\r
50#else\r
51#include <varargs.h>\r
52#endif\r
53\r
54#ifdef DUM\r
55/* Define usable bits per unsigned int word (used for set stuff) */\r
56#ifdef PC\r
57#define BSETWORDSIZE 16\r
58#define BSETLOGWORDSIZE 4\r
59#else\r
60#define BSETWORDSIZE 32\r
61#define BSETLOGWORDSIZE 5\r
62#endif\r
63#endif\r
64\r
65#define BSETWORDSIZE 8\r
66#define BSETLOGWORDSIZE 3 /* SetWordType is 8bits */\r
67\r
68#define BSETMODWORD(x) ((x) & (BSETWORDSIZE-1)) /* x % BSETWORDSIZE */\r
69#define BSETDIVWORD(x) ((x) >> BSETLOGWORDSIZE) /* x / BSETWORDSIZE */\r
70\r
71/* This is not put into the global pccts_parser structure because it is\r
72 * hidden and does not need to be saved during a "save state" operation\r
73 */\r
74/* maximum of 32 bits/unsigned int and must be 8 bits/byte */\r
75static SetWordType bitmask[] = {\r
76 0x00000001, 0x00000002, 0x00000004, 0x00000008,\r
77 0x00000010, 0x00000020, 0x00000040, 0x00000080\r
78};\r
79\r
80#ifdef zzTRACE_RULES\r
81int zzTraceOptionValueDefault=1;\r
82int zzTraceOptionValue=1;\r
83int zzTraceGuessOptionValue=1;\r
84char *zzTraceCurrentRuleName=NULL;\r
85int zzTraceDepth=0;\r
86#endif\r
87\r
88int zzGuessSeq=0; /* MR10 */\r
89int zzSyntaxErrCount=0; /* MR11 */\r
90int zzLexErrCount=0; /* MR11 */\r
91\r
92void\r
93#ifdef __USE_PROTOS\r
94zzresynch(SetWordType *wd,SetWordType mask)\r
95#else\r
96zzresynch(wd,mask)\r
97SetWordType *wd, mask;\r
98#endif\r
99{\r
100 static int consumed = 1;\r
101\r
102 /* if you enter here without having consumed a token from last resynch\r
103 * force a token consumption.\r
104 */\r
105 if ( !consumed ) {zzCONSUME; consumed=1; return;} /* MR10 */\r
106\r
107 /* if current token is in resynch set, we've got what we wanted */\r
108 if ( wd[LA(1)]&mask || LA(1) == zzEOF_TOKEN ) {consumed=0; return;}\r
109 \r
110 /* scan until we find something in the resynch set */\r
111 while ( !(wd[LA(1)]&mask) && LA(1) != zzEOF_TOKEN ) {zzCONSUME;}\r
112 consumed=1;\r
113}\r
114\r
115/* */\r
116/* 7-Apr-97 133MR1 for C++ and MR7 for C */\r
117/* Change suggested by Eli Sternheim (eli@interhdl.com) */\r
118/* */\r
119\r
120void\r
121#ifdef __USE_PROTOS\r
122zzconsumeUntil(SetWordType *st)\r
123#else\r
124zzconsumeUntil(st)\r
125SetWordType *st;\r
126#endif\r
127{\r
128 int tmp; /* MR7 */\r
129 while ( !zzset_el( (tmp=LA(1)), st) && tmp!=1 /* Eof */) { /* MR7 */\r
130 zzCONSUME; } /* MR7 */\r
131}\r
132\r
133/* */\r
134/* 7-Apr-97 133MR1 for C++ and MR7 for C */\r
135/* Change suggested by Eli Sternheim (eli@interhdl.com) */\r
136/* */\r
137\r
138void\r
139#ifdef __USE_PROTOS\r
140zzconsumeUntilToken(int t)\r
141#else\r
142zzconsumeUntilToken(t)\r
143int t;\r
144#endif\r
145{\r
146 int tmp; /* MR7 */\r
147 while ( (tmp=LA(1)) !=t && tmp!=1 /* Eof */) { zzCONSUME; } /* MR7 */\r
148}\r
149\r
150/* input looks like:\r
151 * zzFAIL(k, e1, e2, ...,&zzMissSet,&zzMissText,&zzBadTok,&zzBadText)\r
152 * where the zzMiss stuff is set here to the token that did not match\r
153 * (and which set wasn't it a member of).\r
154 */\r
155\r
156#ifdef PCCTS_USE_STDARG\r
157void zzFAIL(int k, ...)\r
158#else\r
159void zzFAIL(va_alist)\r
160va_dcl\r
161#endif\r
162{\r
163#ifdef LL_K\r
164 static char text[LL_K*ZZLEXBUFSIZE+1];\r
165 SetWordType *f[LL_K];\r
166#else\r
167 static char text[ZZLEXBUFSIZE+1];\r
168 SetWordType *f[1];\r
169#endif\r
170 SetWordType **miss_set;\r
171 char **miss_text;\r
172 int *bad_tok;\r
173 char **bad_text;\r
174 int *err_k;\r
175 int i;\r
176 va_list ap;\r
177#ifndef PCCTS_USE_STDARG /* MR20 */\r
178 int k;\r
179#endif\r
180#ifdef PCCTS_USE_STDARG /* MR20 */\r
181 va_start(ap, k);\r
182#else\r
183 va_start(ap);\r
184 k = va_arg(ap, int); /* how many lookahead sets? */\r
185#endif\r
186 assert(k <= sizeof(f)/sizeof(f[0])); /* MR20 G. Hobbelt */\r
187 text[0] = '\0';\r
188 for (i=1; i<=k; i++) /* collect all lookahead sets */\r
189 {\r
190 f[i-1] = va_arg(ap, SetWordType *);\r
191 }\r
192 for (i=1; i<=k; i++) /* look for offending token */\r
193 {\r
194 if ( i>1 ) strcat(text, " ");\r
195 strcat(text, LATEXT(i));\r
196 if ( !zzset_el((unsigned)LA(i), f[i-1]) ) break;\r
197 }\r
198 miss_set = va_arg(ap, SetWordType **);\r
199 miss_text = va_arg(ap, char **);\r
200 bad_tok = va_arg(ap, int *);\r
201 bad_text = va_arg(ap, char **);\r
202 err_k = va_arg(ap, int *);\r
203 if ( i>k )\r
204 {\r
205 /* bad; lookahead is permutation that cannot be matched,\r
206 * but, the ith token of lookahead is valid at the ith position\r
207 * (The old LL sub 1 (k) versus LL(k) parsing technique)\r
208 */\r
209 *miss_set = NULL;\r
210 *miss_text = zzlextext;\r
211 *bad_tok = LA(1);\r
212 *bad_text = LATEXT(1);\r
213 *err_k = k;\r
214 return;\r
215 }\r
216/* fprintf(stderr, "%s not in %dth set\n", zztokens[LA(i)], i);*/\r
217 *miss_set = f[i-1];\r
218 *miss_text = text;\r
219 *bad_tok = LA(i);\r
220 *bad_text = LATEXT(i);\r
221 if ( i==1 ) *err_k = 1;\r
222 else *err_k = k;\r
223}\r
224\r
225#ifdef __USE_PROTOS\r
226void zzTraceGuessDone(zzantlr_state *state)\r
227#else\r
228void zzTraceGuessDone(state)\r
229 zzantlr_state *state;\r
230#endif\r
231{\r
232#ifdef zzTRACE_RULES\r
233#ifdef ZZCAN_GUESS\r
234\r
235 int doIt=0;\r
236\r
237 if (zzTraceCurrentRuleName == NULL) return;\r
238\r
239 if (zzTraceOptionValue <= 0) {\r
240 doIt=0;\r
241 } else if (zzTraceGuessOptionValue <= 0) {\r
242 doIt=0;\r
243 } else {\r
244 doIt=1;\r
245 };\r
246\r
247 if (doIt) {\r
248 fprintf(stderr,"guess done - returning to rule %s {\"%s\"} at depth %d",\r
249 state->traceCurrentRuleName,\r
250 LATEXT(1),\r
251 state->traceDepth);\r
252 if (state->guessing != 0) {\r
253 fprintf(stderr," (guess mode continues - an enclosing guess is still active)");\r
254 } else {\r
255 fprintf(stderr," (guess mode ends)");\r
256 };\r
257 fprintf(stderr,"\n");\r
258 };\r
259#endif\r
260#endif\r
261}\r
262\r
263void\r
264#ifdef __USE_PROTOS\r
265zzsave_antlr_state(zzantlr_state *buf)\r
266#else\r
267zzsave_antlr_state(buf)\r
268zzantlr_state *buf;\r
269#endif\r
270{\r
271#ifdef LL_K\r
272 int i;\r
273#endif\r
274\r
275#ifdef ZZCAN_GUESS\r
276 buf->guess_start = zzguess_start;\r
277 buf->guessing = zzguessing;\r
278#endif\r
279 buf->asp = zzasp;\r
280#ifdef GENAST\r
281 buf->ast_sp = zzast_sp;\r
282#endif\r
283#ifdef ZZINF_LOOK\r
284 buf->inf_labase = zzinf_labase;\r
285 buf->inf_last = zzinf_last;\r
286\r
287/* MR6 Gunnar Rxnning (gunnar@candleweb.no) */\r
288/* MR6 Additional state needs to be saved/restored */\r
289\r
290 buf->inf_tokens = zzinf_tokens; /* MR6 */\r
291 buf->inf_text = zzinf_text; /* MR6 */\r
292 buf->inf_text_buffer = zzinf_text_buffer; /* MR6 */\r
293 buf->inf_line = zzinf_line; /* MR6 */\r
294\r
295#endif\r
296#ifdef DEMAND_LOOK\r
297 buf->dirty = zzdirty;\r
298#endif\r
299#ifdef LL_K\r
300 for (i=0; i<LL_K; i++) buf->tokenLA[i] = zztokenLA[i];\r
301 for (i=0; i<LL_K; i++) strcpy(buf->textLA[i], zztextLA[i]);\r
302 buf->lap = zzlap;\r
303 buf->labase = zzlabase;\r
304#else\r
305 buf->token = zztoken;\r
306 strcpy(buf->text, zzlextext);\r
307#endif\r
308#ifdef zzTRACE_RULES\r
309\r
310 /* MR10 */\r
311\r
312 buf->traceOptionValue=zzTraceOptionValue;\r
313 buf->traceGuessOptionValue=zzTraceGuessOptionValue;\r
314 buf->traceCurrentRuleName=zzTraceCurrentRuleName;\r
315 buf->traceDepth=zzTraceDepth;\r
316#endif\r
317}\r
318\r
319void\r
320#ifdef __USE_PROTOS\r
321zzrestore_antlr_state(zzantlr_state *buf)\r
322#else\r
323zzrestore_antlr_state(buf)\r
324zzantlr_state *buf;\r
325#endif\r
326{\r
327\r
328#ifdef zzTRACE_RULES\r
329 int prevTraceOptionValue;\r
330#endif\r
331\r
332#ifdef LL_K\r
333 int i;\r
334#endif\r
335\r
336#ifdef ZZCAN_GUESS\r
337 zzguess_start = buf->guess_start;\r
338 zzguessing = buf->guessing;\r
339#endif\r
340 zzasp = buf->asp;\r
341#ifdef GENAST\r
342 zzast_sp = buf->ast_sp;\r
343#endif\r
344#ifdef ZZINF_LOOK\r
345 zzinf_labase = buf->inf_labase;\r
346 zzinf_last = buf->inf_last;\r
347\r
348/* MR6 Gunnar Rxnning (gunnar@candleweb.no) */\r
349/* MR6 Additional state needs to be saved/restored */\r
350\r
351 zzinf_tokens = buf->inf_tokens; /* MR6 */\r
352 zzinf_text = buf->inf_text; /* MR6 */\r
353 zzinf_text_buffer = buf->inf_text_buffer; /* MR6 */\r
354 zzinf_line = buf->inf_line; /* MR6 */\r
355#endif\r
356#ifdef DEMAND_LOOK\r
357 zzdirty = buf->dirty;\r
358#endif\r
359#ifdef LL_K\r
360 for (i=0; i<LL_K; i++) zztokenLA[i] = buf->tokenLA[i];\r
361 for (i=0; i<LL_K; i++) strcpy(zztextLA[i], buf->textLA[i]);\r
362 zzlap = buf->lap;\r
363 zzlabase = buf->labase;\r
364#else\r
365 zztoken = buf->token;\r
366 strcpy(zzlextext, buf->text);\r
367#endif\r
368#ifdef zzTRACE_RULES\r
369\r
370 prevTraceOptionValue=zzTraceOptionValue;\r
371 zzTraceOptionValue=buf->traceOptionValue;\r
372 if ( (prevTraceOptionValue > 0) !=\r
373 (zzTraceOptionValue > 0)) {\r
374 if (zzTraceOptionValue > 0) {\r
375 fprintf(stderr,"trace enable restored in rule %s depth %d\n",\r
376 zzTraceCurrentRuleName,zzTraceDepth);\r
377 };\r
378 if (zzTraceOptionValue <= 0) {\r
379 fprintf(stderr,"trace disable restored in rule %s depth %d\n",\r
380 zzTraceCurrentRuleName,zzTraceDepth);\r
381 };\r
382 };\r
383\r
384 zzTraceOptionValue=buf->traceOptionValue; /* MR10 */\r
385 zzTraceGuessOptionValue=buf->traceGuessOptionValue; /* MR10 */\r
386 zzTraceCurrentRuleName=buf->traceCurrentRuleName; /* MR10 */\r
387 zzTraceDepth=buf->traceDepth; /* MR10 */\r
388 zzTraceGuessDone(buf); /* MR10 */\r
389#endif\r
390}\r
391\r
392void\r
393#ifdef __USE_PROTOS\r
394zzedecode(SetWordType *a)\r
395#else\r
396zzedecode(a)\r
397SetWordType *a;\r
398#endif\r
399{\r
400 register SetWordType *p = a;\r
401 register SetWordType *endp = &(p[zzSET_SIZE]);\r
402 register unsigned e = 0;\r
403\r
404 if ( zzset_deg(a)>1 ) fprintf(stderr, " {");\r
405 do {\r
406 register SetWordType t = *p;\r
407 register SetWordType *b = &(bitmask[0]);\r
408 do {\r
409 if ( t & *b ) fprintf(stderr, " %s", zztokens[e]);\r
410 e++;\r
411 } while (++b < &(bitmask[sizeof(SetWordType)*8]));\r
412 } while (++p < endp);\r
413 if ( zzset_deg(a)>1 ) fprintf(stderr, " }");\r
414}\r
415\r
416#ifndef USER_ZZSYN\r
417/* standard error reporting function */\r
418void\r
419#ifdef __USE_PROTOS\r
420zzsyn(char *text, int tok, char *egroup, SetWordType *eset, int etok, int k, char *bad_text)\r
421#else\r
422zzsyn(text, tok, egroup, eset, etok, k, bad_text)\r
423char *text, *egroup, *bad_text;\r
424int tok;\r
425int etok;\r
426int k;\r
427SetWordType *eset;\r
428#endif\r
429{\r
430 \r
431 zzSyntaxErrCount++; /* MR11 */\r
432 fprintf(stderr, "line %d: syntax error at \"%s\"", zzline, (tok==zzEOF_TOKEN)?"EOF":bad_text);\r
433 if ( !etok && !eset ) {fprintf(stderr, "\n"); return;}\r
434 if ( k==1 ) fprintf(stderr, " missing");\r
435 else\r
436 {\r
437 fprintf(stderr, "; \"%s\" not", bad_text);\r
438 if ( zzset_deg(eset)>1 ) fprintf(stderr, " in");\r
439 }\r
440 if ( zzset_deg(eset)>0 ) zzedecode(eset);\r
441 else fprintf(stderr, " %s", zztokens[etok]);\r
442 if ( strlen(egroup) > 0 ) fprintf(stderr, " in %s", egroup);\r
443 fprintf(stderr, "\n");\r
444}\r
445#endif\r
446\r
447/* is b an element of set p? */\r
448int\r
449#ifdef __USE_PROTOS\r
450zzset_el(unsigned b, SetWordType *p)\r
451#else\r
452zzset_el(b,p)\r
453unsigned b;\r
454SetWordType *p;\r
455#endif\r
456{\r
457 return( p[BSETDIVWORD(b)] & bitmask[BSETMODWORD(b)] );\r
458}\r
459\r
460int\r
461#ifdef __USE_PROTOS\r
462zzset_deg(SetWordType *a)\r
463#else\r
464zzset_deg(a)\r
465SetWordType *a;\r
466#endif\r
467{\r
468 /* Fast compute degree of a set... the number\r
469 of elements present in the set. Assumes\r
470 that all word bits are used in the set\r
471 */\r
472 register SetWordType *p = a;\r
473 register SetWordType *endp = &(a[zzSET_SIZE]);\r
474 register int degree = 0;\r
475\r
476 if ( a == NULL ) return 0;\r
477 while ( p < endp )\r
478 {\r
479 register SetWordType t = *p;\r
480 register SetWordType *b = &(bitmask[0]);\r
481 do {\r
482 if (t & *b) ++degree;\r
483 } while (++b < &(bitmask[sizeof(SetWordType)*8]));\r
484 p++;\r
485 }\r
486\r
487 return(degree);\r
488}\r
489\r
490#ifdef DEMAND_LOOK\r
491\r
492#ifdef LL_K\r
493int\r
494#ifdef __USE_PROTOS\r
495_zzmatch(int _t, char **zzBadText, char **zzMissText,\r
496 int *zzMissTok, int *zzBadTok,\r
497 SetWordType **zzMissSet)\r
498#else\r
499_zzmatch(_t, zzBadText, zzMissText, zzMissTok, zzBadTok, zzMissSet)\r
500int _t;\r
501char **zzBadText;\r
502char **zzMissText;\r
503int *zzMissTok, *zzBadTok;\r
504SetWordType **zzMissSet;\r
505#endif\r
506{\r
507 if ( zzdirty==LL_K ) {\r
508 zzCONSUME;\r
509 }\r
510 if ( LA(1)!=_t ) {\r
511 *zzBadText = *zzMissText=LATEXT(1); \r
512 *zzMissTok= _t; *zzBadTok=LA(1);\r
513 *zzMissSet=NULL; \r
514 return 0;\r
515 }\r
516 zzMakeAttr \r
517 zzdirty++; \r
518 zzlabase++; \r
519 return 1;\r
520}\r
521\r
522int\r
523#ifdef __USE_PROTOS\r
524_zzmatch_wsig(int _t)\r
525#else\r
526_zzmatch_wsig(_t)\r
527int _t;\r
528#endif\r
529{\r
530 if ( zzdirty==LL_K ) {\r
531 zzCONSUME;\r
532 }\r
533 if ( LA(1)!=_t ) {\r
534 return 0;\r
535 }\r
536 zzMakeAttr \r
537 zzdirty++; \r
538 zzlabase++; \r
539 return 1;\r
540}\r
541\r
542#else\r
543\r
544int\r
545#ifdef __USE_PROTOS\r
546_zzmatch(int _t, char **zzBadText, char **zzMissText,\r
547 int *zzMissTok, int *zzBadTok, SetWordType **zzMissSet)\r
548#else\r
549_zzmatch(_t, zzBadText, zzMissText, zzMissTok, zzBadTok, zzMissSet)\r
550int _t;\r
551char **zzBadText;\r
552char **zzMissText;\r
553int *zzMissTok, *zzBadTok;\r
554SetWordType **zzMissSet;\r
555#endif\r
556{ \r
557 if ( zzdirty ) {zzCONSUME;} \r
558 if ( LA(1)!=_t ) {\r
559 *zzBadText = *zzMissText=LATEXT(1); \r
560 *zzMissTok= _t; *zzBadTok=LA(1);\r
561 *zzMissSet=NULL; \r
562 return 0;\r
563 } \r
564 zzdirty = 1; \r
565 zzMakeAttr \r
566 return 1;\r
567}\r
568\r
569int\r
570#ifdef __USE_PROTOS\r
571_zzmatch_wsig(int _t)\r
572#else\r
573_zzmatch_wsig(_t)\r
574int _t;\r
575#endif\r
576{\r
577 if ( zzdirty ) {zzCONSUME;} \r
578 if ( LA(1)!=_t ) {\r
579 return 0;\r
580 }\r
581 zzdirty = 1; \r
582 zzMakeAttr \r
583 return 1;\r
584}\r
585\r
586#endif /*LL_K*/\r
587\r
588#else\r
589\r
590int\r
591#ifdef __USE_PROTOS\r
592_zzmatch(int _t, char **zzBadText, char **zzMissText,\r
593 int *zzMissTok, int *zzBadTok,\r
594 SetWordType **zzMissSet)\r
595#else\r
596_zzmatch(_t, zzBadText, zzMissText, zzMissTok, zzBadTok, zzMissSet)\r
597int _t;\r
598char **zzBadText;\r
599char **zzMissText;\r
600int *zzMissTok, *zzBadTok;\r
601SetWordType **zzMissSet;\r
602#endif\r
603{\r
604 if ( LA(1)!=_t ) { \r
605 *zzBadText = *zzMissText=LATEXT(1); \r
606 *zzMissTok= _t; *zzBadTok=LA(1);\r
607 *zzMissSet=NULL; \r
608 return 0;\r
609 }\r
610 zzMakeAttr\r
611 return 1;\r
612}\r
613\r
614int\r
615#ifdef __USE_PROTOS\r
616_zzmatch_wsig(int _t)\r
617#else\r
618_zzmatch_wsig(_t)\r
619int _t;\r
620#endif\r
621{\r
622 if ( LA(1)!=_t ) return 0;\r
623 zzMakeAttr \r
624 return 1;\r
625}\r
626\r
627#endif /*DEMAND_LOOK*/\r
628\r
629#ifdef ZZINF_LOOK\r
630void\r
631#ifdef __USE_PROTOS\r
632_inf_zzgettok(void)\r
633#else\r
634_inf_zzgettok()\r
635#endif\r
636{\r
637 if ( zzinf_labase >= zzinf_last ) \r
638 {NLA = zzEOF_TOKEN; strcpy(NLATEXT, "");} \r
639 else { \r
640 NLA = zzinf_tokens[zzinf_labase];\r
641 zzline = zzinf_line[zzinf_labase]; /* wrong in 1.21 */\r
642 strcpy(NLATEXT, zzinf_text[zzinf_labase]); \r
643 zzinf_labase++; \r
644 } \r
645}\r
646#endif\r
647\r
648#ifdef ZZINF_LOOK\r
649/* allocate default size text,token and line arrays;\r
650 * then, read all of the input reallocing the arrays as needed.\r
651 * Once the number of total tokens is known, the LATEXT(i) array (zzinf_text)\r
2d53d54a 652 * is allocated and its pointers are set to the tokens in zzinf_text_buffer.\r
30fdf114
LG
653 */\r
654void\r
655#ifdef __USE_PROTOS\r
656zzfill_inf_look(void)\r
657#else\r
658zzfill_inf_look()\r
659#endif\r
660{\r
661 int tok, line;\r
662 int zzinf_token_buffer_size = ZZINF_DEF_TOKEN_BUFFER_SIZE;\r
663 int zzinf_text_buffer_size = ZZINF_DEF_TEXT_BUFFER_SIZE;\r
664 int zzinf_text_buffer_index = 0;\r
665 int zzinf_lap = 0;\r
666\r
667 /* allocate text/token buffers */\r
668 zzinf_text_buffer = (char *) malloc(zzinf_text_buffer_size);\r
669 if ( zzinf_text_buffer == NULL )\r
670 {\r
671 fprintf(stderr, "cannot allocate lookahead text buffer (%d bytes)\n",\r
672 zzinf_text_buffer_size);\r
673 exit(PCCTS_EXIT_FAILURE); \r
674 }\r
675 zzinf_tokens = (int *) calloc(zzinf_token_buffer_size,sizeof(int));\r
676 if ( zzinf_tokens == NULL )\r
677 {\r
678 fprintf(stderr, "cannot allocate token buffer (%d tokens)\n",\r
679 zzinf_token_buffer_size);\r
680 exit(PCCTS_EXIT_FAILURE); \r
681 }\r
682 zzinf_line = (int *) calloc(zzinf_token_buffer_size,sizeof(int));\r
683 if ( zzinf_line == NULL )\r
684 {\r
685 fprintf(stderr, "cannot allocate line buffer (%d ints)\n",\r
686 zzinf_token_buffer_size);\r
687 exit(PCCTS_EXIT_FAILURE);\r
688 }\r
689\r
690 /* get tokens, copying text to text buffer */\r
691 zzinf_text_buffer_index = 0;\r
692 do {\r
693 zzgettok();\r
694 line = zzreal_line;\r
695 while ( zzinf_lap>=zzinf_token_buffer_size )\r
696 {\r
697 zzinf_token_buffer_size += ZZINF_BUFFER_TOKEN_CHUNK_SIZE;\r
698 zzinf_tokens = (int *) realloc(zzinf_tokens,\r
699 zzinf_token_buffer_size*sizeof(int));\r
700 if ( zzinf_tokens == NULL )\r
701 {\r
702 fprintf(stderr, "cannot allocate lookahead token buffer (%d tokens)\n",\r
703 zzinf_token_buffer_size);\r
704 exit(PCCTS_EXIT_FAILURE);\r
705 }\r
706 zzinf_line = (int *) realloc(zzinf_line,\r
707 zzinf_token_buffer_size*sizeof(int));\r
708 if ( zzinf_line == NULL )\r
709 {\r
710 fprintf(stderr, "cannot allocate lookahead line buffer (%d ints)\n",\r
711 zzinf_token_buffer_size);\r
712 exit(PCCTS_EXIT_FAILURE);\r
713 }\r
714\r
715 }\r
716 while ( (zzinf_text_buffer_index+strlen(NLATEXT)+1) >= zzinf_text_buffer_size )\r
717 {\r
718 zzinf_text_buffer_size += ZZINF_BUFFER_TEXT_CHUNK_SIZE;\r
719 zzinf_text_buffer = (char *) realloc(zzinf_text_buffer,\r
720 zzinf_text_buffer_size);\r
721 if ( zzinf_text_buffer == NULL )\r
722 {\r
723 fprintf(stderr, "cannot allocate lookahead text buffer (%d bytes)\n",\r
724 zzinf_text_buffer_size);\r
725 exit(PCCTS_EXIT_FAILURE);\r
726 }\r
727 }\r
728 /* record token and text and line of input symbol */\r
729 tok = zzinf_tokens[zzinf_lap] = NLA;\r
730 strcpy(&zzinf_text_buffer[zzinf_text_buffer_index], NLATEXT);\r
731 zzinf_text_buffer_index += strlen(NLATEXT)+1;\r
732 zzinf_line[zzinf_lap] = line;\r
733 zzinf_lap++;\r
734 } while (tok!=zzEOF_TOKEN);\r
735 zzinf_labase = 0;\r
736 zzinf_last = zzinf_lap-1;\r
737\r
738 /* allocate ptrs to text of ith token */\r
739 zzinf_text = (char **) calloc(zzinf_last+1,sizeof(char *));\r
740 if ( zzinf_text == NULL )\r
741 {\r
742 fprintf(stderr, "cannot allocate lookahead text buffer (%d)\n",\r
743 zzinf_text_buffer_size);\r
744 exit(PCCTS_EXIT_FAILURE); \r
745 } \r
746 zzinf_text_buffer_index = 0;\r
747 zzinf_lap = 0;\r
748 /* set ptrs so that zzinf_text[i] is the text of the ith token found on input */\r
749 while (zzinf_lap<=zzinf_last)\r
750 {\r
751 zzinf_text[zzinf_lap++] = &zzinf_text_buffer[zzinf_text_buffer_index];\r
752 zzinf_text_buffer_index += strlen(&zzinf_text_buffer[zzinf_text_buffer_index])+1;\r
753 }\r
754}\r
755#endif\r
756\r
757int\r
758#ifdef __USE_PROTOS\r
759_zzsetmatch(SetWordType *e, char **zzBadText, char **zzMissText,\r
760 int *zzMissTok, int *zzBadTok,\r
761 SetWordType **zzMissSet,\r
762 SetWordType *zzTokclassErrset /* MR23 */)\r
763#else\r
764_zzsetmatch(e, zzBadText, zzMissText, zzMissTok, zzBadTok, zzMissSet, zzTokclassErrset /* MR23 */)\r
765SetWordType *e;\r
766char **zzBadText;\r
767char **zzMissText;\r
768int *zzMissTok, *zzBadTok;\r
769SetWordType **zzMissSet;\r
770SetWordType *zzTokclassErrset;\r
771#endif\r
772{\r
773#ifdef DEMAND_LOOK\r
774#ifdef LL_K\r
775 if ( zzdirty==LL_K ) {zzCONSUME;}\r
776#else\r
777 if ( zzdirty ) {zzCONSUME;}\r
778#endif\r
779#endif\r
780 if ( !zzset_el((unsigned)LA(1), e) ) {\r
781 *zzBadText = LATEXT(1); *zzMissText=NULL;\r
782 *zzMissTok= 0; *zzBadTok=LA(1);\r
783 *zzMissSet=zzTokclassErrset; /* MR23 */\r
784 return 0;\r
785 }\r
786 zzMakeAttr /* MR14 Ger Hobbelt (hobbelt@axa.nl) */\r
787#ifdef DEMAND_LOOK\r
788#ifdef LL_K\r
789 zzdirty++;\r
790 zzlabase++; /* MR14 Ger Hobbelt (hobbelt@axa.nl) */\r
791#else\r
792 zzdirty = 1;\r
793#endif\r
794#endif\r
795 return 1;\r
796}\r
797\r
798int\r
799#ifdef __USE_PROTOS\r
800_zzmatch_wdfltsig(int tokenWanted, SetWordType *whatFollows)\r
801#else\r
802_zzmatch_wdfltsig(tokenWanted, whatFollows)\r
803int tokenWanted;\r
804SetWordType *whatFollows;\r
805#endif\r
806{\r
807#ifdef DEMAND_LOOK\r
808#ifdef LL_K\r
809 if ( zzdirty==LL_K ) {\r
810 zzCONSUME;\r
811 }\r
812#else\r
813 if ( zzdirty ) {zzCONSUME;}\r
814#endif\r
815#endif\r
816\r
817 if ( LA(1)!=tokenWanted )\r
818 {\r
819 zzSyntaxErrCount++; /* MR11 */\r
820 fprintf(stderr,\r
821 "line %d: syntax error at \"%s\" missing %s\n",\r
822 zzline,\r
823 (LA(1)==zzEOF_TOKEN)?"<eof>":(char *)LATEXT(1),\r
824 zztokens[tokenWanted]);\r
825 zzconsumeUntil( whatFollows );\r
826 return 0;\r
827 }\r
828 else {\r
829 zzMakeAttr \r
830#ifdef DEMAND_LOOK\r
831#ifdef LL_K\r
832 zzdirty++;\r
833 zzlabase++;\r
834#else\r
835 zzdirty = 1;\r
836#endif\r
837#else\r
838/* zzCONSUME; consume if not demand lookahead */\r
839#endif\r
840 return 1;\r
841 }\r
842}\r
843\r
844int\r
845#ifdef __USE_PROTOS\r
846_zzsetmatch_wdfltsig(SetWordType *tokensWanted,\r
847 int tokenTypeOfSet,\r
848 SetWordType *whatFollows)\r
849#else\r
850_zzsetmatch_wdfltsig(tokensWanted, tokenTypeOfSet, whatFollows)\r
851SetWordType *tokensWanted;\r
852int tokenTypeOfSet;\r
853SetWordType *whatFollows;\r
854#endif\r
855{\r
856#ifdef DEMAND_LOOK\r
857#ifdef LL_K\r
858 if ( zzdirty==LL_K ) {zzCONSUME;}\r
859#else\r
860 if ( zzdirty ) {zzCONSUME;}\r
861#endif\r
862#endif\r
863 if ( !zzset_el((unsigned)LA(1), tokensWanted) )\r
864 {\r
865 zzSyntaxErrCount++; /* MR11 */\r
866 fprintf(stderr,\r
867 "line %d: syntax error at \"%s\" missing %s\n",\r
868 zzline,\r
869 (LA(1)==zzEOF_TOKEN)?"<eof>":(char *)LATEXT(1),\r
870 zztokens[tokenTypeOfSet]);\r
871 zzconsumeUntil( whatFollows );\r
872 return 0;\r
873 }\r
874 else {\r
875 zzMakeAttr\r
876#ifdef DEMAND_LOOK\r
877#ifdef LL_K\r
878 zzdirty++;\r
879 zzlabase++;\r
880#else\r
881 zzdirty = 1;\r
882#endif\r
883#else\r
884/* zzCONSUME; consume if not demand lookahead */\r
885#endif\r
886 return 1;\r
887 }\r
888}\r
889\r
890int\r
891#ifdef __USE_PROTOS\r
892_zzsetmatch_wsig(SetWordType *e)\r
893#else\r
894_zzsetmatch_wsig(e)\r
895SetWordType *e;\r
896#endif\r
897{\r
898#ifdef DEMAND_LOOK\r
899#ifdef LL_K\r
900 if ( zzdirty==LL_K ) {zzCONSUME;}\r
901#else\r
902 if ( zzdirty ) {zzCONSUME;}\r
903#endif\r
904#endif\r
905 if ( !zzset_el((unsigned)LA(1), e) ) return 0;\r
906 zzMakeAttr /* MR14 Ger Hobbelt (hobbelt@axa.nl) */\r
907#ifdef DEMAND_LOOK\r
908#ifdef LL_K\r
909 zzdirty++;\r
910 zzlabase++; /* MR14 Ger Hobbelt (hobbelt@axa.nl) */\r
911#else\r
912 zzdirty = 1;\r
913#endif\r
914#endif\r
915 return 1;\r
916}\r
917\r
918#ifdef USER_ZZMODE_STACK\r
919static int zzmstk[ZZMAXSTK] = { -1 };\r
920static int zzmdep = 0;\r
921static char zzmbuf[70];\r
922\r
923void\r
924#ifdef __USE_PROTOS\r
925zzmpush( int m )\r
926#else\r
927zzmpush( m )\r
928int m;\r
929#endif\r
930{\r
931 if(zzmdep == ZZMAXSTK - 1) {\r
932 sprintf(zzmbuf, "Mode stack overflow ");\r
933 zzerr(zzmbuf);\r
934 } else {\r
935 zzmstk[zzmdep++] = zzauto;\r
936 zzmode(m);\r
937 }\r
938}\r
939\r
940void\r
941#ifdef __USE_PROTOS\r
942zzmpop( void )\r
943#else\r
944zzmpop( )\r
945#endif\r
946{\r
947 if(zzmdep == 0)\r
948 { sprintf(zzmbuf, "Mode stack underflow ");\r
949 zzerr(zzmbuf);\r
950 }\r
951 else\r
952 { zzmdep--;\r
953 zzmode(zzmstk[zzmdep]);\r
954 }\r
955}\r
956\r
957void\r
958#ifdef __USE_PROTOS\r
959zzsave_mode_stack( int modeStack[], int *modeLevel )\r
960#else\r
961zzsave_mode_stack( modeStack, modeLevel )\r
962int modeStack[];\r
963int *modeLevel;\r
964#endif\r
965{\r
966 int i;\r
967 memcpy(modeStack, zzmstk, sizeof(zzmstk));\r
968 *modeLevel = zzmdep;\r
969 zzmdep = 0;\r
970\r
971 return;\r
972}\r
973\r
974void\r
975#ifdef __USE_PROTOS\r
976zzrestore_mode_stack( int modeStack[], int *modeLevel )\r
977#else\r
978zzrestore_mode_stack( modeStack, modeLevel )\r
979int modeStack[];\r
980int *modeLevel;\r
981#endif\r
982{\r
983 int i;\r
984\r
985 memcpy(zzmstk, modeStack, sizeof(zzmstk));\r
986 zzmdep = *modeLevel;\r
987\r
988 return;\r
989}\r
990#endif /* USER_ZZMODE_STACK */\r
991\r
992#ifdef __USE_PROTOS\r
993void zzTraceReset(void)\r
994#else\r
995void zzTraceReset()\r
996#endif\r
997{\r
998#ifdef zzTRACE_RULES\r
999 zzTraceOptionValue=zzTraceOptionValueDefault;\r
1000 zzTraceGuessOptionValue=1;\r
1001 zzTraceCurrentRuleName=NULL;\r
1002 zzTraceDepth=0;\r
1003#endif\r
1004}\r
1005\r
1006#ifdef __USE_PROTOS\r
1007void zzTraceGuessFail(void)\r
1008#else\r
1009void zzTraceGuessFail()\r
1010#endif\r
1011{\r
1012\r
1013#ifdef zzTRACE_RULES\r
1014#ifdef ZZCAN_GUESS\r
1015\r
1016 int doIt=0;\r
1017\r
1018 if (zzTraceOptionValue <= 0) {\r
1019 doIt=0;\r
1020 } else if (zzguessing && zzTraceGuessOptionValue <= 0) {\r
1021 doIt=0;\r
1022 } else {\r
1023 doIt=1;\r
1024 };\r
1025\r
1026 if (doIt) {\r
1027 fprintf(stderr,"guess failed\n");\r
1028 };\r
1029#endif\r
1030#endif\r
1031}\r
1032\r
1033/* zzTraceOption:\r
1034 zero value turns off trace\r
1035*/\r
1036\r
1037#ifdef __USE_PROTOS\r
1038void zzTraceIn(char * rule)\r
1039#else\r
1040void zzTraceIn(rule)\r
1041 char *rule;\r
1042#endif\r
1043{\r
1044#ifdef zzTRACE_RULES\r
1045\r
1046 int doIt=0;\r
1047\r
1048 zzTraceDepth++;\r
1049 zzTraceCurrentRuleName=rule;\r
1050\r
1051 if (zzTraceOptionValue <= 0) {\r
1052 doIt=0;\r
1053#ifdef ZZCAN_GUESS\r
1054 } else if (zzguessing && zzTraceGuessOptionValue <= 0) {\r
1055 doIt=0;\r
1056#endif\r
1057 } else {\r
1058 doIt=1;\r
1059 };\r
1060\r
1061 if (doIt) {\r
1062 fprintf(stderr,"enter rule %s {\"%s\"} depth %d",\r
1063 rule,\r
1064 LA(1)==1 ? "@" : (char *) LATEXT(1), /* MR19 */\r
1065 zzTraceDepth);\r
1066#ifdef ZZCAN_GUESS\r
1067 if (zzguessing) fprintf(stderr," guessing");\r
1068#endif\r
1069 fprintf(stderr,"\n");\r
1070 };\r
1071#endif\r
1072 return;\r
1073}\r
1074\r
1075#ifdef __USE_PROTOS\r
1076void zzTraceOut(char * rule)\r
1077#else\r
1078void zzTraceOut(rule)\r
1079 char *rule;\r
1080#endif\r
1081{\r
1082#ifdef zzTRACE_RULES\r
1083 int doIt=0;\r
1084\r
1085 zzTraceDepth--;\r
1086\r
1087 if (zzTraceOptionValue <= 0) {\r
1088 doIt=0;\r
1089#ifdef ZZCAN_GUESS\r
1090 } else if (zzguessing && zzTraceGuessOptionValue <= 0) {\r
1091 doIt=0;\r
1092#endif\r
1093 } else {\r
1094 doIt=1;\r
1095 };\r
1096\r
1097 if (doIt) {\r
1098 fprintf(stderr,"exit rule %s {\"%s\"} depth %d",\r
1099 rule,\r
1100 LA(1)==1 ? "@" : (char *) LATEXT(1), /* MR19 */\r
1101 zzTraceDepth+1);\r
1102#ifdef ZZCAN_GUESS\r
1103 if (zzguessing) fprintf(stderr," guessing");\r
1104#endif\r
1105 fprintf(stderr,"\n");\r
1106 };\r
1107#endif\r
1108}\r
1109\r
1110#ifdef __USE_PROTOS\r
1111int zzTraceOption(int delta)\r
1112#else\r
1113int zzTraceOption(delta)\r
1114 int delta;\r
1115#endif\r
1116{\r
1117#ifdef zzTRACE_RULES\r
1118 int prevValue=zzTraceOptionValue;\r
1119\r
1120 zzTraceOptionValue=zzTraceOptionValue+delta;\r
1121\r
1122 if (zzTraceCurrentRuleName != NULL) {\r
1123 if (prevValue <= 0 && zzTraceOptionValue > 0) {\r
1124 fprintf(stderr,"trace enabled in rule %s depth %d\n",\r
1125 zzTraceCurrentRuleName,zzTraceDepth);\r
1126 };\r
1127 if (prevValue > 0 && zzTraceOptionValue <= 0) {\r
1128 fprintf(stderr,"trace disabled in rule %s depth %d\n",\r
1129 zzTraceCurrentRuleName,zzTraceDepth);\r
1130 };\r
1131 };\r
1132 return prevValue;\r
1133#else\r
1134 return 0;\r
1135#endif\r
1136}\r
1137\r
1138#ifdef __USE_PROTOS\r
1139int zzTraceGuessOption(int delta)\r
1140#else\r
1141int zzTraceGuessOption(delta)\r
1142 int delta;\r
1143#endif\r
1144{\r
1145#ifdef zzTRACE_RULES\r
1146#ifdef ZZCAN_GUESS\r
1147 int prevValue=zzTraceGuessOptionValue;\r
1148\r
1149 zzTraceGuessOptionValue=zzTraceGuessOptionValue+delta;\r
1150\r
1151 if (zzTraceCurrentRuleName != NULL) {\r
1152 if (prevValue <= 0 && zzTraceGuessOptionValue > 0) {\r
1153 fprintf(stderr,"guess trace enabled in rule %s depth %d\n",\r
1154 zzTraceCurrentRuleName,zzTraceDepth);\r
1155 };\r
1156 if (prevValue > 0 && zzTraceGuessOptionValue <= 0) {\r
1157 fprintf(stderr,"guess trace disabled in rule %s depth %d\n",\r
1158 zzTraceCurrentRuleName,zzTraceDepth);\r
1159 };\r
1160 };\r
1161 return prevValue;\r
1162#else\r
1163 return 0;\r
1164#endif\r
1165#else\r
1166 return 0;\r
1167#endif\r
1168}\r
1169\r
1170#endif /* ERR_H */\r