]> git.proxmox.com Git - mirror_edk2.git/blame - Tools/CodeTools/TianoTools/Pccts/h/antlr.h
Restructuring for better separation of Tool packages.
[mirror_edk2.git] / Tools / CodeTools / TianoTools / Pccts / h / antlr.h
CommitLineData
878ddf1f 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-2000\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,_hasuseraction,_useraction) \\r
110 if (zzguessing) { \\r
111 zzGUESS_FAIL; \\r
112 } else { \\r
113 zzfailed_pred_action(_p,_hasuseraction,_useraction); \\r
114 }\r
115#else\r
116#define zzfailed_pred(_p,_hasuseraction,_useraction) \\r
117 zzfailed_pred_action(_p,_hasuseraction,_useraction);\r
118#endif\r
119#endif\r
120\r
121/* MR23 Provide more control over failed predicate action\r
122 without any need for user to worry about guessing internals.\r
123 _hasuseraction == 0 => no user specified error action\r
124 _hasuseraction == 1 => user specified error action\r
125*/\r
126\r
127#ifndef zzfailed_pred_action\r
128#define zzfailed_pred_action(_p,_hasuseraction,_useraction) \\r
129 if (_hasuseraction) { _useraction } \\r
130 else { fprintf(stderr, "semantic error; failed predicate: '%s'\n",_p); }\r
131#endif\r
132\r
133/* MR19 zzchar_t additions */\r
134\r
135#ifdef LL_K\r
136#define LOOKAHEAD \\r
137 int zztokenLA[LL_K]; \\r
138 zzchar_t zztextLA[LL_K][ZZLEXBUFSIZE]; \\r
139 int zzlap = 0, zzlabase=0; /* labase only used for DEMAND_LOOK */\r
140#else\r
141#define LOOKAHEAD \\r
142 int zztoken;\r
143#endif\r
144\r
145#ifndef zzcr_ast\r
146#define zzcr_ast(ast,attr,tok,text)\r
147#endif\r
148\r
149#ifdef DEMAND_LOOK\r
150#define DemandLookData int zzdirty=1;\r
151#else\r
152#define DemandLookData\r
153#endif\r
154\r
155#ifndef zzUSER_GUESS_HOOK\r
156#define zzUSER_GUESS_HOOK(seqFrozen,zzrv)\r
157#endif\r
158\r
159#ifndef zzUSER_GUESS_DONE_HOOK\r
160#define zzUSER_GUESS_DONE_HOOK(seqFrozen)\r
161#endif\r
162\r
163 /* S t a t e S t u f f */\r
164\r
165#ifdef ZZCAN_GUESS\r
166#define zzGUESS_BLOCK zzantlr_state zzst; int zzrv; int zzGuessSeqFrozen;\r
167\r
168/* MR10 change zzGUESS: do zzGUESS_DONE when zzrv==1 after longjmp as in C++ mode */\r
169\r
170#define zzGUESS zzsave_antlr_state(&zzst); \\r
171 zzguessing = 1; \\r
172 zzGuessSeqFrozen=++zzGuessSeq; \\r
173 zzrv = setjmp(zzguess_start.state); \\r
174 zzUSER_GUESS_HOOK(zzGuessSeqFrozen,zzrv) \\r
175 if (zzrv) zzGUESS_DONE;\r
176#ifdef zzTRACE_RULES\r
177#define zzGUESS_FAIL { zzTraceGuessFail(); longjmp(zzguess_start.state, 1); }\r
178#else\r
179#define zzGUESS_FAIL longjmp(zzguess_start.state, 1)\r
180#endif\r
181\r
182/* MR10 change zzGUESS_DONE: zzrv=1 to simulate longjmp() return value as in C++ mode */\r
183\r
184#define zzGUESS_DONE { zzrestore_antlr_state(&zzst); zzrv=1; zzUSER_GUESS_DONE_HOOK(zzGuessSeqFrozen) }\r
185#define zzNON_GUESS_MODE if ( !zzguessing )\r
186#define zzGuessData \\r
187 zzjmp_buf zzguess_start; \\r
188 int zzguessing;\r
189#else\r
190#define zzGUESS_BLOCK\r
191#define zzGUESS\r
192#define zzGUESS_FAIL\r
193#define zzGUESS_DONE\r
194#define zzNON_GUESS_MODE\r
195#define zzGuessData\r
196#endif\r
197\r
198typedef struct _zzantlr_state {\r
199#ifdef ZZCAN_GUESS\r
200 zzjmp_buf guess_start;\r
201 int guessing;\r
202#endif\r
203 int asp;\r
204 int ast_sp;\r
205#ifdef ZZINF_LOOK\r
206 int inf_lap; /* not sure we need to save this one */\r
207 int inf_labase;\r
208 int inf_last;\r
209\r
210/* MR6 Gunnar Rxnning (gunnar@candleweb.no) */\r
211/* MR6 Additional state needs to be saved/restored */\r
212/* MR6 Matching changes in err.h */\r
213\r
214 int *inf_tokens; /* MR6 */\r
215 char **inf_text; /* MR6 */\r
216 char *inf_text_buffer; /* MR6 */\r
217 int *inf_line; /* MR6 */\r
218#endif\r
219#ifdef DEMAND_LOOK\r
220 int dirty;\r
221#endif\r
222\r
223#ifdef LL_K\r
224 int tokenLA[LL_K];\r
225 char textLA[LL_K][ZZLEXBUFSIZE];\r
226 int lap;\r
227 int labase;\r
228#else\r
229 int token;\r
230 char text[ZZLEXBUFSIZE];\r
231#endif\r
232#ifdef zzTRACE_RULES\r
233 int traceOptionValue; /* MR10 */\r
234 int traceGuessOptionValue; /* MR10 */\r
235 char *traceCurrentRuleName; /* MR10 */\r
236 int traceDepth; /* MR10 */\r
237#endif\r
238\r
239 } zzantlr_state;\r
240\r
241#ifdef zzTRACE_RULES\r
242extern int zzTraceOptionValueDefault;\r
243extern int zzTraceOptionValue;\r
244extern int zzTraceGuessOptionValue;\r
245extern char *zzTraceCurrentRuleName;\r
246extern int zzTraceDepth;\r
247#endif\r
248\r
249extern int zzGuessSeq; /* MR10 */\r
250extern int zzSyntaxErrCount; /* MR11 */\r
251extern int zzLexErrCount; /* MR11 */\r
252\r
253 /* I n f i n i t e L o o k a h e a d */\r
254\r
255\r
256#ifdef ZZINF_LOOK\r
257#define InfLookData \\r
258 int *zzinf_tokens; \\r
259 char **zzinf_text; \\r
260 char *zzinf_text_buffer; \\r
261 int *zzinf_line; \\r
262 int zzinf_labase; \\r
263 int zzinf_last;\r
264#else\r
265#define InfLookData\r
266#endif\r
267\r
268#ifdef ZZINF_LOOK\r
269\r
270#ifndef ZZINF_DEF_TEXT_BUFFER_SIZE\r
271#define ZZINF_DEF_TEXT_BUFFER_SIZE 20000\r
272#endif\r
273#ifndef ZZINF_DEF_TOKEN_BUFFER_SIZE\r
274#define ZZINF_DEF_TOKEN_BUFFER_SIZE 2000\r
275#endif\r
276/* WARNING!!!!!!\r
277 * ZZINF_BUFFER_TEXT_CHUNK_SIZE must be > sizeof(text) largest possible token.\r
278 */\r
279#ifndef ZZINF_BUFFER_TEXT_CHUNK_SIZE\r
280#define ZZINF_BUFFER_TEXT_CHUNK_SIZE 5000\r
281#endif\r
282#ifndef ZZINF_BUFFER_TOKEN_CHUNK_SIZE\r
283#define ZZINF_BUFFER_TOKEN_CHUNK_SIZE 1000\r
284#endif\r
285\r
286#if ZZLEXBUFSIZE > ZZINF_BUFFER_TEXT_CHUNK_SIZE\r
287#define ZZINF_BUFFER_TEXT_CHUNK_SIZE ZZLEXBUFSIZE+5\r
288#endif\r
289\r
290/* make inf_look user-access macros */\r
291#ifdef LL_K\r
292#define ZZINF_LA_VALID(i) (((zzinf_labase+i-1)-LL_K+1) <= zzinf_last)\r
293#define ZZINF_LA(i) zzinf_tokens[(zzinf_labase+i-1)-LL_K+1]\r
294#define ZZINF_LATEXT(i) zzinf_text[(zzinf_labase+i-1)-LL_K+1]\r
295/* MR6 In 1.33 vanilla the #define ZZINF_LINE(i) is was commented out */\r
296#define ZZINF_LINE(i) zzinf_line[(zzinf_labase+i-1)-LL_K+1]\r
297#else\r
298#define ZZINF_LA_VALID(i) (((zzinf_labase+i-1)) <= zzinf_last)\r
299#define ZZINF_LA(i) zzinf_tokens[(zzinf_labase+i-1)]\r
300#define ZZINF_LATEXT(i) zzinf_text[(zzinf_labase+i-1)]\r
301#endif\r
302\r
303#define inf_zzgettok _inf_zzgettok()\r
304extern void _inf_zzgettok();\r
305\r
306#endif /* ZZINF_LOOK */\r
307\r
308\r
309#ifdef LL_K\r
310\r
311#ifdef __USE_PROTOS\r
312#define ANTLR_INFO \\r
313 Attrib zzempty_attr(void) {static Attrib a; return a;} \\r
314 Attrib zzconstr_attr(int _tok, char *_text) \\r
315 {Attrib a; zzcr_attr((&a),_tok,_text); return a;} \\r
316 int zzasp=ZZA_STACKSIZE; \\r
317 char zzStackOvfMsg[]="fatal: attrib/AST stack overflow %s(%d)!\n"; \\r
318 Attrib zzaStack[ZZA_STACKSIZE]; DemandLookData \\r
319 InfLookData \\r
320 zzGuessData\r
321#else\r
322#define ANTLR_INFO \\r
323 Attrib zzempty_attr() {static Attrib a; return a;} \\r
324 Attrib zzconstr_attr(_tok, _text) int _tok; char *_text; \\r
325 {Attrib a; zzcr_attr((&a),_tok,_text); return a;} \\r
326 int zzasp=ZZA_STACKSIZE; \\r
327 char zzStackOvfMsg[]="fatal: attrib/AST stack overflow %s(%d)!\n"; \\r
328 Attrib zzaStack[ZZA_STACKSIZE]; DemandLookData \\r
329 InfLookData \\r
330 zzGuessData\r
331#endif\r
332\r
333#else\r
334\r
335#ifdef __USE_PROTOS\r
336#define ANTLR_INFO \\r
337 Attrib zzempty_attr(void) {static Attrib a; return a;} \\r
338 Attrib zzconstr_attr(int _tok, char *_text) \\r
339 {Attrib a; zzcr_attr((&a),_tok,_text); return a;} \\r
340 int zzasp=ZZA_STACKSIZE; \\r
341 char zzStackOvfMsg[]="fatal: attrib/AST stack overflow %s(%d)!\n"; \\r
342 Attrib zzaStack[ZZA_STACKSIZE]; DemandLookData \\r
343 InfLookData \\r
344 zzGuessData\r
345#else\r
346#define ANTLR_INFO \\r
347 Attrib zzempty_attr() {static Attrib a; return a;} \\r
348 Attrib zzconstr_attr(_tok, _text) int _tok; char *_text; \\r
349 {Attrib a; zzcr_attr((&a),_tok,_text); return a;} \\r
350 int zzasp=ZZA_STACKSIZE; \\r
351 char zzStackOvfMsg[]="fatal: attrib/AST stack overflow %s(%d)!\n"; \\r
352 Attrib zzaStack[ZZA_STACKSIZE]; DemandLookData \\r
353 InfLookData \\r
354 zzGuessData\r
355#endif\r
356 \r
357#endif /* LL_k */\r
358\r
359\r
360#ifdef ZZINF_LOOK\r
361\r
362#ifdef LL_K\r
363#ifdef DEMAND_LOOK\r
364#define zzPrimeLookAhead {zzdirty=LL_K; zzlap = zzlabase = 0;}\r
365#else\r
366#define zzPrimeLookAhead {zzlap = zzlabase = 0; zzfill_inf_look();\\r
367 {int _i; for(_i=1;_i<=LL_K; _i++) \\r
368 {zzCONSUME;} zzlap = zzlabase = 0;}}\r
369#endif\r
370\r
371#else /* LL_K */\r
372\r
373#ifdef DEMAND_LOOK\r
374#define zzPrimeLookAhead zzfill_inf_look(); zzdirty=1\r
375#else\r
376#define zzPrimeLookAhead zzfill_inf_look(); inf_zzgettok\r
377\r
378#endif\r
379#endif /* LL_K */\r
380\r
381#else /* ZZINF_LOOK */\r
382\r
383#ifdef LL_K\r
384#ifdef DEMAND_LOOK\r
385#define zzPrimeLookAhead {zzdirty=LL_K; zzlap = zzlabase = 0;}\r
386#else\r
387#define zzPrimeLookAhead {int _i; zzlap = 0; for(_i=1;_i<=LL_K; _i++) \\r
388 {zzCONSUME;} zzlap = 0;}\r
389#endif\r
390\r
391#else\r
392\r
393#ifdef DEMAND_LOOK\r
394#define zzPrimeLookAhead zzdirty=1\r
395#else\r
396#define zzPrimeLookAhead zzgettok()\r
397#endif\r
398#endif /* LL_K */\r
399\r
400#endif /* ZZINF_LOOK */\r
401\r
402\r
403#ifdef LL_K\r
404#define zzenterANTLRs(s) \\r
405 zzlextext = &(zztextLA[0][0]); zzrdstr( s ); zzPrimeLookAhead;\r
406#define zzenterANTLRf(f) \\r
407 zzlextext = &(zztextLA[0][0]); zzrdfunc( f ); zzPrimeLookAhead;\r
408#define zzenterANTLR(f) \\r
409 zzlextext = &(zztextLA[0][0]); zzrdstream( f ); zzPrimeLookAhead;\r
410#ifdef ZZINF_LOOK\r
411#define zzleaveANTLR(f) free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line);\r
412#define zzleaveANTLRf(f) free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line);\r
413#define zzleaveANTLRs(f) free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line);\r
414#else\r
415#define zzleaveANTLR(f)\r
416#define zzleaveANTLRf(f)\r
417#define zzleaveANTLRs(f)\r
418#endif\r
419\r
420#else\r
421\r
422#define zzenterANTLRs(s) \\r
423 {static char zztoktext[ZZLEXBUFSIZE]; \\r
424 zzlextext = zztoktext; zzrdstr( s ); zzPrimeLookAhead;}\r
425#define zzenterANTLRf(f) \\r
426 {static char zztoktext[ZZLEXBUFSIZE]; \\r
427 zzlextext = zztoktext; zzrdfunc( f ); zzPrimeLookAhead;}\r
428#define zzenterANTLR(f) \\r
429 {static char zztoktext[ZZLEXBUFSIZE]; \\r
430 zzlextext = zztoktext; zzrdstream( f ); zzPrimeLookAhead;}\r
431#ifdef ZZINF_LOOK\r
432#define zzleaveANTLR(f) free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line);\r
433#define zzleaveANTLRf(f) free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line);\r
434#define zzleaveANTLRs(f) free(zzinf_text_buffer); free(zzinf_text); free(zzinf_tokens); free(zzinf_line);\r
435#else\r
436#define zzleaveANTLR(f)\r
437#define zzleaveANTLRf(f)\r
438#define zzleaveANTLRs(f)\r
439#endif\r
440\r
441#endif\r
442\r
443/* MR19 Paul D. Smith (psmith@baynetworks.com)\r
444 Need to adjust AST stack pointer at exit.\r
445 Referenced in ANTLRx macros.\r
446*/\r
447\r
448#ifdef GENAST\r
449#define ZZAST_ADJUST ++zzast_sp;\r
450#else\r
451#define ZZAST_ADJUST\r
452#endif\r
453\r
454#define ANTLR(st, f) zzbufsize = ZZLEXBUFSIZE; \\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 ANTLRm(st, f, _m) zzbufsize = ZZLEXBUFSIZE; \\r
466 zzmode(_m); \\r
467 zzenterANTLR(f); \\r
468 { \\r
469 zzBLOCK(zztasp1); \\r
470 st; /* ++zzasp; Removed MR20 G. Hobbelt */ \\r
471 /* ZZAST_ADJUST Removed MR20 G. Hobbelt */ \\r
472 /* MR20 G. Hobbelt. Kill the top' attribute (+AST stack corr.) */ \\r
473 zzEXIT_ANTLR(zztasp1 + 1); \\r
474 } \\r
475 zzleaveANTLR(f);\r
476 \r
477#define ANTLRf(st, f) zzbufsize = ZZLEXBUFSIZE; \\r
478 zzenterANTLRf(f); \\r
479 { \\r
480 zzBLOCK(zztasp1); \\r
481 st; /* ++zzasp; Removed MR20 G. Hobbelt */ \\r
482 /* ZZAST_ADJUST Removed MR20 G. Hobbelt */ \\r
483 /* MR20 G. Hobbelt. Kill the top' attribute (+AST stack corr.) */ \\r
484 zzEXIT_ANTLR(zztasp1 + 1); \\r
485 } \\r
486 zzleaveANTLRf(f);\r
487\r
488#define ANTLRs(st, s) zzbufsize = ZZLEXBUFSIZE; \\r
489 zzenterANTLRs(s); \\r
490 { \\r
491 zzBLOCK(zztasp1); \\r
492 st; /* ++zzasp; Removed MR20 G. Hobbelt */ \\r
493 /* ZZAST_ADJUST Removed MR20 G. Hobbelt */ \\r
494 /* MR20 G. Hobbelt. Kill the top' attribute (+AST stack corr.) */ \\r
495 zzEXIT_ANTLR(zztasp1 + 1); \\r
496 } \\r
497 zzleaveANTLRs(s);\r
498\r
499#ifdef LL_K\r
500#define zztext (&(zztextLA[zzlap][0]))\r
501#else\r
502#define zztext zzlextext\r
503#endif\r
504\r
505\r
506 /* A r g u m e n t A c c e s s */\r
507\r
508#define zzaCur (zzaStack[zzasp])\r
509#define zzaRet (*zzaRetPtr)\r
510#define zzaArg(v,n) zzaStack[v-n]\r
511#define zzMakeAttr { zzNON_GUESS_MODE {zzOvfChk; --zzasp; zzcr_attr(&(zzaStack[zzasp]),LA(1),LATEXT(1));}}\r
512#ifdef zzdef0\r
513#define zzMake0 { zzOvfChk; --zzasp; zzdef0(&(zzaStack[zzasp]));}\r
514#else\r
515#define zzMake0 { zzOvfChk; --zzasp;}\r
516#endif\r
517#define zzaPush(_v) { zzOvfChk; zzaStack[--zzasp] = _v;}\r
518#ifndef zzd_attr\r
519#define zzREL(t) zzasp=(t); /* Restore state of stack */\r
520#else\r
521#define zzREL(t) for (; zzasp<(t); zzasp++) \\r
522 { zzd_attr(&(zzaStack[zzasp])); }\r
523#endif\r
524\r
525\r
526#define zzsetmatch(_es,_tokclassErrset) \\r
527 if ( !_zzsetmatch(_es, &zzBadText, &zzMissText, &zzMissTok, &zzBadTok, &zzMissSet, _tokclassErrset) ) goto fail; /* MR23 */\r
528\r
529#ifdef ZZCAN_GUESS\r
530#define zzsetmatch_wsig(_es, handler) \\r
531 if ( !_zzsetmatch_wsig(_es) ) if (zzguessing) { zzGUESS_FAIL; } else {_signal=MismatchedToken; goto handler;}\r
532#else\r
533#define zzsetmatch_wsig(_es, handler) \\r
534 if ( !_zzsetmatch_wsig(_es) ) {_signal=MismatchedToken; goto handler;}\r
535#endif\r
536\r
537#ifdef __USE_PROTOS\r
538extern int _zzsetmatch(SetWordType *, char **, char **, int *, int *, SetWordType **, SetWordType * /* MR23 */); \r
539extern int _zzsetmatch_wsig(SetWordType *);\r
540#else\r
541extern int _zzsetmatch();\r
542extern int _zzsetmatch_wsig();\r
543#endif\r
544\r
545#define zzmatch(_t) \\r
546 if ( !_zzmatch(_t, &zzBadText, &zzMissText, &zzMissTok, &zzBadTok, &zzMissSet) ) goto fail;\r
547\r
548#ifdef ZZCAN_GUESS\r
549#define zzmatch_wsig(_t,handler) \\r
550 if ( !_zzmatch_wsig(_t) ) if (zzguessing) { zzGUESS_FAIL; } else {_signal=MismatchedToken; goto handler;}\r
551#else\r
552#define zzmatch_wsig(_t,handler) \\r
553 if ( !_zzmatch_wsig(_t) ) {_signal=MismatchedToken; goto handler;}\r
554#endif\r
555\r
556#ifdef __USE_PROTOS\r
557extern int _zzmatch(int, char **, char **, int *, int *, SetWordType **);\r
558extern int _zzmatch_wsig(int);\r
559#else\r
560extern int _zzmatch();\r
561extern int _zzmatch_wsig();\r
562#endif\r
563\r
564#define zzmatch_wdfltsig(_t,_f) \\r
565 if ( !_zzmatch_wdfltsig(_t,_f) ) _signal=MismatchedToken;\r
566#define zzsetmatch_wdfltsig(tw,tt,wf) \\r
567 if ( !_zzsetmatch_wdfltsig(tw,tt,wf) ) _signal=MismatchedToken;\r
568\r
569#ifdef __USE_PROTOS\r
570extern int _zzmatch_wdfltsig(int, SetWordType *);\r
571extern int _zzsetmatch_wdfltsig(SetWordType *tokensWanted,\r
572 int tokenTypeOfSet,\r
573 SetWordType *whatFollows);\r
574#else\r
575extern int _zzmatch_wdfltsig();\r
576extern int _zzsetmatch_wdfltsig();\r
577#endif\r
578\r
579#ifdef GENAST\r
580#define zzRULE Attrib *zzaRetPtr = &(zzaStack[zzasp-1]); \\r
581 SetWordType *zzMissSet=NULL; int zzMissTok=0; \\r
582 int zzBadTok=0; char *zzBadText=""; \\r
583 int zzErrk=1,zzpf=0; \\r
584 zzTRACEdata \\r
585 char *zzMissText=""; zzASTVars\r
586#else\r
587#define zzRULE Attrib *zzaRetPtr = &(zzaStack[zzasp-1]); \\r
588 int zzBadTok=0; char *zzBadText=""; \\r
589 int zzErrk=1,zzpf=0; \\r
590 zzTRACEdata \\r
591 SetWordType *zzMissSet=NULL; int zzMissTok=0; char *zzMissText=""\r
592#endif\r
593\r
594#ifdef GENAST\r
595#define zzBLOCK(i) int i = zzasp - 1; int zztsp = zzast_sp\r
596#define zzEXIT(i) zzREL(i); zzastREL; zzNON_GUESS_MODE { zzastPush(*_root); }\r
597#define zzEXIT_ANTLR(i) zzREL(i); zzastREL /* [i_a] added as we want this for the ANTLRx() macros */\r
598#define zzLOOP(i) zzREL(i); zzastREL\r
599#else\r
600#define zzBLOCK(i) int i = zzasp - 1\r
601#define zzEXIT(i) zzREL(i)\r
602#define zzEXIT_ANTLR(i) zzREL(i) /* [i_a] added as we want this for the ANTLRx() macros */\r
603#define zzLOOP(i) zzREL(i)\r
604#endif\r
605\r
606#ifdef LL_K\r
607\r
608#ifdef DEMAND_LOOK\r
609#define LOOK(_k) {int i,stop=_k-(LL_K-zzdirty); for (i=1; i<=stop; i++) \\r
610 zzCONSUME;}\r
611#define zzCONSUME {zzgettok(); zzdirty--; \\r
612 zzlap = (zzlap+1)&(LL_K-1); \\r
613 zzlextext = &(zztextLA[zzlap][0]);}\r
614#else\r
615#ifdef ZZINF_LOOK\r
616#define zzCONSUME {inf_zzgettok; \\r
617 zzlap = (zzlap+1)&(LL_K-1); \\r
618 zzlextext = &(zztextLA[zzlap][0]); \\r
619 }\r
620#else\r
621#define zzCONSUME {zzgettok(); \\r
622 zzlap = (zzlap+1)&(LL_K-1); \\r
623 zzlextext = &(zztextLA[zzlap][0]);}\r
624#endif /* ZZINF_LOOK */\r
625#endif /* DEMAND_LOOK */\r
626\r
627#else /* LL_K */\r
628\r
629#ifdef DEMAND_LOOK\r
630#define LOOK(_k) if ( zzdirty) zzCONSUME;\r
631#ifdef ZZINF_LOOK\r
632#define zzCONSUME inf_zzgettok; zzdirty=0;\r
633#else\r
634#define zzCONSUME zzgettok(); zzdirty=0;\r
635#endif /* ZZINF_LOOK */\r
636\r
637#else /* DEMAND_LOOK */\r
638\r
639#ifdef ZZINF_LOOK\r
640#define zzCONSUME inf_zzgettok\r
641#else\r
642#define zzCONSUME zzgettok();\r
643#endif\r
644\r
645#endif /* DEMAND_LOOK */\r
646\r
647#endif /* LL_K */\r
648\r
649#ifdef LL_K\r
650#define NLA zztokenLA[zzlap&(LL_K-1)] /* --> next LA */\r
651#define NLATEXT zztextLA[zzlap&(LL_K-1)] /* --> next text of LA */\r
652#ifdef DEMAND_LOOK\r
653#define LA(i) zztokenLA[(zzlabase+(i)-1)&(LL_K-1)]\r
654#define LATEXT(i) (&(zztextLA[(zzlabase+(i)-1)&(LL_K-1)][0]))\r
655#else\r
656#define LA(i) zztokenLA[(zzlap+(i)-1)&(LL_K-1)]\r
657#define LATEXT(i) (&(zztextLA[(zzlap+(i)-1)&(LL_K-1)][0]))\r
658#endif\r
659#else\r
660#define NLA zztoken\r
661#define NLATEXT zztext\r
662#define LA(i) zztoken\r
663#define LATEXT(i) zztext\r
664#endif\r
665\r
666\r
667 /* S t a n d a r d S i g n a l s */\r
668\r
669#define NoSignal 0\r
670#define MismatchedToken 1\r
671#define NoViableAlt 2\r
672#define NoSemViableAlt 3\r
673\r
674/* MR7 Allow more control over signalling */\r
675/* by adding "Unwind" and "zzsetSignal" */\r
676\r
677#define Unwind 4\r
678#define zzsetSignal(newValue) *_retsignal=_signal=(newValue)\r
679#define zzsuppressSignal *_retsignal=_signal=0\r
680#define zzexportSignal *_retsignal=_signal\r
681\r
682 /* F u n c t i o n T r a c i n g */\r
683\r
684#ifndef zzTRACE_RULES\r
685#define zzTRACEdata\r
686#else\r
687#ifndef zzTRACEdata\r
688#define zzTRACEdata ANTLRChar *zzTracePrevRuleName = NULL;\r
689#endif\r
690#endif\r
691\r
692#ifndef zzTRACEIN\r
693#define zzTRACEIN(r) zzTracePrevRuleName=zzTraceCurrentRuleName;zzTraceIn(r);\r
694#endif\r
695#ifndef zzTRACEOUT\r
696#define zzTRACEOUT(r) zzTraceOut(r);zzTraceCurrentRuleName=zzTracePrevRuleName;\r
697#endif\r
698\r
699/* MR19 zzchar_t additions */\r
700\r
701#ifndef zzchar_t\r
702#ifdef ZZWCHAR_T\r
703#define zzchar_t wchar_t\r
704#else\r
705#define zzchar_t char\r
706#endif\r
707#endif\r
708\r
709\r
710/* MR26 */\r
711\r
712#ifdef PCCTS_USE_STDARG\r
713extern void zzFAIL(int k, ...);\r
714#else\r
715extern void zzFAIL();\r
716#endif\r
717 /* E x t e r n D e f s */\r
718\r
719#ifdef __USE_PROTOS\r
720extern Attrib zzempty_attr(void);\r
721extern Attrib zzconstr_attr(int, char *);\r
722extern void zzsyn(char *, int, char *, SetWordType *, int, int, char *);\r
723extern int zzset_el(unsigned, SetWordType *);\r
724extern int zzset_deg(SetWordType *);\r
725extern void zzedecode(SetWordType *);\r
726\r
727extern void zzresynch(SetWordType *, SetWordType);\r
728extern void zzsave_antlr_state(zzantlr_state *);\r
729extern void zzrestore_antlr_state(zzantlr_state *);\r
730extern void zzfill_inf_look(void);\r
731extern void zzconsumeUntil(SetWordType *st); /* MR7 */\r
732extern void zzconsumeUntilToken(int t); /* MR7 */\r
733extern void zzTraceIn(char * ruleName); /* MR10 */\r
734extern void zzTraceOut(char * ruleName); /* MR10 */\r
735extern int zzTraceOption(int delta); /* MR10 */\r
736extern int zzTraceGuessOption(int delta); /* MR10 */\r
737extern void zzTraceReset(void); /* MR10 */\r
738extern void zzTraceGuessFail(void); /* MR10 */\r
739#ifdef EXCEPTION_HANDLING\r
740extern void zzdflthandlers(int, int *);\r
741#endif\r
742#else\r
743extern Attrib zzempty_attr();\r
744extern Attrib zzconstr_attr();\r
745extern void zzsyn();\r
746extern int zzset_el();\r
747extern int zzset_deg();\r
748extern void zzedecode();\r
749extern void zzresynch();\r
750extern void zzsave_antlr_state();\r
751extern void zzrestore_antlr_state();\r
752extern void zzfill_inf_look();\r
753extern void zzconsumeUntil(); /* MR7 */\r
754extern void zzconsumeUntilToken(); /* MR7 */\r
755extern void zzTraceIn(); /* MR10 */\r
756extern void zzTraceOut(); /* MR10 */\r
757extern int zzTraceOption(); /* MR10 */\r
758extern int zzTraceGuessOption(); /* MR10 */\r
759extern void zzTraceReset(); /* MR10 */\r
760extern void zzTraceGuessFail(); /* MR10 */\r
761#ifdef EXCEPTION_HANDLING\r
762extern void zzdflthandlers();\r
763#endif\r
764#endif\r
765\r
766 /* G l o b a l V a r i a b l e s */\r
767\r
768/* Define a parser; user should do a "#parser myname" in their grammar file */\r
769/*extern struct pccts_parser zzparser;*/\r
770\r
771extern char *zztokens[];\r
772#ifdef LL_K\r
773extern int zztokenLA[];\r
774extern zzchar_t zztextLA[][ZZLEXBUFSIZE];\r
775extern int zzlap;\r
776extern int zzlabase;\r
777#else\r
778extern int zztoken;\r
779#endif\r
780\r
781extern char zzStackOvfMsg[];\r
782extern int zzasp;\r
783extern Attrib zzaStack[];\r
784#ifdef ZZINF_LOOK\r
785extern int *zzinf_tokens;\r
786extern char **zzinf_text;\r
787extern char *zzinf_text_buffer;\r
788extern int *zzinf_line;\r
789extern int zzinf_labase;\r
790extern int zzinf_last;\r
791#endif\r
792#ifdef DEMAND_LOOK\r
793extern int zzdirty;\r
794#endif\r
795#ifdef ZZCAN_GUESS\r
796extern int zzguessing;\r
797extern zzjmp_buf zzguess_start;\r
798#endif\r
799\r
800/* Define global veriables that refer to values exported by the scanner.\r
801 * These declarations duplicate those in dlgdef.h, but are needed\r
802 * if ANTLR is not to generate a .dlg file (-gx); PS, this is a hack.\r
803 */\r
804extern zzchar_t *zzlextext; /* text of most recently matched token */\r
805extern int zzbufsize; /* how long zzlextext is */\r
806\r
807#endif\r