Home | History | Annotate | Download | only in antlr
      1 <<
      2 /* parser.dlg -- DLG Description of scanner
      3  *
      4  * Generated from: antlr.g
      5  *
      6  * Terence Parr, Will Cohen, and Hank Dietz: 1989-2001
      7  * Purdue University Electrical Engineering
      8  * With AHPCRC, University of Minnesota
      9  * ANTLR Version 1.33MR33
     10  */
     11 
     12 #define ANTLR_VERSION	13333
     13 #include "pcctscfg.h"
     14 #include "pccts_stdio.h"
     15 
     16 #include "pcctscfg.h"
     17 #include "set.h"
     18 #include <ctype.h>
     19 #include "syn.h"
     20 #include "hash.h"
     21 #include "generic.h"
     22 #define zzcr_attr(attr,tok,t)
     23 #include "antlr.h"
     24 #include "tokens.h"
     25 #include "dlgdef.h"
     26 LOOKAHEAD
     27 
     28 void
     29 #ifdef __USE_PROTOS
     30 zzerraction(void)
     31 #else
     32 zzerraction()
     33 #endif
     34 {
     35 	(*zzerr)("invalid token");
     36 	zzadvance();
     37 	zzskip();
     38 }
     39 >>
     40 
     41 <<%%lexaction
     42 
     43 /* maintained, but not used for now */
     44 set AST_nodes_refd_in_actions = set_init;
     45 int inAlt = 0;
     46 set attribsRefdFromAction = set_init; /* MR20 */
     47 int UsedOldStyleAttrib = 0;
     48 int UsedNewStyleLabel = 0;
     49 #ifdef __USE_PROTOS
     50 char *inline_set(char *);
     51 #else
     52 char *inline_set();
     53 #endif
     54 
     55 /* MR1	10-Apr-97  MR1  Previously unable to put right shift operator	    */
     56 /* MR1					in DLG action			                    */
     57 
     58 int tokenActionActive=0;                                            /* MR1 */
     59 
     60   
     61 >>
     62 
     63 <<%%lexaction
     64 
     65 
     66 static char *
     67 #ifdef __USE_PROTOS
     68 getFileNameFromTheLineInfo(char *toStr, char *fromStr)
     69 #else
     70 getFileNameFromTheLineInfo(toStr, fromStr)
     71 char *toStr, *fromStr;
     72 #endif
     73 {
     74   int i, j, k;
     75   
     76   if (!fromStr || !toStr) return toStr;
     77   
     78   /* find the first " */
     79   
     80   for (i=0;
     81   (i<MaxFileName) &&
     82   (fromStr[i] != '\n') &&
     83   (fromStr[i] != '\r') &&
     84   (fromStr[i] != '\"');
     85   i++) /* nothing */ ;
     86   
     87   if ( (i == MaxFileName) ||
     88   (fromStr[i] == '\n') ||
     89   (fromStr[i] == '\r') ) {
     90   return toStr;
     91 }
     92 
     93   /* find the second " */
     94 
     95   for (j=i+1;
     96 (j<MaxFileName) &&
     97 (fromStr[j] != '\n') &&
     98 (fromStr[j] != '\r') &&
     99 (fromStr[j] != '\"');
    100 j++) /* nothing */ ;
    101 
    102   if ((j == MaxFileName) ||
    103 (fromStr[j] == '\n') ||
    104 (fromStr[j] == '\r') ) {
    105   return toStr;
    106 }
    107 
    108   /* go back until the last / or \ */
    109 
    110   for (k=j-1;
    111 (fromStr[k] != '\"') &&
    112 (fromStr[k] != '/') &&
    113 (fromStr[k] != '\\');
    114 k--) /* nothing */ ;
    115 
    116   /* copy the string after " / or \ into toStr */
    117 
    118   for (i=k+1; fromStr[i] != '\"'; i++) {
    119 toStr[i-k-1] = fromStr[i];
    120 }
    121 
    122   toStr[i-k-1] = '\0';
    123 
    124   return toStr;
    125 }
    126 
    127 /* MR14 end of a block to support #line in antlr source code */
    128 
    129   
    130 >>
    131 
    132 <<%%lexaction
    133 
    134 #ifdef __USE_PROTOS
    135 void mark_label_used_in_sem_pred(LabelEntry *le)              /* MR10 */
    136 #else
    137 void mark_label_used_in_sem_pred(le)                          /* MR10 */
    138 LabelEntry    *le;
    139 #endif
    140 {
    141   TokNode   *tn;
    142   require (le->elem->ntype == nToken,"mark_label_used... ntype != nToken");
    143   tn=(TokNode *)le->elem;
    144   require (tn->label != 0,"mark_label_used... TokNode has no label");
    145   tn->label_used_in_semantic_pred=1;
    146 }
    147 >>
    148 
    149 
    150 %%START
    151 
    152 @
    153 	<<
    154 		NLA = Eof;
    155     /* L o o k  F o r  A n o t h e r  F i l e */
    156     {
    157       FILE *new_input;
    158       new_input = NextFile();
    159       if ( new_input == NULL ) { NLA=Eof; return; }
    160       fclose( input );
    161       input = new_input;
    162       zzrdstream( input );
    163       zzskip();	/* Skip the Eof (@) char i.e continue */
    164     }
    165 	>>
    166 
    167 [\t\ ]+
    168 	<<
    169 		NLA = 76;
    170     zzskip();   
    171 	>>
    172 
    173 \n|\r|\r\n
    174 	<<
    175 		NLA = 77;
    176     zzline++; zzskip();   
    177 	>>
    178 
    179 \[
    180 	<<
    181 		NLA = 78;
    182     zzmode(ACTIONS); zzmore();
    183     istackreset();
    184     pushint(']');   
    185 	>>
    186 
    187 \<\<
    188 	<<
    189 		NLA = 79;
    190     action_file=CurFile; action_line=zzline;
    191     zzmode(ACTIONS); zzmore();
    192     list_free(&CurActionLabels,0);       /* MR10 */
    193     numericActionLabel=0;                /* MR10 */
    194     istackreset();
    195     pushint('>');   
    196 	>>
    197 
    198 \"
    199 	<<
    200 		NLA = 80;
    201     zzmode(STRINGS); zzmore();   
    202 	>>
    203 
    204 /\*
    205 	<<
    206 		NLA = 81;
    207     zzmode(COMMENTS); zzskip();   
    208 	>>
    209 
    210 \*/
    211 	<<
    212 		NLA = 82;
    213     warn("Missing /*; found dangling */"); zzskip();   
    214 	>>
    215 
    216 //
    217 	<<
    218 		NLA = 83;
    219     zzmode(CPP_COMMENTS); zzskip();   
    220 	>>
    221 
    222 #line[\ \t]* [0-9]+ {[\ \t]* \"~[\"]+\" ([\ \t]* [0-9]*)* } (\n|\r|\r\n)
    223 	<<
    224 		NLA = 84;
    225     
    226     zzline = atoi(zzbegexpr+5) - 1; zzline++; zzmore();
    227     getFileNameFromTheLineInfo(FileStr[CurFile], zzbegexpr);
    228 	>>
    229 
    230 #line ~[\n\r]* (\n|\r|\r\n)
    231 	<<
    232 		NLA = 85;
    233     
    234     zzline++; zzmore();
    235 	>>
    236 
    237 \>\>
    238 	<<
    239 		NLA = 86;
    240     warn("Missing <<; found dangling \>\>"); zzskip();   
    241 	>>
    242 
    243 .
    244 	<<
    245 		NLA = WildCard;
    246 	>>
    247 
    248 \@
    249 	<<
    250 		NLA = 88;
    251     FoundException = 1;		/* MR6 */
    252     FoundAtOperator = 1;  
    253 	>>
    254 
    255 {\\}#pragma
    256 	<<
    257 		NLA = Pragma;
    258 	>>
    259 
    260 {\\}#FirstSetSymbol
    261 	<<
    262 		NLA = FirstSetSymbol;
    263 	>>
    264 
    265 {\\}#header
    266 	<<
    267 		NLA = 94;
    268 	>>
    269 
    270 {\\}#first
    271 	<<
    272 		NLA = 95;
    273 	>>
    274 
    275 {\\}#parser
    276 	<<
    277 		NLA = 96;
    278 	>>
    279 
    280 {\\}#tokdefs
    281 	<<
    282 		NLA = 97;
    283 	>>
    284 
    285 \}
    286 	<<
    287 		NLA = 98;
    288 	>>
    289 
    290 class
    291 	<<
    292 		NLA = 99;
    293 	>>
    294 
    295 \{
    296 	<<
    297 		NLA = 102;
    298 	>>
    299 
    300 !
    301 	<<
    302 		NLA = 103;
    303 	>>
    304 
    305 \<
    306 	<<
    307 		NLA = 104;
    308 	>>
    309 
    310 \>
    311 	<<
    312 		NLA = 105;
    313 	>>
    314 
    315 :
    316 	<<
    317 		NLA = 106;
    318 	>>
    319 
    320 ;
    321 	<<
    322 		NLA = 107;
    323 	>>
    324 
    325 {\\}#lexaction
    326 	<<
    327 		NLA = 108;
    328 	>>
    329 
    330 {\\}#lexmember
    331 	<<
    332 		NLA = 109;
    333 	>>
    334 
    335 {\\}#lexprefix
    336 	<<
    337 		NLA = 110;
    338 	>>
    339 
    340 {\\}#pred
    341 	<<
    342 		NLA = 111;
    343 	>>
    344 
    345 \|\|
    346 	<<
    347 		NLA = 112;
    348 	>>
    349 
    350 &&
    351 	<<
    352 		NLA = 113;
    353 	>>
    354 
    355 \(
    356 	<<
    357 		NLA = 114;
    358 	>>
    359 
    360 \)
    361 	<<
    362 		NLA = 115;
    363 	>>
    364 
    365 {\\}#lexclass
    366 	<<
    367 		NLA = 116;
    368 	>>
    369 
    370 {\\}#errclass
    371 	<<
    372 		NLA = 117;
    373 	>>
    374 
    375 {\\}#tokclass
    376 	<<
    377 		NLA = 118;
    378 	>>
    379 
    380 ..
    381 	<<
    382 		NLA = 119;
    383 	>>
    384 
    385 {\\}#token
    386 	<<
    387 		NLA = 120;
    388 	>>
    389 
    390 =
    391 	<<
    392 		NLA = 121;
    393 	>>
    394 
    395 [0-9]+
    396 	<<
    397 		NLA = 122;
    398 	>>
    399 
    400 \|
    401 	<<
    402 		NLA = 123;
    403 	>>
    404 
    405 \~
    406 	<<
    407 		NLA = 124;
    408 	>>
    409 
    410 ^
    411 	<<
    412 		NLA = 125;
    413 	>>
    414 
    415 approx
    416 	<<
    417 		NLA = 126;
    418 	>>
    419 
    420 LL\(1\)
    421 	<<
    422 		NLA = 127;
    423 	>>
    424 
    425 LL\(2\)
    426 	<<
    427 		NLA = 128;
    428 	>>
    429 
    430 \*
    431 	<<
    432 		NLA = 129;
    433 	>>
    434 
    435 \+
    436 	<<
    437 		NLA = 130;
    438 	>>
    439 
    440 ?
    441 	<<
    442 		NLA = 131;
    443 	>>
    444 
    445 =>
    446 	<<
    447 		NLA = 132;
    448 	>>
    449 
    450 exception
    451 	<<
    452 		NLA = 133;
    453 	>>
    454 
    455 default
    456 	<<
    457 		NLA = 134;
    458 	>>
    459 
    460 catch
    461 	<<
    462 		NLA = 135;
    463 	>>
    464 
    465 [a-z] [A-Za-z0-9_]*
    466 	<<
    467 		NLA = NonTerminal;
    468     
    469     while ( zzchar==' ' || zzchar=='\t' ) {
    470       zzadvance();
    471     }
    472     if ( zzchar == ':' && inAlt ) NLA = LABEL;
    473 	>>
    474 
    475 [A-Z] [A-Za-z0-9_]*
    476 	<<
    477 		NLA = TokenTerm;
    478     
    479     while ( zzchar==' ' || zzchar=='\t' ) {
    480       zzadvance();
    481     }
    482     if ( zzchar == ':' && inAlt ) NLA = LABEL;
    483 	>>
    484 
    485 {\\}#[A-Za-z0-9_]*
    486 	<<
    487 		NLA = 136;
    488     warn(eMsg1("unknown meta-op: %s",LATEXT(1))); zzskip();   
    489 	>>
    490 
    491 
    492 %%STRINGS
    493 
    494 @
    495 	<<
    496 		NLA = Eof;
    497 	>>
    498 
    499 \"
    500 	<<
    501 		NLA = QuotedTerm;
    502     zzmode(START);   
    503 	>>
    504 
    505 \n|\r|\r\n
    506 	<<
    507 		NLA = 3;
    508     
    509     zzline++;
    510     warn("eoln found in string");
    511     zzskip();
    512 	>>
    513 
    514 \\(\n|\r|\r\n)
    515 	<<
    516 		NLA = 4;
    517     zzline++; zzmore();   
    518 	>>
    519 
    520 \\~[]
    521 	<<
    522 		NLA = 5;
    523     zzmore();   
    524 	>>
    525 
    526 ~[\n\r\"\\]+
    527 	<<
    528 		NLA = 6;
    529     zzmore();   
    530 	>>
    531 
    532 
    533 %%ACTION_STRINGS
    534 
    535 @
    536 	<<
    537 		NLA = Eof;
    538 	>>
    539 
    540 \"
    541 	<<
    542 		NLA = 7;
    543     zzmode(ACTIONS); zzmore();   
    544 	>>
    545 
    546 \n|\r|\r\n
    547 	<<
    548 		NLA = 8;
    549     
    550     zzline++;
    551     warn("eoln found in string (in user action)");
    552     zzskip();
    553 	>>
    554 
    555 \\(\n|\r|\r\n)
    556 	<<
    557 		NLA = 9;
    558     zzline++; zzmore();   
    559 	>>
    560 
    561 \\~[]
    562 	<<
    563 		NLA = 10;
    564     zzmore();   
    565 	>>
    566 
    567 ~[\n\r\"\\]+
    568 	<<
    569 		NLA = 11;
    570     zzmore();   
    571 	>>
    572 
    573 
    574 %%ACTION_CHARS
    575 
    576 @
    577 	<<
    578 		NLA = Eof;
    579 	>>
    580 
    581 '
    582 	<<
    583 		NLA = 12;
    584     zzmode(ACTIONS); zzmore();   
    585 	>>
    586 
    587 \n|\r|\r\n
    588 	<<
    589 		NLA = 13;
    590     
    591     zzline++;
    592     warn("eoln found in char literal (in user action)");
    593     zzskip();
    594 	>>
    595 
    596 \\~[]
    597 	<<
    598 		NLA = 14;
    599     zzmore();   
    600 	>>
    601 
    602 ~[\n\r'\\]+
    603 	<<
    604 		NLA = 15;
    605     zzmore();   
    606 	>>
    607 
    608 
    609 %%ACTION_COMMENTS
    610 
    611 @
    612 	<<
    613 		NLA = Eof;
    614 	>>
    615 
    616 \*/
    617 	<<
    618 		NLA = 16;
    619     zzmode(ACTIONS); zzmore();   
    620 	>>
    621 
    622 \*
    623 	<<
    624 		NLA = 17;
    625     zzmore();   
    626 	>>
    627 
    628 \n|\r|\r\n
    629 	<<
    630 		NLA = 18;
    631     zzline++; zzmore(); DAWDLE;   
    632 	>>
    633 
    634 ~[\n\r\*]+
    635 	<<
    636 		NLA = 19;
    637     zzmore();   
    638 	>>
    639 
    640 
    641 %%TOK_DEF_COMMENTS
    642 
    643 @
    644 	<<
    645 		NLA = Eof;
    646 	>>
    647 
    648 \*/
    649 	<<
    650 		NLA = 20;
    651     zzmode(PARSE_ENUM_FILE);
    652     zzmore();   
    653 	>>
    654 
    655 \*
    656 	<<
    657 		NLA = 21;
    658     zzmore();   
    659 	>>
    660 
    661 \n|\r|\r\n
    662 	<<
    663 		NLA = 22;
    664     zzline++; zzmore(); DAWDLE;   
    665 	>>
    666 
    667 ~[\n\r\*]+
    668 	<<
    669 		NLA = 23;
    670     zzmore();   
    671 	>>
    672 
    673 
    674 %%TOK_DEF_CPP_COMMENTS
    675 
    676 @
    677 	<<
    678 		NLA = Eof;
    679 	>>
    680 
    681 \n|\r|\r\n
    682 	<<
    683 		NLA = 24;
    684     zzline++; zzmode(PARSE_ENUM_FILE); zzskip(); DAWDLE;   
    685 	>>
    686 
    687 ~[\n\r]+
    688 	<<
    689 		NLA = 25;
    690     zzskip();   
    691 	>>
    692 
    693 
    694 %%ACTION_CPP_COMMENTS
    695 
    696 @
    697 	<<
    698 		NLA = Eof;
    699 	>>
    700 
    701 \n|\r|\r\n
    702 	<<
    703 		NLA = 26;
    704     zzline++; zzmode(ACTIONS); zzmore(); DAWDLE;   
    705 	>>
    706 
    707 ~[\n\r]+
    708 	<<
    709 		NLA = 27;
    710     zzmore();   
    711 	>>
    712 
    713 
    714 %%CPP_COMMENTS
    715 
    716 @
    717 	<<
    718 		NLA = Eof;
    719 	>>
    720 
    721 \n|\r|\r\n
    722 	<<
    723 		NLA = 28;
    724     zzline++; zzmode(START); zzskip(); DAWDLE;   
    725 	>>
    726 
    727 ~[\n\r]+
    728 	<<
    729 		NLA = 29;
    730     zzskip();   
    731 	>>
    732 
    733 
    734 %%COMMENTS
    735 
    736 @
    737 	<<
    738 		NLA = Eof;
    739 	>>
    740 
    741 \*/
    742 	<<
    743 		NLA = 30;
    744     zzmode(START); zzskip();   
    745 	>>
    746 
    747 \*
    748 	<<
    749 		NLA = 31;
    750     zzskip();   
    751 	>>
    752 
    753 \n|\r|\r\n
    754 	<<
    755 		NLA = 32;
    756     zzline++; zzskip(); DAWDLE;   
    757 	>>
    758 
    759 ~[\n\r\*]+
    760 	<<
    761 		NLA = 33;
    762     zzskip();   
    763 	>>
    764 
    765 
    766 %%ACTIONS
    767 
    768 @
    769 	<<
    770 		NLA = Eof;
    771 	>>
    772 
    773 \>\>
    774 	<<
    775 		NLA = Action;
    776     /* these do not nest */
    777     zzmode(START);
    778     NLATEXT[0] = ' ';
    779     NLATEXT[1] = ' ';
    780     zzbegexpr[0] = ' ';
    781     zzbegexpr[1] = ' ';
    782     if ( zzbufovf ) {
    783       err( eMsgd("action buffer overflow; size %d",ZZLEXBUFSIZE));
    784     }
    785     
    786 /* MR1	10-Apr-97  MR1  Previously unable to put right shift operator	*/
    787     /* MR1					in DLG action			*/
    788     /* MR1			Doesn't matter what kind of action it is - reset*/
    789     
    790 			      tokenActionActive=0;		 /* MR1 */
    791 	>>
    792 
    793 \>\>?
    794 	<<
    795 		NLA = Pred;
    796     /* these do not nest */
    797     zzmode(START);
    798     NLATEXT[0] = ' ';
    799     NLATEXT[1] = ' ';
    800     zzbegexpr[0] = '\0';
    801     if ( zzbufovf ) {
    802       err( eMsgd("predicate buffer overflow; size %d",ZZLEXBUFSIZE));
    803     };
    804 #ifdef __cplusplus__
    805     /* MR10 */                    list_apply(CurActionLabels, (void (*)(void *))mark_label_used_in_sem_pred);
    806 #else
    807 #ifdef __STDC__
    808     /* MR10 */                    list_apply(CurActionLabels, (void (*)(void *))mark_label_used_in_sem_pred);
    809 #else
    810 #ifdef __USE_PROTOS
    811     /* MRxx */                    list_apply(CurActionLabels, (void (*)(void *))mark_label_used_in_sem_pred);
    812 #else
    813     /* MR10 */                    list_apply(CurActionLabels,mark_label_used_in_sem_pred);
    814 #endif
    815 #endif
    816 #endif
    817 	>>
    818 
    819 \]
    820 	<<
    821 		NLA = PassAction;
    822     if ( topint() == ']' ) {
    823       popint();
    824       if ( istackempty() )	/* terminate action */
    825       {
    826         zzmode(START);
    827         NLATEXT[0] = ' ';
    828         zzbegexpr[0] = ' ';
    829         if ( zzbufovf ) {
    830           err( eMsgd("parameter buffer overflow; size %d",ZZLEXBUFSIZE));
    831         }
    832       }
    833       else {
    834         /* terminate $[..] and #[..] */
    835         if ( GenCC ) zzreplstr("))");
    836         else zzreplstr(")");
    837         zzmore();
    838       }
    839     }
    840     else if ( topint() == '|' ) { /* end of simple [...] */
    841       popint();
    842       zzmore();
    843     }
    844     else zzmore();
    845 	>>
    846 
    847 consumeUntil\( [\ \t]* \{~[\}]+\} [\ \t]* \)
    848 	<<
    849 		NLA = 37;
    850     
    851     zzmore();
    852     zzreplstr(inline_set(zzbegexpr+
    853     strlen("consumeUntil(")));
    854 	>>
    855 
    856 consumeUntil\( ~[\)]+ \)
    857 	<<
    858 		NLA = 38;
    859     zzmore();   
    860 	>>
    861 
    862 \n|\r|\r\n
    863 	<<
    864 		NLA = 39;
    865     zzline++; zzmore(); DAWDLE;   
    866 	>>
    867 
    868 \>
    869 	<<
    870 		NLA = 40;
    871     zzmore();   
    872 	>>
    873 
    874 $
    875 	<<
    876 		NLA = 41;
    877     zzmore();   
    878 	>>
    879 
    880 $$
    881 	<<
    882 		NLA = 42;
    883     if ( !GenCC ) {zzreplstr("zzaRet"); zzmore();}
    884     else err("$$ use invalid in C++ mode");   
    885 	>>
    886 
    887 $\[\]
    888 	<<
    889 		NLA = 43;
    890     if ( !GenCC ) {zzreplstr("zzempty_attr"); zzmore();}
    891     else err("$[] use invalid in C++ mode");   
    892 	>>
    893 
    894 $\[
    895 	<<
    896 		NLA = 44;
    897     
    898     pushint(']');
    899     if ( !GenCC ) zzreplstr("zzconstr_attr(");
    900     else err("$[..] use invalid in C++ mode");
    901     zzmore();
    902 	>>
    903 
    904 $[0-9]+
    905 	<<
    906 		NLA = 45;
    907     {
    908       static char buf[100];
    909       numericActionLabel=1;       /* MR10 */
    910       if ( strlen(zzbegexpr)>(size_t)85 )
    911       fatal("$i attrib ref too big");
    912       set_orel(atoi(zzbegexpr+1), &attribsRefdFromAction);
    913       if ( !GenCC ) sprintf(buf,"zzaArg(zztasp%d,%s)",
    914       BlkLevel-1,zzbegexpr+1);
    915       else sprintf(buf,"_t%d%s",
    916       BlkLevel-1,zzbegexpr+1);
    917       zzreplstr(buf);
    918       zzmore();
    919       UsedOldStyleAttrib = 1;
    920       if ( UsedNewStyleLabel )
    921       err("cannot mix old-style $i with new-style labels");
    922     }
    923 	>>
    924 
    925 $[0-9]+.
    926 	<<
    927 		NLA = 46;
    928     {
    929       static char buf[100];
    930       numericActionLabel=1;       /* MR10 */
    931       if ( strlen(zzbegexpr)>(size_t)85 )
    932       fatal("$i.field attrib ref too big");
    933       zzbegexpr[strlen(zzbegexpr)-1] = ' ';
    934       set_orel(atoi(zzbegexpr+1), &attribsRefdFromAction);
    935       if ( !GenCC ) sprintf(buf,"zzaArg(zztasp%d,%s).",
    936       BlkLevel-1,zzbegexpr+1);
    937       else sprintf(buf,"_t%d%s.",
    938       BlkLevel-1,zzbegexpr+1);
    939       zzreplstr(buf);
    940       zzmore();
    941       UsedOldStyleAttrib = 1;
    942       if ( UsedNewStyleLabel )
    943       err("cannot mix old-style $i with new-style labels");
    944     }
    945 	>>
    946 
    947 $[0-9]+.[0-9]+
    948 	<<
    949 		NLA = 47;
    950     {
    951       static char buf[100];
    952       static char i[20], j[20];
    953       char *p,*q;
    954       numericActionLabel=1;       /* MR10 */
    955       if (strlen(zzbegexpr)>(size_t)85) fatal("$i.j attrib ref too big");
    956       for (p=zzbegexpr+1,q= &i[0]; *p!='.'; p++) {
    957         if ( q == &i[20] )
    958         fatalFL("i of $i.j attrib ref too big",
    959         FileStr[CurFile], zzline );
    960         *q++ = *p;
    961       }
    962       *q = '\0';
    963       for (p++, q= &j[0]; *p!='\0'; p++) {
    964         if ( q == &j[20] )
    965         fatalFL("j of $i.j attrib ref too big",
    966         FileStr[CurFile], zzline );
    967         *q++ = *p;
    968       }
    969       *q = '\0';
    970       if ( !GenCC ) sprintf(buf,"zzaArg(zztasp%s,%s)",i,j);
    971       else sprintf(buf,"_t%s%s",i,j);
    972       zzreplstr(buf);
    973       zzmore();
    974       UsedOldStyleAttrib = 1;
    975       if ( UsedNewStyleLabel )
    976       err("cannot mix old-style $i with new-style labels");
    977     }
    978 	>>
    979 
    980 $[_a-zA-Z][_a-zA-Z0-9]*
    981 	<<
    982 		NLA = 48;
    983     { static char buf[300]; LabelEntry *el;
    984       zzbegexpr[0] = ' ';
    985       if ( CurRule != NULL &&
    986       strcmp(CurRule, &zzbegexpr[1])==0 ) {
    987         if ( !GenCC ) zzreplstr("zzaRet");
    988       }
    989       else if ( CurRetDef != NULL &&
    990       strmember(CurRetDef, &zzbegexpr[1])) {
    991         if ( hasMultipleOperands( CurRetDef ) ) {
    992           require (strlen(zzbegexpr)<=(size_t)285,
    993           "$retval attrib ref too big");
    994           sprintf(buf,"_retv.%s",&zzbegexpr[1]);
    995           zzreplstr(buf);
    996         }
    997         else zzreplstr("_retv");
    998       }
    999       else if ( CurParmDef != NULL &&
   1000       strmember(CurParmDef, &zzbegexpr[1])) {
   1001       ;
   1002     }
   1003     else if ( Elabel==NULL ) {
   1004     { err("$-variables in actions outside of rules are not allowed"); }
   1005   } else if ( (el=(LabelEntry *)hash_get(Elabel, &zzbegexpr[1]))!=NULL ) {
   1006   /* MR10 */
   1007   /* MR10 */                      /* element labels might exist without an elem when */
   1008   /* MR10 */                      /*  it is a forward reference (to a rule)          */
   1009   /* MR10 */
   1010   /* MR10 */						if ( GenCC && (el->elem == NULL || el->elem->ntype==nRuleRef) )
   1011   /* MR10 */							{ err(eMsg1("There are no token ptrs for rule references: '$%s'",&zzbegexpr[1])); }
   1012   /* MR10 */
   1013   /* MR10 */						if ( !GenCC && (el->elem == NULL || el->elem->ntype==nRuleRef) && GenAST) {
   1014   /* MR10 */                          err("You can no longer use attributes returned by rules when also using ASTs");
   1015   /* MR10 */                          err("   Use upward inheritance (\"rule >[Attrib a] : ... <<$a=...\>\>\")");
   1016   /* MR10 */                      };
   1017   /* MR10 */
   1018   /* MR10 */                      /* keep track of <<... $label ...>> for semantic predicates in guess mode */
   1019   /* MR10 */                      /* element labels contain pointer to the owners node                      */
   1020   /* MR10 */
   1021   /* MR10 */                      if (el->elem != NULL && el->elem->ntype == nToken) {
   1022   /* MR10 */                        list_add(&CurActionLabels,el);
   1023   /* MR10 */                      };
   1024 }
   1025 else
   1026 warn(eMsg1("$%s not parameter, return value, (defined) element label",&zzbegexpr[1]));
   1027 }
   1028 zzmore();
   1029 	>>
   1030 
   1031 #0
   1032 	<<
   1033 		NLA = 49;
   1034     zzreplstr("(*_root)"); zzmore(); chkGTFlag();   
   1035 	>>
   1036 
   1037 #\[\]
   1038 	<<
   1039 		NLA = 50;
   1040     if ( GenCC ) {
   1041       if (NewAST) zzreplstr("(newAST)");
   1042       else zzreplstr("(new AST)");}
   1043     else {zzreplstr("zzastnew()");} zzmore();
   1044     chkGTFlag();
   1045 	>>
   1046 
   1047 #\(\)
   1048 	<<
   1049 		NLA = 51;
   1050     zzreplstr("NULL"); zzmore(); chkGTFlag();   
   1051 	>>
   1052 
   1053 #[0-9]+
   1054 	<<
   1055 		NLA = 52;
   1056     {
   1057       static char buf[100];
   1058       if ( strlen(zzbegexpr)>(size_t)85 )
   1059       fatal("#i AST ref too big");
   1060       if ( GenCC ) sprintf(buf,"_ast%d%s",BlkLevel-1,zzbegexpr+1);
   1061       else sprintf(buf,"zzastArg(%s)",zzbegexpr+1);
   1062       zzreplstr(buf);
   1063       zzmore();
   1064       set_orel(atoi(zzbegexpr+1), &AST_nodes_refd_in_actions);
   1065       chkGTFlag();
   1066     }
   1067 	>>
   1068 
   1069 #line[\ \t]* [0-9]+ {[\ \t]* \"~[\"]+\" ([\ \t]* [0-9]*)* } (\n|\r|\r\n)
   1070 	<<
   1071 		NLA = 53;
   1072     
   1073     zzline = atoi(zzbegexpr+5) - 1; zzline++; zzmore();
   1074     getFileNameFromTheLineInfo(FileStr[CurFile], zzbegexpr);
   1075 	>>
   1076 
   1077 #line ~[\n\r]* (\n|\r|\r\n)
   1078 	<<
   1079 		NLA = 54;
   1080     
   1081     zzline++; zzmore();
   1082 	>>
   1083 
   1084 #[_a-zA-Z][_a-zA-Z0-9]*
   1085 	<<
   1086 		NLA = 55;
   1087     
   1088     if ( !(strcmp(zzbegexpr, "#ifdef")==0 ||
   1089     strcmp(zzbegexpr, "#if")==0 ||
   1090     strcmp(zzbegexpr, "#else")==0 ||
   1091     strcmp(zzbegexpr, "#endif")==0 ||
   1092     strcmp(zzbegexpr, "#ifndef")==0 ||
   1093     strcmp(zzbegexpr, "#define")==0 ||
   1094     strcmp(zzbegexpr, "#pragma")==0 ||
   1095     strcmp(zzbegexpr, "#undef")==0 ||
   1096     strcmp(zzbegexpr, "#import")==0 ||
   1097     strcmp(zzbegexpr, "#line")==0 ||
   1098     strcmp(zzbegexpr, "#include")==0 ||
   1099     strcmp(zzbegexpr, "#error")==0) )
   1100     {
   1101       static char buf[100];
   1102       sprintf(buf, "%s_ast", zzbegexpr+1);
   1103       /* MR27 */						list_add(&CurAstLabelsInActions, mystrdup(zzbegexpr+1));
   1104       zzreplstr(buf);
   1105       chkGTFlag();
   1106     }
   1107     zzmore();
   1108 	>>
   1109 
   1110 #\[
   1111 	<<
   1112 		NLA = 56;
   1113     
   1114     pushint(']');
   1115     if ( GenCC ) {
   1116       if (NewAST) zzreplstr("(newAST(");
   1117       else zzreplstr("(new AST("); }
   1118     else zzreplstr("zzmk_ast(zzastnew(),");
   1119     zzmore();
   1120     chkGTFlag();
   1121 	>>
   1122 
   1123 #\(
   1124 	<<
   1125 		NLA = 57;
   1126     
   1127     pushint('}');
   1128     if ( GenCC ) {
   1129       if (tmakeInParser) {
   1130         zzreplstr("tmake(");
   1131       }
   1132       else {
   1133         zzreplstr("ASTBase::tmake(");
   1134       }
   1135     }
   1136     else {
   1137       zzreplstr("zztmake(");
   1138     }
   1139     zzmore();
   1140     chkGTFlag();
   1141 	>>
   1142 
   1143 #
   1144 	<<
   1145 		NLA = 58;
   1146     zzmore();   
   1147 	>>
   1148 
   1149 \)
   1150 	<<
   1151 		NLA = 59;
   1152     
   1153     if ( istackempty() )
   1154     zzmore();
   1155     else if ( topint()==')' ) {
   1156       popint();
   1157     }
   1158     else if ( topint()=='}' ) {
   1159       popint();
   1160       /* terminate #(..) */
   1161       zzreplstr(", NULL)");
   1162     }
   1163     zzmore();
   1164 	>>
   1165 
   1166 \[
   1167 	<<
   1168 		NLA = 60;
   1169     
   1170     pushint('|');	/* look for '|' to terminate simple [...] */
   1171     zzmore();
   1172 	>>
   1173 
   1174 \(
   1175 	<<
   1176 		NLA = 61;
   1177     
   1178     pushint(')');
   1179     zzmore();
   1180 	>>
   1181 
   1182 \\\]
   1183 	<<
   1184 		NLA = 62;
   1185     zzreplstr("]");  zzmore();   
   1186 	>>
   1187 
   1188 \\\)
   1189 	<<
   1190 		NLA = 63;
   1191     zzreplstr(")");  zzmore();   
   1192 	>>
   1193 
   1194 \\>
   1195 	<<
   1196 		NLA = 64;
   1197     if (! tokenActionActive) zzreplstr(">");	 /* MR1 */
   1198     zzmore();				         /* MR1 */
   1199 	>>
   1200 
   1201 '
   1202 	<<
   1203 		NLA = 65;
   1204     zzmode(ACTION_CHARS); zzmore();  
   1205 	>>
   1206 
   1207 \"
   1208 	<<
   1209 		NLA = 66;
   1210     zzmode(ACTION_STRINGS); zzmore();  
   1211 	>>
   1212 
   1213 \\$
   1214 	<<
   1215 		NLA = 67;
   1216     zzreplstr("$");  zzmore();   
   1217 	>>
   1218 
   1219 \\#
   1220 	<<
   1221 		NLA = 68;
   1222     zzreplstr("#");  zzmore();   
   1223 	>>
   1224 
   1225 \\(\n|\r|\r\n)
   1226 	<<
   1227 		NLA = 69;
   1228     zzline++; zzmore();   
   1229 	>>
   1230 
   1231 \\~[\]\)>$#]
   1232 	<<
   1233 		NLA = 70;
   1234     zzmore();   
   1235 	>>
   1236 
   1237 /
   1238 	<<
   1239 		NLA = 71;
   1240     zzmore();   
   1241 	>>
   1242 
   1243 /\*
   1244 	<<
   1245 		NLA = 72;
   1246     zzmode(ACTION_COMMENTS); zzmore();   
   1247 	>>
   1248 
   1249 \*/
   1250 	<<
   1251 		NLA = 73;
   1252     warn("Missing /*; found dangling */ in action"); zzmore();   
   1253 	>>
   1254 
   1255 //
   1256 	<<
   1257 		NLA = 74;
   1258     zzmode(ACTION_CPP_COMMENTS); zzmore();   
   1259 	>>
   1260 
   1261 ~[\n\r\)\(\\$#\>\]\[\"'/]+
   1262 	<<
   1263 		NLA = 75;
   1264     zzmore();   
   1265 	>>
   1266 
   1267 
   1268 %%PARSE_ENUM_FILE
   1269 
   1270 @
   1271 	<<
   1272 		NLA = Eof;
   1273     ;   
   1274 	>>
   1275 
   1276 [\t\ ]+
   1277 	<<
   1278 		NLA = 137;
   1279     zzskip();   
   1280 	>>
   1281 
   1282 \n|\r|\r\n
   1283 	<<
   1284 		NLA = 138;
   1285     zzline++; zzskip();   
   1286 	>>
   1287 
   1288 //
   1289 	<<
   1290 		NLA = 139;
   1291     zzmode(TOK_DEF_CPP_COMMENTS); zzmore();   
   1292 	>>
   1293 
   1294 /\*
   1295 	<<
   1296 		NLA = 140;
   1297     zzmode(TOK_DEF_COMMENTS); zzskip();   
   1298 	>>
   1299 
   1300 #ifdef
   1301 	<<
   1302 		NLA = 141;
   1303     zzmode(TOK_DEF_CPP_COMMENTS); zzskip();   
   1304 	>>
   1305 
   1306 #if
   1307 	<<
   1308 		NLA = 142;
   1309     zzmode(TOK_DEF_CPP_COMMENTS); zzskip();   
   1310 	>>
   1311 
   1312 #ifndef
   1313 	<<
   1314 		NLA = 143;
   1315     ;   
   1316 	>>
   1317 
   1318 #else
   1319 	<<
   1320 		NLA = 144;
   1321     zzmode(TOK_DEF_CPP_COMMENTS); zzskip();   
   1322 	>>
   1323 
   1324 #endif
   1325 	<<
   1326 		NLA = 145;
   1327     zzmode(TOK_DEF_CPP_COMMENTS); zzskip();   
   1328 	>>
   1329 
   1330 #undef
   1331 	<<
   1332 		NLA = 146;
   1333     zzmode(TOK_DEF_CPP_COMMENTS); zzskip();   
   1334 	>>
   1335 
   1336 #import
   1337 	<<
   1338 		NLA = 147;
   1339     zzmode(TOK_DEF_CPP_COMMENTS); zzskip();   
   1340 	>>
   1341 
   1342 #define
   1343 	<<
   1344 		NLA = 149;
   1345 	>>
   1346 
   1347 enum
   1348 	<<
   1349 		NLA = 151;
   1350 	>>
   1351 
   1352 \{
   1353 	<<
   1354 		NLA = 152;
   1355 	>>
   1356 
   1357 =
   1358 	<<
   1359 		NLA = 153;
   1360 	>>
   1361 
   1362 ,
   1363 	<<
   1364 		NLA = 154;
   1365 	>>
   1366 
   1367 \}
   1368 	<<
   1369 		NLA = 155;
   1370 	>>
   1371 
   1372 ;
   1373 	<<
   1374 		NLA = 156;
   1375 	>>
   1376 
   1377 [0-9]+
   1378 	<<
   1379 		NLA = INT;
   1380 	>>
   1381 
   1382 [a-zA-Z_][_a-zA-Z0-9]*
   1383 	<<
   1384 		NLA = ID;
   1385 	>>
   1386 
   1387 %%
   1388