<<
/* parser.dlg -- DLG Description of scanner
 *
 * Generated from: dlg_p.g
 *
 * Terence Parr, Will Cohen, and Hank Dietz: 1989-1999
 * Purdue University Electrical Engineering
 * With AHPCRC, University of Minnesota
 * ANTLR Version 1.33MR20
 */

#define ANTLR_VERSION	13320
#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();  
	>>

%%
