]> git.proxmox.com Git - mirror_edk2.git/blame - EdkCompatibilityPkg/Other/Maintained/Tools/Pccts/h/antlr.h
Add in the 1st version of ECP.
[mirror_edk2.git] / EdkCompatibilityPkg / Other / Maintained / Tools / Pccts / h / antlr.h
CommitLineData
3eb9473e 1/* antlr.h \r
2 *\r
3 * SOFTWARE RIGHTS\r
4 *\r
5 * We reserve no LEGAL rights to the Purdue Compiler Construction Tool\r
6 * Set (PCCTS) -- PCCTS is in the public domain. An individual or\r
7 * company may do whatever they wish with source code distributed with\r
8 * PCCTS or the code generated by PCCTS, including the incorporation of\r
9 * PCCTS, or its output, into commerical software.\r
10 *\r
11 * We encourage users to develop software with PCCTS. However, we do ask\r
12 * that credit is given to us for developing PCCTS. By "credit",\r
13 * we mean that if you incorporate our source code into one of your\r
14 * programs (commercial product, research project, or otherwise) that you\r
15 * acknowledge this fact somewhere in the documentation, research report,\r
16 * etc... If you like PCCTS and have developed a nice tool with the\r
17 * output, please mention that you developed it using PCCTS. In\r
18 * addition, we ask that this header remain intact in our source code.\r
19 * As long as these guidelines are kept, we expect to continue enhancing\r
20 * this system and expect to make other tools available as they are\r
21 * completed.\r
22 *\r
23 * ANTLR 1.33\r
24 * Terence Parr\r
25 * Parr Research Corporation\r
26 * with Purdue University and AHPCRC, University of Minnesota\r
27 * 1989-1998\r
28 */\r
29\r
30#ifndef ANTLR_H\r
31#define ANTLR_H\r
32\r
33#include "pcctscfg.h"\r
34\r
35#include "pccts_stdio.h"\r
36\r
37/* turn off warnings for unreferenced labels */\r
38\r
39#ifdef _MSC_VER\r
40#pragma warning(disable:4102)\r
41#endif\r
42\r
43/*\r
44 * Define all of the stack setup and manipulation of $i, #i variables.\r
45 *\r
46 * Notes:\r
47 * The type 'Attrib' must be defined before entry into this .h file.\r
48 */\r
49\r
50\r
51#ifdef __USE_PROTOS\r
52#include "pccts_stdlib.h"\r
53#else\r
54#ifdef VAXC\r
55#include <stdlib.h>\r
56#else\r
57#include <malloc.h>\r
58#endif\r
59#endif\r
60#include "pccts_string.h"\r
61\r
62#if 0\r
63#include "set.h"\r
64#endif\r
65\r
66\r
67typedef int ANTLRTokenType;\r
68typedef unsigned char SetWordType;\r
69\r
70typedef char ANTLRChar;\r
71\r
72 /* G u e s s S t u f f */\r
73\r
74#ifdef ZZCAN_GUESS\r
75#ifndef ZZINF_LOOK\r
76#define ZZINF_LOOK\r
77#endif\r
78#endif\r
79\r
80#ifdef ZZCAN_GUESS\r
81typedef struct _zzjmp_buf {\r
82 jmp_buf state;\r
83 } zzjmp_buf;\r
84#endif\r
85\r
86\r
87/* can make this a power of 2 for more efficient lookup */\r
88\r
89#ifndef ZZLEXBUFSIZE\r
90#define ZZLEXBUFSIZE 8000 /* MR22 raise from 2k to 8k */\r
91#endif\r
92\r
93#define zzOvfChk \\r
94 if ( zzasp <= 0 ) \\r
95 { \\r
96 fprintf(stderr, zzStackOvfMsg, __FILE__, __LINE__); \\r
97 exit(PCCTS_EXIT_FAILURE); \\r
98 }\r
99\r
100#ifndef ZZA_STACKSIZE\r
101#define ZZA_STACKSIZE 400\r
102#endif\r
103#ifndef ZZAST_STACKSIZE\r
104#define ZZAST_STACKSIZE 400\r
105#endif\r
106\r
107#ifndef zzfailed_pred\r
108#ifdef ZZCAN_GUESS\r
109#define zzfailed_pred(_p) \\r
110 if (zzguessing) { \\r
111 zzGUESS_FAIL; \\r
112 } else { \\r
113 fprintf(stderr, "semantic error; failed predicate: '%s'\n",_p); \\r
114 }\r
115#else\r
116#define zzfailed_pred(_p) \\r
117 fprintf(stderr, "semantic error; failed predicate: '%s'\n",_p)\r
118#endif\r
119#endif\r
120\r
121/* MR19 zzchar_t additions */\r
122\r
123#ifdef LL_K\r
124#define LOOKAHEAD \\r
125 int zztokenLA[LL_K]; \\r
126 zzchar_t zztextLA[LL_K][ZZLEXBUFSIZE]; \\r
127 int zzlap = 0, zzlabase=0; /* labase only used for DEMAND_LOOK */\r
128#else\r
129#define LOOKAHEAD \\r
130 int zztoken;\r
131#endif\r
132\r
133#ifndef zzcr_ast\r
134#define zzcr_ast(ast,attr,tok,text)\r
135#endif\r
136\r
137#ifdef DEMAND_LOOK\r
138#define DemandLookData int zzdirty=1;\r
139#else\r
140#define DemandLookData\r
141#endif\r
142\r
143#ifndef zzUSER_GUESS_HOOK\r
144#define zzUSER_GUESS_HOOK(seqFrozen,zzrv)\r
145#endif\r
146\r
147#ifndef zzUSER_GUESS_DONE_HOOK\r
148#define zzUSER_GUESS_DONE_HOOK(seqFrozen)\r
149#endif\r
150\r
151 /* S t a t e S t u f f */\r
152\r
153#ifdef ZZCAN_GUESS\r
154#define zzGUESS_BLOCK zzantlr_state zzst; int zzrv; int zzGuessSeqFrozen;\r
155\r
156/* MR10 change zzGUESS: do zzGUESS_DONE when zzrv==1 after longjmp as in C++ mode */\r
157\r
158#define zzGUESS zzsave_antlr_state(&zzst); \\r
159 zzguessing = 1; \\r
160 zzGuessSeqFrozen=++zzGuessSeq; \\r
161 zzrv = setjmp(zzguess_start.state); \\r
162 zzUSER_GUESS_HOOK(zzGuessSeqFrozen,zzrv) \\r
163 if (zzrv) zzGUESS_DONE;\r
164#ifdef zzTRACE_RULES\r
165#define zzGUESS_FAIL { zzTraceGuessFail(); longjmp(zzguess_start.state, 1); }\r
166#else\r
167#define zzGUESS_FAIL longjmp(zzguess_start.state, 1)\r
168#endif\r
169\r
170/* MR10 change zzGUESS_DONE: zzrv=1 to simulate longjmp() return value as in C++ mode */\r
171\r
172#define zzGUESS_DONE { zzrestore_antlr_state(&zzst); zzrv=1; zzUSER_GUESS_DONE_HOOK(zzGuessSeqFrozen) }\r
173#define zzNON_GUESS_MODE if ( !zzguessing )\r
174#define zzGuessData \\r
175 zzjmp_buf zzguess_start; \\r
176 int zzguessing;\r
177#else\r
178#define zzGUESS_BLOCK\r
179#define zzGUESS\r
180#define zzGUESS_FAIL\r
181#define zzGUESS_DONE\r
182#define zzNON_GUESS_MODE\r
183#define zzGuessData\r
184#endif\r
185\r
186typedef struct _zzantlr_state {\r
187#ifdef ZZCAN_GUESS\r
188 zzjmp_buf guess_start;\r
189 int guessing;\r
190#endif\r
191 int asp;\r
192 int ast_sp;\r
193#ifdef ZZINF_LOOK\r
194 int inf_lap; /* not sure we need to save this one */\r
195 int inf_labase;\r
196 int inf_last;\r
197\r
198/* MR6 Gunnar Rxnning (gunnar@candleweb.no) */\r
199/* MR6 Additional state needs to be saved/restored */\r
200/* MR6 Matching changes in err.h */\r
201\r
202 int *inf_tokens; /* MR6 */\r
203 char **inf_text; /* MR6 */\r
204 char *inf_text_buffer; /* MR6 */\r
205 int *inf_line; /* MR6 */\r
206#endif\r
207#ifdef DEMAND_LOOK\r
208 int dirty;\r
209#endif\r
210\r
211#ifdef LL_K\r
212 int tokenLA[LL_K];\r
213 char textLA[LL_K][ZZLEXBUFSIZE];\r
214 int lap;\r
215 int labase;\r
216#else\r
217 int token;\r
218 char text[ZZLEXBUFSIZE];\r
219#endif\r
220#ifdef zzTRACE_RULES\r
221 int traceOptionValue; /* MR10 */\r
222 int traceGuessOptionValue; /* MR10 */\r
223 char *traceCurrentRuleName; /* MR10 */\r
224 int traceDepth; /* MR10 */\r
225#endif\r
226\r
227 } zzantlr_state;\r
228\r
229#ifdef zzTRACE_RULES\r
230extern int zzTraceOptionValueDefault;\r
231extern int zzTraceOptionValue;\r
232extern int zzTraceGuessOptionValue;\r
233extern char *zzTraceCurrentRuleName;\r
234extern int zzTraceDepth;\r
235#endif\r
236\r
237extern int zzGuessSeq; /* MR10 */\r
238extern int zzSyntaxErrCount; /* MR11 */\r
239extern int zzLexErrCount; /* MR11 */\r
240\r
241 /* I n f i n i t e L o o k a h e a d */\r
242\r
243\r
244#ifdef ZZINF_LOOK\r
245#define InfLookData \\r
246 int *zzinf_tokens; \\r
247 char **zzinf_text; \\r
248 char *zzinf_text_buffer; \\r
249 int *zzinf_line; \\r
250 int zzinf_labase; \\r
251 int zzinf_last;\r
252#else\r
253#define InfLookData\r
254#endif\r
255\r
256#ifdef ZZINF_LOOK\r
257\r
258#ifndef ZZINF_DEF_TEXT_BUFFER_SIZE\r
259#define ZZINF_DEF_TEXT_BUFFER_SIZE 20000\r
260#endif\r
261#ifndef ZZINF_DEF_TOKEN_BUFFER_SIZE\r
262#define ZZINF_DEF_TOKEN_BUFFER_SIZE 2000\r
263#endif\r
264/* WARNING!!!!!!\r
265 * ZZINF_BUFFER_TEXT_CHUNK_SIZE must be > sizeof(text) largest possible token.\r
266 */\r
267#ifndef ZZINF_BUFFER_TEXT_CHUNK_SIZE\r
268#define ZZINF_BUFFER_TEXT_CHUNK_SIZE 5000\r
269#endif\r
270#ifndef ZZINF_BUFFER_TOKEN_CHUNK_SIZE\r
271#define ZZINF_BUFFER_TOKEN_CHUNK_SIZE 1000\r
272#endif\r
273\r
274#if ZZLEXBUFSIZE > ZZINF_BUFFER_TEXT_CHUNK_SIZE\r
275#define ZZINF_BUFFER_TEXT_CHUNK_SIZE ZZLEXBUFSIZE+5\r
276#endif\r
277\r
278/* make inf_look user-access macros */\r
279#ifdef LL_K\r
280#define ZZINF_LA_VALID(i) (((zzinf_labase+i-1)-LL_K+1) <= zzinf_last)\r
281#define ZZINF_LA(i) zzinf_tokens[(zzinf_labase+i-1)-LL_K+1]\r
282#define ZZINF_LATEXT(i) zzinf_text[(zzinf_labase+i-1)-LL_K+1]\r
283/* MR6 In 1.33 vanilla the #define ZZINF_LINE(i) is was commented out */\r
284#define ZZINF_LINE(i) zzinf_line[(zzinf_labase+i-1)-LL_K+1]\r
285#else\r
286#define ZZINF_LA_VALID(i) (((zzinf_labase+i-1)) <= zzinf_last)\r
287#define ZZINF_LA(i) zzinf_tokens[(zzinf_labase+i-1)]\r
288#define ZZINF_LATEXT(i) zzinf_text[(zzinf_labase+i-1)]\r
289#endif\r
290\r
291#define inf_zzgettok _inf_zzgettok()\r
292extern void _inf_zzgettok();\r
293\r
294#endif /* ZZINF_LOOK */\r
295\r
296\r
297#ifdef LL_K\r
298\r
299#ifdef __USE_PROTOS\r
300#define ANTLR_INFO \\r
301 Attrib zzempty_attr(void) {static Attrib a; return a;} \\r
302 Attrib zzconstr_attr(int _tok, char *_text) \\r
303 {Attrib a; zzcr_attr((&a),_tok,_text); return a;} \\r
304 int zzasp=ZZA_STACKSIZE; \\r
305 char zzStackOvfMsg[]="fatal: attrib/AST stack overflow %s(%d)!\n"; \\r
306 Attrib zzaStack[ZZA_STACKSIZE]; DemandLookData \\r
307 InfLookData \\r
308 zzGuessData\r
309#else\r
310#define ANTLR_INFO \\r
311 Attrib zzempty_attr() {static Attrib a; return a;} \\r
312 Attrib zzconstr_attr(_tok, _text) int _tok; char *_text; \\r
313 {Attrib a; zzcr_attr((&a),_tok,_text); return a;} \\r
314 int zzasp=ZZA_STACKSIZE; \\r
315 char zzStackOvfMsg[]="fatal: attrib/AST stack overflow %s(%d)!\n"; \\r
316 Attrib zzaStack[ZZA_STACKSIZE]; DemandLookData \\r
317 InfLookData \\r
318 zzGuessData\r
319#endif\r
320\r
321#else\r
322\r
323#ifdef __USE_PROTOS\r
324#define ANTLR_INFO \\r
325 Attrib zzempty_attr(void) {static Attrib a; return a;} \\r
326 Attrib zzconstr_attr(int _tok, char *_text) \\r
327 {Attrib a; zzcr_attr((&a),_tok,_text); return a;} \\r
328 int zzasp=ZZA_STACKSIZE; \\r
329 char zzStackOvfMsg[]="fatal: attrib/AST stack overflow %s(%d)!\n"; \\r
330 Attrib zzaStack[ZZA_STACKSIZE]; DemandLookData \\r
331 InfLookData \\r
332 zzGuessData\r
333#else\r
334#define ANTLR_INFO \\r
335 Attrib zzempty_attr() {static Attrib a; return a;} \\r
336 Attrib zzconstr_attr(_tok, _text) int _tok; char *_text; \\r
337 {Attrib a; zzcr_attr((&a),_tok,_text); return a;} \\r
338 int zzasp=ZZA_STACKSIZE; \\r
339 char zzStackOvfMsg[]="fatal: attrib/AST stack overflow %s(%d)!\n"; \\r
340 Attrib zzaStack[ZZA_STACKSIZE]; DemandLookData \\r
341 InfLookData \\r
342 zzGuessData\r
343#endif\r
344 \r
345#endif /* LL_k */\r
346\r
347\r
348#ifdef ZZINF_LOOK\r
349\r
350#ifdef LL_K\r
351#ifdef DEMAND_LOOK\r
352#define zzPrimeLookAhead {zzdirty=LL_K; zzlap = zzlabase = 0;}\r
353#else\r
354#define zzPrimeLookAhead {zzlap = zzlabase = 0; zzfill_inf_look();\\r
355 {int _i; for(_i=1;_i<=LL_K; _i++) \\r
356 {zzCONSUME;} zzlap = zzlabase = 0;}}\r
357#endif\r
358\r
359#else /* LL_K */\r
360\r
361#ifdef DEMAND_LOOK\r
362#define zzPrimeLookAhead zzfill_inf_look(); zzdirty=1\r
363#else\r
364#define zzPrimeLookAhead zzfill_inf_look(); inf_zzgettok\r
365\r
366#endif\r
367#endif /* LL_K */\r
368\r
369#else /* ZZINF_LOOK */\r
370\r
371#ifdef LL_K\r
372#ifdef DEMAND_LOOK\r
373#define zzPrimeLookAhead {zzdirty=LL_K; zzlap = zzlabase = 0;}\r
374#else\r
375#define zzPrimeLookAhead {int _i; zzlap = 0; for(_i=1;_i<=LL_K; _i++) \\r
376 {zzCONSUME;} zzlap = 0;}\r
377#endif\r
378\r
379#else\r
380\r
381#ifdef DEMAND_LOOK\r
382#define zzPrimeLookAhead zzdirty=1\r
383#else\r
384#define zzPrimeLookAhead zzgettok()\r
385#endif\r
386#endif /* LL_K */\r
387\r
388#endif /* ZZINF_LOOK */\r
389\r
390\r
391#ifdef LL_K\r
392#define zzenterANTLRs(s) \\r
393 zzlextext = &(zztextLA[0][0]); zzrdstr( s ); zzPrimeLookAhead;\r
394#define zzenterANTLRf(f) \\r
395 zzlextext = &(zztextLA[0][0]); zzrdfunc( f ); zzPrimeLookAhead;\r
396#define zzenterANTLR(f) \\r
397 zzlextext = &(zztextLA[0][0]); zzrdstream( f ); zzPrimeLookAhead;\r
398#ifdef ZZINF_LOOK\r
399#define zzleaveANTLR(f) free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line);\r
400#define zzleaveANTLRf(f) free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line);\r
401#define zzleaveANTLRs(f) free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line);\r
402#else\r
403#define zzleaveANTLR(f)\r
404#define zzleaveANTLRf(f)\r
405#define zzleaveANTLRs(f)\r
406#endif\r
407\r
408#else\r
409\r
410#define zzenterANTLRs(s) \\r
411 {static char zztoktext[ZZLEXBUFSIZE]; \\r
412 zzlextext = zztoktext; zzrdstr( s ); zzPrimeLookAhead;}\r
413#define zzenterANTLRf(f) \\r
414 {static char zztoktext[ZZLEXBUFSIZE]; \\r
415 zzlextext = zztoktext; zzrdfunc( f ); zzPrimeLookAhead;}\r
416#define zzenterANTLR(f) \\r
417 {static char zztoktext[ZZLEXBUFSIZE]; \\r
418 zzlextext = zztoktext; zzrdstream( f ); zzPrimeLookAhead;}\r
419#ifdef ZZINF_LOOK\r
420#define zzleaveANTLR(f) free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line);\r
421#define zzleaveANTLRf(f) free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line);\r
422#define zzleaveANTLRs(f) free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line);\r
423#else\r
424#define zzleaveANTLR(f)\r
425#define zzleaveANTLRf(f)\r
426#define zzleaveANTLRs(f)\r
427#endif\r
428\r
429#endif\r
430\r
431/* MR19 Paul D. Smith (psmith@baynetworks.com)\r
432 Need to adjust AST stack pointer at exit.\r
433 Referenced in ANTLRx macros.\r
434*/\r
435\r
436#ifdef GENAST\r
437#define ZZAST_ADJUST ++zzast_sp;\r
438#else\r
439#define ZZAST_ADJUST\r
440#endif\r
441\r
442#define ANTLR(st, f) zzbufsize = ZZLEXBUFSIZE; \\r
443 zzenterANTLR(f); \\r
444 { \\r
445 zzBLOCK(zztasp1); \\r
446 st; /* ++zzasp; Removed MR20 G. Hobbelt */ \\r
447 /* ZZAST_ADJUST Removed MR20 G. Hobbelt */ \\r
448 /* MR20 G. Hobbelt. Kill the top' attribute (+AST stack corr.) */ \\r
449 zzEXIT_ANTLR(zztasp1 + 1); \\r
450 } \\r
451 zzleaveANTLR(f);\r
452 \r
453#define ANTLRm(st, f, _m) zzbufsize = ZZLEXBUFSIZE; \\r
454 zzmode(_m); \\r
455 zzenterANTLR(f); \\r
456 { \\r
457 zzBLOCK(zztasp1); \\r
458 st; /* ++zzasp; Removed MR20 G. Hobbelt */ \\r
459 /* ZZAST_ADJUST Removed MR20 G. Hobbelt */ \\r
460 /* MR20 G. Hobbelt. Kill the top' attribute (+AST stack corr.) */ \\r
461 zzEXIT_ANTLR(zztasp1 + 1); \\r
462 } \\r
463 zzleaveANTLR(f);\r
464 \r
465#define ANTLRf(st, f) zzbufsize = ZZLEXBUFSIZE; \\r
466 zzenterANTLRf(f); \\r
467 { \\r
468 zzBLOCK(zztasp1); \\r
469 st; /* ++zzasp; Removed MR20 G. Hobbelt */ \\r
470 /* ZZAST_ADJUST Removed MR20 G. Hobbelt */ \\r
471 /* MR20 G. Hobbelt. Kill the top' attribute (+AST stack corr.) */ \\r
472 zzEXIT_ANTLR(zztasp1 + 1); \\r
473 } \\r
474 zzleaveANTLRf(f);\r
475\r
476#define ANTLRs(st, s) zzbufsize = ZZLEXBUFSIZE; \\r
477 zzenterANTLRs(s); \\r
478 { \\r
479 zzBLOCK(zztasp1); \\r
480 st; /* ++zzasp; Removed MR20 G. Hobbelt */ \\r
481 /* ZZAST_ADJUST Removed MR20 G. Hobbelt */ \\r
482 /* MR20 G. Hobbelt. Kill the top' attribute (+AST stack corr.) */ \\r
483 zzEXIT_ANTLR(zztasp1 + 1); \\r
484 } \\r
485 zzleaveANTLRs(s);\r
486\r
487#ifdef LL_K\r
488#define zztext (&(zztextLA[zzlap][0]))\r
489#else\r
490#define zztext zzlextext\r
491#endif\r
492\r
493\r
494 /* A r g u m e n t A c c e s s */\r
495\r
496#define zzaCur (zzaStack[zzasp])\r
497#define zzaRet (*zzaRetPtr)\r
498#define zzaArg(v,n) zzaStack[v-n]\r
499#define zzMakeAttr { zzNON_GUESS_MODE {zzOvfChk; --zzasp; zzcr_attr(&(zzaStack[zzasp]),LA(1),LATEXT(1));}}\r
500#ifdef zzdef0\r
501#define zzMake0 { zzOvfChk; --zzasp; zzdef0(&(zzaStack[zzasp]));}\r
502#else\r
503#define zzMake0 { zzOvfChk; --zzasp;}\r
504#endif\r
505#define zzaPush(_v) { zzOvfChk; zzaStack[--zzasp] = _v;}\r
506#ifndef zzd_attr\r
507#define zzREL(t) zzasp=(t); /* Restore state of stack */\r
508#else\r
509#define zzREL(t) for (; zzasp<(t); zzasp++) \\r
510 { zzd_attr(&(zzaStack[zzasp])); }\r
511#endif\r
512\r
513\r
514#define zzsetmatch(_es) \\r
515 if ( !_zzsetmatch(_es, &zzBadText, &zzMissText, &zzMissTok, &zzBadTok, &zzMissSet) ) goto fail;\r
516\r
517#ifdef ZZCAN_GUESS\r
518#define zzsetmatch_wsig(_es, handler) \\r
519 if ( !_zzsetmatch_wsig(_es) ) if (zzguessing) { zzGUESS_FAIL; } else {_signal=MismatchedToken; goto handler;}\r
520#else\r
521#define zzsetmatch_wsig(_es, handler) \\r
522 if ( !_zzsetmatch_wsig(_es) ) {_signal=MismatchedToken; goto handler;}\r
523#endif\r
524\r
525#ifdef __USE_PROTOS\r
526extern int _zzsetmatch(SetWordType *, char **, char **, int *, int *, SetWordType **);\r
527extern int _zzsetmatch_wsig(SetWordType *);\r
528#else\r
529extern int _zzsetmatch();\r
530extern int _zzsetmatch_wsig();\r
531#endif\r
532\r
533#define zzmatch(_t) \\r
534 if ( !_zzmatch(_t, &zzBadText, &zzMissText, &zzMissTok, &zzBadTok, &zzMissSet) ) goto fail;\r
535\r
536#ifdef ZZCAN_GUESS\r
537#define zzmatch_wsig(_t,handler) \\r
538 if ( !_zzmatch_wsig(_t) ) if (zzguessing) { zzGUESS_FAIL; } else {_signal=MismatchedToken; goto handler;}\r
539#else\r
540#define zzmatch_wsig(_t,handler) \\r
541 if ( !_zzmatch_wsig(_t) ) {_signal=MismatchedToken; goto handler;}\r
542#endif\r
543\r
544#ifdef __USE_PROTOS\r
545extern int _zzmatch(int, char **, char **, int *, int *, SetWordType **);\r
546extern int _zzmatch_wsig(int);\r
547#else\r
548extern int _zzmatch();\r
549extern int _zzmatch_wsig();\r
550#endif\r
551\r
552#define zzmatch_wdfltsig(_t,_f) \\r
553 if ( !_zzmatch_wdfltsig(_t,_f) ) _signal=MismatchedToken;\r
554#define zzsetmatch_wdfltsig(tw,tt,wf) \\r
555 if ( !_zzsetmatch_wdfltsig(tw,tt,wf) ) _signal=MismatchedToken;\r
556\r
557#ifdef __USE_PROTOS\r
558extern int _zzmatch_wdfltsig(int, SetWordType *);\r
559extern int _zzsetmatch_wdfltsig(SetWordType *tokensWanted,\r
560 int tokenTypeOfSet,\r
561 SetWordType *whatFollows);\r
562#else\r
563extern int _zzmatch_wdfltsig();\r
564extern int _zzsetmatch_wdfltsig();\r
565#endif\r
566\r
567#ifdef GENAST\r
568#define zzRULE Attrib *zzaRetPtr = &(zzaStack[zzasp-1]); \\r
569 SetWordType *zzMissSet=NULL; int zzMissTok=0; \\r
570 int zzBadTok=0; char *zzBadText=""; \\r
571 int zzErrk=1,zzpf=0; \\r
572 zzTRACEdata \\r
573 char *zzMissText=""; zzASTVars\r
574#else\r
575#define zzRULE Attrib *zzaRetPtr = &(zzaStack[zzasp-1]); \\r
576 int zzBadTok=0; char *zzBadText=""; \\r
577 int zzErrk=1,zzpf=0; \\r
578 zzTRACEdata \\r
579 SetWordType *zzMissSet=NULL; int zzMissTok=0; char *zzMissText=""\r
580#endif\r
581\r
582#ifdef GENAST\r
583#define zzBLOCK(i) int i = zzasp - 1; int zztsp = zzast_sp\r
584#define zzEXIT(i) zzREL(i); zzastREL; zzNON_GUESS_MODE { zzastPush(*_root); }\r
585#define zzEXIT_ANTLR(i) zzREL(i); zzastREL /* [i_a] added as we want this for the ANTLRx() macros */\r
586#define zzLOOP(i) zzREL(i); zzastREL\r
587#else\r
588#define zzBLOCK(i) int i = zzasp - 1\r
589#define zzEXIT(i) zzREL(i)\r
590#define zzEXIT_ANTLR(i) zzREL(i) /* [i_a] added as we want this for the ANTLRx() macros */\r
591#define zzLOOP(i) zzREL(i)\r
592#endif\r
593\r
594#ifdef LL_K\r
595\r
596#ifdef DEMAND_LOOK\r
597#define LOOK(_k) {int i,stop=_k-(LL_K-zzdirty); for (i=1; i<=stop; i++) \\r
598 zzCONSUME;}\r
599#define zzCONSUME {zzgettok(); zzdirty--; \\r
600 zzlap = (zzlap+1)&(LL_K-1); \\r
601 zzlextext = &(zztextLA[zzlap][0]);}\r
602#else\r
603#ifdef ZZINF_LOOK\r
604#define zzCONSUME {inf_zzgettok; \\r
605 zzlap = (zzlap+1)&(LL_K-1); \\r
606 zzlextext = &(zztextLA[zzlap][0]); \\r
607 }\r
608#else\r
609#define zzCONSUME {zzgettok(); \\r
610 zzlap = (zzlap+1)&(LL_K-1); \\r
611 zzlextext = &(zztextLA[zzlap][0]);}\r
612#endif /* ZZINF_LOOK */\r
613#endif /* DEMAND_LOOK */\r
614\r
615#else /* LL_K */\r
616\r
617#ifdef DEMAND_LOOK\r
618#define LOOK(_k) if ( zzdirty) zzCONSUME;\r
619#ifdef ZZINF_LOOK\r
620#define zzCONSUME inf_zzgettok; zzdirty=0;\r
621#else\r
622#define zzCONSUME zzgettok(); zzdirty=0;\r
623#endif /* ZZINF_LOOK */\r
624\r
625#else /* DEMAND_LOOK */\r
626\r
627#ifdef ZZINF_LOOK\r
628#define zzCONSUME inf_zzgettok\r
629#else\r
630#define zzCONSUME zzgettok();\r
631#endif\r
632\r
633#endif /* DEMAND_LOOK */\r
634\r
635#endif /* LL_K */\r
636\r
637#ifdef LL_K\r
638#define NLA zztokenLA[zzlap&(LL_K-1)] /* --> next LA */\r
639#define NLATEXT zztextLA[zzlap&(LL_K-1)] /* --> next text of LA */\r
640#ifdef DEMAND_LOOK\r
641#define LA(i) zztokenLA[(zzlabase+(i)-1)&(LL_K-1)]\r
642#define LATEXT(i) (&(zztextLA[(zzlabase+(i)-1)&(LL_K-1)][0]))\r
643#else\r
644#define LA(i) zztokenLA[(zzlap+(i)-1)&(LL_K-1)]\r
645#define LATEXT(i) (&(zztextLA[(zzlap+(i)-1)&(LL_K-1)][0]))\r
646#endif\r
647#else\r
648#define NLA zztoken\r
649#define NLATEXT zztext\r
650#define LA(i) zztoken\r
651#define LATEXT(i) zztext\r
652#endif\r
653\r
654\r
655 /* S t a n d a r d S i g n a l s */\r
656\r
657#define NoSignal 0\r
658#define MismatchedToken 1\r
659#define NoViableAlt 2\r
660#define NoSemViableAlt 3\r
661\r
662/* MR7 Allow more control over signalling */\r
663/* by adding "Unwind" and "zzsetSignal" */\r
664\r
665#define Unwind 4\r
666#define zzsetSignal(newValue) *_retsignal=_signal=(newValue)\r
667#define zzsuppressSignal *_retsignal=_signal=0\r
668#define zzexportSignal *_retsignal=_signal\r
669\r
670 /* F u n c t i o n T r a c i n g */\r
671\r
672#ifndef zzTRACE_RULES\r
673#define zzTRACEdata\r
674#else\r
675#ifndef zzTRACEdata\r
676#define zzTRACEdata ANTLRChar *zzTracePrevRuleName = NULL;\r
677#endif\r
678#endif\r
679\r
680#ifndef zzTRACEIN\r
681#define zzTRACEIN(r) zzTracePrevRuleName=zzTraceCurrentRuleName;zzTraceIn(r);\r
682#endif\r
683#ifndef zzTRACEOUT\r
684#define zzTRACEOUT(r) zzTraceOut(r);zzTraceCurrentRuleName=zzTracePrevRuleName;\r
685#endif\r
686\r
687/* MR19 zzchar_t additions */\r
688\r
689#ifndef zzchar_t\r
690#ifdef ZZWCHAR_T\r
691#define zzchar_t wchar_t\r
692#else\r
693#define zzchar_t char\r
694#endif\r
695#endif\r
696\r
697 /* E x t e r n D e f s */\r
698\r
699#ifdef __USE_PROTOS\r
700extern Attrib zzempty_attr(void);\r
701extern Attrib zzconstr_attr(int, char *);\r
702extern void zzsyn(char *, int, char *, SetWordType *, int, int, char *);\r
703extern int zzset_el(unsigned, SetWordType *);\r
704extern int zzset_deg(SetWordType *);\r
705extern void zzedecode(SetWordType *);\r
706extern void zzFAIL(int k, ...);\r
707extern void zzresynch(SetWordType *, SetWordType);\r
708extern void zzsave_antlr_state(zzantlr_state *);\r
709extern void zzrestore_antlr_state(zzantlr_state *);\r
710extern void zzfill_inf_look(void);\r
711extern void zzconsumeUntil(SetWordType *st); /* MR7 */\r
712extern void zzconsumeUntilToken(int t); /* MR7 */\r
713extern void zzTraceIn(char * ruleName); /* MR10 */\r
714extern void zzTraceOut(char * ruleName); /* MR10 */\r
715extern int zzTraceOption(int delta); /* MR10 */\r
716extern int zzTraceGuessOption(int delta); /* MR10 */\r
717extern void zzTraceReset(void); /* MR10 */\r
718extern void zzTraceGuessFail(void); /* MR10 */\r
719#ifdef EXCEPTION_HANDLING\r
720extern void zzdflthandlers(int, int *);\r
721#endif\r
722#else\r
723extern Attrib zzempty_attr();\r
724extern Attrib zzconstr_attr();\r
725extern void zzsyn();\r
726extern int zzset_el();\r
727extern int zzset_deg();\r
728extern void zzedecode();\r
729extern void zzFAIL();\r
730extern void zzresynch();\r
731extern void zzsave_antlr_state();\r
732extern void zzrestore_antlr_state();\r
733extern void zzfill_inf_look();\r
734extern void zzconsumeUntil(); /* MR7 */\r
735extern void zzconsumeUntilToken(); /* MR7 */\r
736extern void zzTraceIn(); /* MR10 */\r
737extern void zzTraceOut(); /* MR10 */\r
738extern int zzTraceOption(); /* MR10 */\r
739extern int zzTraceGuessOption(); /* MR10 */\r
740extern void zzTraceReset(); /* MR10 */\r
741extern void zzTraceGuessFail(); /* MR10 */\r
742#ifdef EXCEPTION_HANDLING\r
743extern void zzdflthandlers();\r
744#endif\r
745#endif\r
746\r
747 /* G l o b a l V a r i a b l e s */\r
748\r
749/* Define a parser; user should do a "#parser myname" in their grammar file */\r
750/*extern struct pccts_parser zzparser;*/\r
751\r
752extern char *zztokens[];\r
753#ifdef LL_K\r
754extern int zztokenLA[];\r
755extern zzchar_t zztextLA[][ZZLEXBUFSIZE];\r
756extern int zzlap;\r
757extern int zzlabase;\r
758#else\r
759extern int zztoken;\r
760#endif\r
761\r
762extern char zzStackOvfMsg[];\r
763extern int zzasp;\r
764extern Attrib zzaStack[];\r
765#ifdef ZZINF_LOOK\r
766extern int *zzinf_tokens;\r
767extern char **zzinf_text;\r
768extern char *zzinf_text_buffer;\r
769extern int *zzinf_line;\r
770extern int zzinf_labase;\r
771extern int zzinf_last;\r
772#endif\r
773#ifdef DEMAND_LOOK\r
774extern int zzdirty;\r
775#endif\r
776#ifdef ZZCAN_GUESS\r
777extern int zzguessing;\r
778extern zzjmp_buf zzguess_start;\r
779#endif\r
780\r
781/* Define global veriables that refer to values exported by the scanner.\r
782 * These declarations duplicate those in dlgdef.h, but are needed\r
783 * if ANTLR is not to generate a .dlg file (-gx); PS, this is a hack.\r
784 */\r
785extern zzchar_t *zzlextext; /* text of most recently matched token */\r
786extern int zzbufsize; /* how long zzlextext is */\r
787\r
788#endif\r