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