parser.dlg revision 4fd606d1f5abe38e1f42c38de1d2e895166bd0f4
<<
/* 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 <ctype.h>
#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();
>>
%%