<< /* parser.dlg -- DLG Description of scanner * * Generated from: dlg_p.g * * Terence Parr, Will Cohen, and Hank Dietz: 1989-2001 * Purdue University Electrical Engineering * With AHPCRC, University of Minnesota * ANTLR Version 1.33MR33 */ #define ANTLR_VERSION 13333 #include "pcctscfg.h" #include "pccts_stdio.h" #include #include "dlg.h" #include "antlr.h" #include "tokens.h" #include "dlgdef.h" LOOKAHEAD void #ifdef __USE_PROTOS zzerraction(void) #else zzerraction() #endif { (*zzerr)("invalid token"); zzadvance(); zzskip(); } >> <<%%lexaction int func_action; /* should actions be turned into functions?*/ int lex_mode_counter = 0; /* keeps track of the number of %%names */ /* MR1 */ /* MR1 11-Apr-97 Provide mechanism for inserting code into DLG class */ /* MR1 via <<%%lexmember...>> */ /* MR1 */ int lexMember = 0; /* <<%%lexmemeber ...>> MR1 */ int lexAction = 0; /* <<%%lexaction ...>> MR1 */ int parserClass = 0; /* <<%%parserclass ...>> MR1 */ int lexPrefix = 0; /* <<%%lexprefix ...>> MR1 */ char theClassName[100]; /* MR11 */ char *pClassName=theClassName; /* MR11 */ int firstLexMember=1; /* MR1 */ #ifdef __USE_PROTOS void xxputc(int c) { /* MR1 */ #else void xxputc(c) /* MR1 */ int c; /* MR1 */ { /* MR1 */ #endif if (parserClass) { /* MR1 */ *pClassName++=c; /* MR1 */ *pClassName=0; /* MR1 */ } else if (lexMember || lexPrefix) { /* MR1 */ if (class_stream != NULL) fputc(c,class_stream); /* MR1 */ } else { /* MR1 */ fputc(c,OUT); /* MR1 */ }; /* MR1 */ } /* MR1 */ #ifdef __USE_PROTOS void xxprintf(char *format,char *string) { /* MR1 */ #else void xxprintf(format,string) /* MR1 */ char *format; /* MR1 */ char *string; /* MR1 */ { /* MR1 */ #endif if (lexMember || lexPrefix || parserClass) { /* MR1 */ if (class_stream != NULL) /* MR1 */ fprintf(class_stream,format,string); /* MR1 */ } else { /* MR1 */ fprintf(OUT,format,string); /* MR1 */ }; /* MR1 */ } /* MR1 */ >> %%START @ << NLA = 1; >> [\r\t\ ]+ << NLA = 2; zzskip(); >> \n << NLA = 3; zzline++; zzskip(); DAWDLE; >> \@ << NLA = L_EOF; >> \%\% << NLA = PER_PER; >> \%\%[a-zA-Z_][a-zA-Z0-9_]* << NLA = NAME_PER_PER; p_mode_def(&zzlextext[2],lex_mode_counter++); >> \<\<\%\%lexmember << NLA = LEXMEMBER; lexMember=1; /* MR1 */ if (firstLexMember != 0) { /* MR1 */ firstLexMember=0; /* MR1 */ p_class_def1(); /* MR1 */ }; /* MR1 */ zzmode(ACT); /* MR1 */ >> \<\<\%\%lexaction << NLA = LEXACTION; lexAction=1;zzmode(ACT); >> \<\<\%\%parserclass << NLA = PARSERCLASS; parserClass=1; /* MR1 */ zzmode(ACT); /* MR1 */ >> \<\<\%\%lexprefix << NLA = LEXPREFIX; lexPrefix=1;zzmode(ACT); >> \<\< << NLA = ACTION; if (func_action) fprintf(OUT,"\n%s %sact%d()\n{ ", gen_cpp?"ANTLRTokenType":"static void", gen_cpp?ClassName("::"):"", ++action_no); zzmode(ACT); zzskip(); >> \>\> << NLA = GREAT_GREAT; >> \{ << NLA = L_BRACE; >> \} << NLA = R_BRACE; >> \( << NLA = L_PAR; >> \) << NLA = R_PAR; >> \[ << NLA = L_BRACK; >> \] << NLA = R_BRACK; >> \* << NLA = ZERO_MORE; >> \+ << NLA = ONE_MORE; >> \| << NLA = OR; >> \- << NLA = RANGE; >> \~ << NLA = NOT; >> \\0[0-7]* << NLA = OCTAL_VALUE; {int t; sscanf(&zzlextext[1],"%o",&t); zzlextext[0] = t;} >> \\0[Xx][0-9a-fA-F]+ << NLA = HEX_VALUE; {int t; sscanf(&zzlextext[3],"%x",&t); zzlextext[0] = t;} >> \\[1-9][0-9]* << NLA = DEC_VALUE; {int t; sscanf(&zzlextext[1],"%d",&t); zzlextext[0] = t;} >> \\t << NLA = TAB; zzlextext[0] = '\t'; >> \\n << NLA = NL; zzlextext[0] = '\n'; >> \\r << NLA = CR; zzlextext[0] = '\r'; >> \\b << NLA = BS; zzlextext[0] = '\b'; >> \\ \n << NLA = CONTINUATION; zzline++; zzskip(); >> \\~[tnrb] << NLA = LIT; zzlextext[0] = zzlextext[1]; >> ~[\\] << NLA = REGCHAR; >> %%ACT @ << NLA = 1; error("unterminated action", zzline); zzmode(START); >> \>\> << NLA = ACTION; if (func_action) fprintf(OUT,"}\n\n"); zzmode(START); /* MR1 */ /* MR1 11-Apr-97 Provide mechanism for inserting code into DLG class */ /* MR1 via <<%%lexmember ...>> */ /* MR1 This is a consequence of not saving actions */ /* MR1 */ /* MR1 */ parserClass=0; /* MR1 */ lexPrefix=0; /* MR1 */ lexAction=0; /* MR1 */ lexMember=0; >> \> << NLA = 34; xxputc(zzlextext[0]); zzskip(); >> \\\> << NLA = 35; xxputc('>'); zzskip(); >> \\ << NLA = 36; xxputc('\\'); zzskip(); >> \n << NLA = 37; xxputc(zzlextext[0]); ++zzline; zzskip(); >> /\* << NLA = 38; zzmode(ACTION_COMMENTS); /* MR1 */ xxprintf("%s", &(zzlextext[0])); zzskip(); /* MR1 */ >> // << NLA = 39; zzmode(ACTION_CPP_COMMENTS); /* MR1 */ xxprintf("%s", &(zzlextext[0])); zzskip(); /* MR1 */ >> ~[] << NLA = 40; xxputc(zzlextext[0]); zzskip(); >> %%ACTION_COMMENTS @ << NLA = 1; >> \*/ << NLA = 41; zzmode(ACT); /* MR1 */ xxprintf("%s", &(zzlextext[0])); zzskip(); /* MR1 */ >> [\n\r] << NLA = 42; zzline++; xxputc(zzlextext[0]); zzskip(); >> ~[] << NLA = 43; xxputc(zzlextext[0]); zzskip(); >> %%ACTION_CPP_COMMENTS @ << NLA = 1; >> [\n\r] << NLA = 44; zzmode(ACT); zzline++; /* MR1 */ xxprintf("%s", &(zzlextext[0])); zzskip(); /* MR1 */ >> ~[] << NLA = 45; xxputc(zzlextext[0]); zzskip(); >> %%