<<
/* parser.dlg -- DLG Description of scanner
 *
 * Generated from: antlr.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 "pcctscfg.h"
#include "set.h"
#include <ctype.h>
#include "syn.h"
#include "hash.h"
#include "generic.h"
#define zzcr_attr(attr,tok,t)
#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

/* maintained, but not used for now */
set AST_nodes_refd_in_actions = set_init;
int inAlt = 0;
set attribsRefdFromAction = set_init; /* MR20 */
int UsedOldStyleAttrib = 0;
int UsedNewStyleLabel = 0;
#ifdef __USE_PROTOS
char *inline_set(char *);
#else
char *inline_set();
#endif

/* MR1	10-Apr-97  MR1  Previously unable to put right shift operator	    */
/* MR1					in DLG action			                    */

int tokenActionActive=0;                                            /* MR1 */

  
>>

<<%%lexaction


static char *
#ifdef __USE_PROTOS
getFileNameFromTheLineInfo(char *toStr, char *fromStr)
#else
getFileNameFromTheLineInfo(toStr, fromStr)
char *toStr, *fromStr;
#endif
{
	int i, j, k;
	
  if (!fromStr || !toStr) return toStr;
	
  /* find the first " */
	
  for (i=0;
	(i<MaxFileName) &&
	(fromStr[i] != '\n') &&
	(fromStr[i] != '\r') &&
	(fromStr[i] != '\"');
	i++) /* nothing */ ;
	
  if ( (i == MaxFileName) ||
	(fromStr[i] == '\n') ||
	(fromStr[i] == '\r') ) {
	return toStr;
}

  /* find the second " */

  for (j=i+1;
(j<MaxFileName) &&
(fromStr[j] != '\n') &&
(fromStr[j] != '\r') &&
(fromStr[j] != '\"');
j++) /* nothing */ ;

  if ((j == MaxFileName) ||
(fromStr[j] == '\n') ||
(fromStr[j] == '\r') ) {
	return toStr;
}

  /* go back until the last / or \ */

  for (k=j-1;
(fromStr[k] != '\"') &&
(fromStr[k] != '/') &&
(fromStr[k] != '\\');
k--) /* nothing */ ;

  /* copy the string after " / or \ into toStr */

  for (i=k+1; fromStr[i] != '\"'; i++) {
toStr[i-k-1] = fromStr[i];
}

  toStr[i-k-1] = '\0';

  return toStr;
}

/* MR14 end of a block to support #line in antlr source code */

  
>>

<<%%lexaction

#ifdef __USE_PROTOS
void mark_label_used_in_sem_pred(LabelEntry *le)              /* MR10 */
#else
void mark_label_used_in_sem_pred(le)                          /* MR10 */
LabelEntry    *le;
#endif
{
	TokNode   *tn;
	require (le->elem->ntype == nToken,"mark_label_used... ntype != nToken");
	tn=(TokNode *)le->elem;
	require (tn->label != 0,"mark_label_used... TokNode has no label");
	tn->label_used_in_semantic_pred=1;
}
>>


%%START

@
	<<
		NLA = Eof;
		/* L o o k  F o r  A n o t h e r  F i l e */
		{
			FILE *new_input;
			new_input = NextFile();
			if ( new_input == NULL ) { NLA=Eof; return; }
			fclose( input );
			input = new_input;
			zzrdstream( input );
			zzskip();	/* Skip the Eof (@) char i.e continue */
		}
	>>

[\t\ ]+
	<<
		NLA = 76;
		zzskip();   
	>>

\n|\r|\r\n
	<<
		NLA = 77;
		zzline++; zzskip();   
	>>

\[
	<<
		NLA = 78;
		zzmode(ACTIONS); zzmore();
		istackreset();
		pushint(']');   
	>>

\<\<
	<<
		NLA = 79;
		action_file=CurFile; action_line=zzline;
		zzmode(ACTIONS); zzmore();
		list_free(&CurActionLabels,0);       /* MR10 */
		numericActionLabel=0;                /* MR10 */
		istackreset();
		pushint('>');   
	>>

\"
	<<
		NLA = 80;
		zzmode(STRINGS); zzmore();   
	>>

/\*
	<<
		NLA = 81;
		zzmode(COMMENTS); zzskip();   
	>>

\*/
	<<
		NLA = 82;
		warn("Missing /*; found dangling */"); zzskip();   
	>>

//
	<<
		NLA = 83;
		zzmode(CPP_COMMENTS); zzskip();   
	>>

#line[\ \t]* [0-9]+ {[\ \t]* \"~[\"]+\" ([\ \t]* [0-9]*)* } (\n|\r|\r\n)
	<<
		NLA = 84;
		
		zzline = atoi(zzbegexpr+5) - 1; zzline++; zzmore();
		getFileNameFromTheLineInfo(FileStr[CurFile], zzbegexpr);
	>>

#line ~[\n\r]* (\n|\r|\r\n)
	<<
		NLA = 85;
		
		zzline++; zzmore();
	>>

\>\>
	<<
		NLA = 86;
		warn("Missing <<; found dangling \>\>"); zzskip();   
	>>

.
	<<
		NLA = WildCard;
	>>

\@
	<<
		NLA = 88;
		FoundException = 1;		/* MR6 */
		FoundAtOperator = 1;  
	>>

{\\}#header
	<<
		NLA = 92;
	>>

{\\}#first
	<<
		NLA = 93;
	>>

{\\}#parser
	<<
		NLA = 94;
	>>

{\\}#tokdefs
	<<
		NLA = 95;
	>>

\}
	<<
		NLA = 96;
	>>

class
	<<
		NLA = 97;
	>>

\{
	<<
		NLA = 100;
	>>

!
	<<
		NLA = 101;
	>>

\<
	<<
		NLA = 102;
	>>

\>
	<<
		NLA = 103;
	>>

:
	<<
		NLA = 104;
	>>

;
	<<
		NLA = 105;
	>>

{\\}#lexaction
	<<
		NLA = 106;
	>>

{\\}#lexmember
	<<
		NLA = 107;
	>>

{\\}#lexprefix
	<<
		NLA = 108;
	>>

{\\}#pred
	<<
		NLA = 109;
	>>

\|\|
	<<
		NLA = 110;
	>>

&&
	<<
		NLA = 111;
	>>

\(
	<<
		NLA = 112;
	>>

\)
	<<
		NLA = 113;
	>>

{\\}#lexclass
	<<
		NLA = 114;
	>>

{\\}#errclass
	<<
		NLA = 115;
	>>

{\\}#tokclass
	<<
		NLA = 116;
	>>

..
	<<
		NLA = 117;
	>>

{\\}#token
	<<
		NLA = 118;
	>>

=
	<<
		NLA = 119;
	>>

[0-9]+
	<<
		NLA = 120;
	>>

\|
	<<
		NLA = 121;
	>>

\~
	<<
		NLA = 122;
	>>

^
	<<
		NLA = 123;
	>>

{\\}#pragma
	<<
		NLA = 124;
	>>

approx
	<<
		NLA = 125;
	>>

LL\(1\)
	<<
		NLA = 126;
	>>

LL\(2\)
	<<
		NLA = 127;
	>>

\*
	<<
		NLA = 128;
	>>

\+
	<<
		NLA = 129;
	>>

?
	<<
		NLA = 130;
	>>

=>
	<<
		NLA = 131;
	>>

exception
	<<
		NLA = 132;
	>>

default
	<<
		NLA = 133;
	>>

catch
	<<
		NLA = 134;
	>>

[a-z] [A-Za-z0-9_]*
	<<
		NLA = NonTerminal;
		
		while ( zzchar==' ' || zzchar=='\t' ) {
			zzadvance();
		}
		if ( zzchar == ':' && inAlt ) NLA = LABEL;
	>>

[A-Z] [A-Za-z0-9_]*
	<<
		NLA = TokenTerm;
		
		while ( zzchar==' ' || zzchar=='\t' ) {
			zzadvance();
		}
		if ( zzchar == ':' && inAlt ) NLA = LABEL;
	>>

{\\}#[A-Za-z0-9_]*
	<<
		NLA = 135;
		warn(eMsg1("unknown meta-op: %s",LATEXT(1))); zzskip();   
	>>


%%STRINGS

@
	<<
		NLA = Eof;
	>>

\"
	<<
		NLA = QuotedTerm;
		zzmode(START);   
	>>

\n|\r|\r\n
	<<
		NLA = 3;
		
		zzline++;
		warn("eoln found in string");
		zzskip();
	>>

\\(\n|\r|\r\n)
	<<
		NLA = 4;
		zzline++; zzmore();   
	>>

\\~[]
	<<
		NLA = 5;
		zzmore();   
	>>

~[\n\r\"\\]+
	<<
		NLA = 6;
		zzmore();   
	>>


%%ACTION_STRINGS

@
	<<
		NLA = Eof;
	>>

\"
	<<
		NLA = 7;
		zzmode(ACTIONS); zzmore();   
	>>

\n|\r|\r\n
	<<
		NLA = 8;
		
		zzline++;
		warn("eoln found in string (in user action)");
		zzskip();
	>>

\\(\n|\r|\r\n)
	<<
		NLA = 9;
		zzline++; zzmore();   
	>>

\\~[]
	<<
		NLA = 10;
		zzmore();   
	>>

~[\n\r\"\\]+
	<<
		NLA = 11;
		zzmore();   
	>>


%%ACTION_CHARS

@
	<<
		NLA = Eof;
	>>

'
	<<
		NLA = 12;
		zzmode(ACTIONS); zzmore();   
	>>

\n|\r|\r\n
	<<
		NLA = 13;
		
		zzline++;
		warn("eoln found in char literal (in user action)");
		zzskip();
	>>

\\~[]
	<<
		NLA = 14;
		zzmore();   
	>>

~[\n\r'\\]+
	<<
		NLA = 15;
		zzmore();   
	>>


%%ACTION_COMMENTS

@
	<<
		NLA = Eof;
	>>

\*/
	<<
		NLA = 16;
		zzmode(ACTIONS); zzmore();   
	>>

\*
	<<
		NLA = 17;
		zzmore();   
	>>

\n|\r|\r\n
	<<
		NLA = 18;
		zzline++; zzmore(); DAWDLE;   
	>>

~[\n\r\*]+
	<<
		NLA = 19;
		zzmore();   
	>>


%%TOK_DEF_COMMENTS

@
	<<
		NLA = Eof;
	>>

\*/
	<<
		NLA = 20;
		zzmode(PARSE_ENUM_FILE);
		zzmore();   
	>>

\*
	<<
		NLA = 21;
		zzmore();   
	>>

\n|\r|\r\n
	<<
		NLA = 22;
		zzline++; zzmore(); DAWDLE;   
	>>

~[\n\r\*]+
	<<
		NLA = 23;
		zzmore();   
	>>


%%TOK_DEF_CPP_COMMENTS

@
	<<
		NLA = Eof;
	>>

\n|\r|\r\n
	<<
		NLA = 24;
		zzline++; zzmode(PARSE_ENUM_FILE); zzskip(); DAWDLE;   
	>>

~[\n\r]+
	<<
		NLA = 25;
		zzskip();   
	>>


%%ACTION_CPP_COMMENTS

@
	<<
		NLA = Eof;
	>>

\n|\r|\r\n
	<<
		NLA = 26;
		zzline++; zzmode(ACTIONS); zzmore(); DAWDLE;   
	>>

~[\n\r]+
	<<
		NLA = 27;
		zzmore();   
	>>


%%CPP_COMMENTS

@
	<<
		NLA = Eof;
	>>

\n|\r|\r\n
	<<
		NLA = 28;
		zzline++; zzmode(START); zzskip(); DAWDLE;   
	>>

~[\n\r]+
	<<
		NLA = 29;
		zzskip();   
	>>


%%COMMENTS

@
	<<
		NLA = Eof;
	>>

\*/
	<<
		NLA = 30;
		zzmode(START); zzskip();   
	>>

\*
	<<
		NLA = 31;
		zzskip();   
	>>

\n|\r|\r\n
	<<
		NLA = 32;
		zzline++; zzskip(); DAWDLE;   
	>>

~[\n\r\*]+
	<<
		NLA = 33;
		zzskip();   
	>>


%%ACTIONS

@
	<<
		NLA = Eof;
	>>

\>\>
	<<
		NLA = Action;
		/* these do not nest */
		zzmode(START);
		NLATEXT[0] = ' ';
		NLATEXT[1] = ' ';
		zzbegexpr[0] = ' ';
		zzbegexpr[1] = ' ';
		if ( zzbufovf ) {
			err( eMsgd("action buffer overflow; size %d",ZZLEXBUFSIZE));
		}
		
/* MR1	10-Apr-97  MR1  Previously unable to put right shift operator	*/
		/* MR1					in DLG action			*/
		/* MR1			Doesn't matter what kind of action it is - reset*/
		
			      tokenActionActive=0;		 /* MR1 */
	>>

\>\>?
	<<
		NLA = Pred;
		/* these do not nest */
		zzmode(START);
		NLATEXT[0] = ' ';
		NLATEXT[1] = ' ';
		zzbegexpr[0] = '\0';
		if ( zzbufovf ) {
			err( eMsgd("predicate buffer overflow; size %d",ZZLEXBUFSIZE));
		};
#ifdef __cplusplus__
		/* MR10 */                    list_apply(CurActionLabels, (void (*)(void *))mark_label_used_in_sem_pred);
#else
#ifdef __STDC__
		/* MR10 */                    list_apply(CurActionLabels, (void (*)(void *))mark_label_used_in_sem_pred);
#else
#ifdef __USE_PROTOS
		/* MRxx */                    list_apply(CurActionLabels, (void (*)(void *))mark_label_used_in_sem_pred);
#else
		/* MR10 */                    list_apply(CurActionLabels,mark_label_used_in_sem_pred);
#endif
#endif
#endif
	>>

\]
	<<
		NLA = PassAction;
		if ( topint() == ']' ) {
			popint();
			if ( istackempty() )	/* terminate action */
			{
				zzmode(START);
				NLATEXT[0] = ' ';
				zzbegexpr[0] = ' ';
				if ( zzbufovf ) {
					err( eMsgd("parameter buffer overflow; size %d",ZZLEXBUFSIZE));
				}
			}
			else {
				/* terminate $[..] and #[..] */
				if ( GenCC ) zzreplstr("))");
				else zzreplstr(")");
				zzmore();
			}
		}
		else if ( topint() == '|' ) { /* end of simple [...] */
			popint();
			zzmore();
		}
		else zzmore();
	>>

consumeUntil\( [\ \t]* \{~[\}]+\} [\ \t]* \)
	<<
		NLA = 37;
		
		zzmore();
		zzreplstr(inline_set(zzbegexpr+
		strlen("consumeUntil(")));
	>>

consumeUntil\( ~[\)]+ \)
	<<
		NLA = 38;
		zzmore();   
	>>

\n|\r|\r\n
	<<
		NLA = 39;
		zzline++; zzmore(); DAWDLE;   
	>>

\>
	<<
		NLA = 40;
		zzmore();   
	>>

$
	<<
		NLA = 41;
		zzmore();   
	>>

$$
	<<
		NLA = 42;
		if ( !GenCC ) {zzreplstr("zzaRet"); zzmore();}
		else err("$$ use invalid in C++ mode");   
	>>

$\[\]
	<<
		NLA = 43;
		if ( !GenCC ) {zzreplstr("zzempty_attr"); zzmore();}
		else err("$[] use invalid in C++ mode");   
	>>

$\[
	<<
		NLA = 44;
		
		pushint(']');
		if ( !GenCC ) zzreplstr("zzconstr_attr(");
		else err("$[..] use invalid in C++ mode");
		zzmore();
	>>

$[0-9]+
	<<
		NLA = 45;
		{
			static char buf[100];
			numericActionLabel=1;       /* MR10 */
			if ( strlen(zzbegexpr)>(size_t)85 )
			fatal("$i attrib ref too big");
			set_orel(atoi(zzbegexpr+1), &attribsRefdFromAction);
			if ( !GenCC ) sprintf(buf,"zzaArg(zztasp%d,%s)",
			BlkLevel-1,zzbegexpr+1);
			else sprintf(buf,"_t%d%s",
			BlkLevel-1,zzbegexpr+1);
			zzreplstr(buf);
			zzmore();
			UsedOldStyleAttrib = 1;
			if ( UsedNewStyleLabel )
			err("cannot mix old-style $i with new-style labels");
		}
	>>

$[0-9]+.
	<<
		NLA = 46;
		{
			static char buf[100];
			numericActionLabel=1;       /* MR10 */
			if ( strlen(zzbegexpr)>(size_t)85 )
			fatal("$i.field attrib ref too big");
			zzbegexpr[strlen(zzbegexpr)-1] = ' ';
			set_orel(atoi(zzbegexpr+1), &attribsRefdFromAction);
			if ( !GenCC ) sprintf(buf,"zzaArg(zztasp%d,%s).",
			BlkLevel-1,zzbegexpr+1);
			else sprintf(buf,"_t%d%s.",
			BlkLevel-1,zzbegexpr+1);
			zzreplstr(buf);
			zzmore();
			UsedOldStyleAttrib = 1;
			if ( UsedNewStyleLabel )
			err("cannot mix old-style $i with new-style labels");
		}
	>>

$[0-9]+.[0-9]+
	<<
		NLA = 47;
		{
			static char buf[100];
			static char i[20], j[20];
			char *p,*q;
			numericActionLabel=1;       /* MR10 */
			if (strlen(zzbegexpr)>(size_t)85) fatal("$i.j attrib ref too big");
			for (p=zzbegexpr+1,q= &i[0]; *p!='.'; p++) {
				if ( q == &i[20] )
				fatalFL("i of $i.j attrib ref too big",
				FileStr[CurFile], zzline );
				*q++ = *p;
			}
			*q = '\0';
			for (p++, q= &j[0]; *p!='\0'; p++) {
				if ( q == &j[20] )
				fatalFL("j of $i.j attrib ref too big",
				FileStr[CurFile], zzline );
				*q++ = *p;
			}
			*q = '\0';
			if ( !GenCC ) sprintf(buf,"zzaArg(zztasp%s,%s)",i,j);
			else sprintf(buf,"_t%s%s",i,j);
			zzreplstr(buf);
			zzmore();
			UsedOldStyleAttrib = 1;
			if ( UsedNewStyleLabel )
			err("cannot mix old-style $i with new-style labels");
		}
	>>

$[_a-zA-Z][_a-zA-Z0-9]*
	<<
		NLA = 48;
		{ static char buf[300]; LabelEntry *el;
			zzbegexpr[0] = ' ';
			if ( CurRule != NULL &&
			strcmp(CurRule, &zzbegexpr[1])==0 ) {
				if ( !GenCC ) zzreplstr("zzaRet");
			}
			else if ( CurRetDef != NULL &&
			strmember(CurRetDef, &zzbegexpr[1])) {
				if ( HasComma( CurRetDef ) ) {
					require (strlen(zzbegexpr)<=(size_t)285,
					"$retval attrib ref too big");
					sprintf(buf,"_retv.%s",&zzbegexpr[1]);
					zzreplstr(buf);
				}
				else zzreplstr("_retv");
			}
			else if ( CurParmDef != NULL &&
			strmember(CurParmDef, &zzbegexpr[1])) {
			;
		}
		else if ( Elabel==NULL ) {
		{ err("$-variables in actions outside of rules are not allowed"); }
	} else if ( (el=(LabelEntry *)hash_get(Elabel, &zzbegexpr[1]))!=NULL ) {
	/* MR10 */
	/* MR10 */                      /* element labels might exist without an elem when */
	/* MR10 */                      /*  it is a forward reference (to a rule)          */
	/* MR10 */
	/* MR10 */						if ( GenCC && (el->elem == NULL || el->elem->ntype==nRuleRef) )
	/* MR10 */							{ err(eMsg1("There are no token ptrs for rule references: '$%s'",&zzbegexpr[1])); }
	/* MR10 */
	/* MR10 */						if ( !GenCC && (el->elem == NULL || el->elem->ntype==nRuleRef) && GenAST) {
	/* MR10 */                          err("You can no longer use attributes returned by rules when also using ASTs");
	/* MR10 */                          err("   Use upward inheritance (\"rule >[Attrib a] : ... <<$a=...\>\>\")");
	/* MR10 */                      };
	/* MR10 */
	/* MR10 */                      /* keep track of <<... $label ...>> for semantic predicates in guess mode */
	/* MR10 */                      /* element labels contain pointer to the owners node                      */
	/* MR10 */
	/* MR10 */                      if (el->elem != NULL && el->elem->ntype == nToken) {
	/* MR10 */                        list_add(&CurActionLabels,el);
	/* MR10 */                      };
}
else
warn(eMsg1("$%s not parameter, return value, (defined) element label",&zzbegexpr[1]));
}
zzmore();
	>>

#0
	<<
		NLA = 49;
		zzreplstr("(*_root)"); zzmore(); chkGTFlag();   
	>>

#\[\]
	<<
		NLA = 50;
		if ( GenCC ) {
			if (NewAST) zzreplstr("(newAST)");
			else zzreplstr("(new AST)");}
		else {zzreplstr("zzastnew()");} zzmore();
		chkGTFlag();
	>>

#\(\)
	<<
		NLA = 51;
		zzreplstr("NULL"); zzmore(); chkGTFlag();   
	>>

#[0-9]+
	<<
		NLA = 52;
		{
			static char buf[100];
			if ( strlen(zzbegexpr)>(size_t)85 )
			fatal("#i AST ref too big");
			if ( GenCC ) sprintf(buf,"_ast%d%s",BlkLevel-1,zzbegexpr+1);
			else sprintf(buf,"zzastArg(%s)",zzbegexpr+1);
			zzreplstr(buf);
			zzmore();
			set_orel(atoi(zzbegexpr+1), &AST_nodes_refd_in_actions);
			chkGTFlag();
		}
	>>

#line[\ \t]* [0-9]+ {[\ \t]* \"~[\"]+\" ([\ \t]* [0-9]*)* } (\n|\r|\r\n)
	<<
		NLA = 53;
		
		zzline = atoi(zzbegexpr+5) - 1; zzline++; zzmore();
		getFileNameFromTheLineInfo(FileStr[CurFile], zzbegexpr);
	>>

#line ~[\n\r]* (\n|\r|\r\n)
	<<
		NLA = 54;
		
		zzline++; zzmore();
	>>

#[_a-zA-Z][_a-zA-Z0-9]*
	<<
		NLA = 55;
		
		if ( !(strcmp(zzbegexpr, "#ifdef")==0 ||
		strcmp(zzbegexpr, "#if")==0 ||
		strcmp(zzbegexpr, "#else")==0 ||
		strcmp(zzbegexpr, "#endif")==0 ||
		strcmp(zzbegexpr, "#ifndef")==0 ||
		strcmp(zzbegexpr, "#define")==0 ||
		strcmp(zzbegexpr, "#pragma")==0 ||
		strcmp(zzbegexpr, "#undef")==0 ||
		strcmp(zzbegexpr, "#import")==0 ||
		strcmp(zzbegexpr, "#line")==0 ||
		strcmp(zzbegexpr, "#include")==0 ||
		strcmp(zzbegexpr, "#error")==0) )
		{
			static char buf[100];
			sprintf(buf, "%s_ast", zzbegexpr+1);
			zzreplstr(buf);
			chkGTFlag();
		}
		zzmore();
	>>

#\[
	<<
		NLA = 56;
		
		pushint(']');
		if ( GenCC ) {
			if (NewAST) zzreplstr("(newAST(");
			else zzreplstr("(new AST("); }
		else zzreplstr("zzmk_ast(zzastnew(),");
		zzmore();
		chkGTFlag();
	>>

#\(
	<<
		NLA = 57;
		
		pushint('}');
		if ( GenCC )
		zzreplstr("ASTBase::tmake(");
		else zzreplstr("zztmake(");
		zzmore();
		chkGTFlag();
	>>

#
	<<
		NLA = 58;
		zzmore();   
	>>

\)
	<<
		NLA = 59;
		
		if ( istackempty() )
		zzmore();
		else if ( topint()==')' ) {
			popint();
		}
		else if ( topint()=='}' ) {
			popint();
			/* terminate #(..) */
			zzreplstr(", NULL)");
		}
		zzmore();
	>>

\[
	<<
		NLA = 60;
		
		pushint('|');	/* look for '|' to terminate simple [...] */
		zzmore();
	>>

\(
	<<
		NLA = 61;
		
		pushint(')');
		zzmore();
	>>

\\\]
	<<
		NLA = 62;
		zzreplstr("]");  zzmore();   
	>>

\\\)
	<<
		NLA = 63;
		zzreplstr(")");  zzmore();   
	>>

\\>
	<<
		NLA = 64;
		if (! tokenActionActive) zzreplstr(">");	 /* MR1 */
		zzmore();				         /* MR1 */
	>>

'
	<<
		NLA = 65;
		zzmode(ACTION_CHARS); zzmore();  
	>>

\"
	<<
		NLA = 66;
		zzmode(ACTION_STRINGS); zzmore();  
	>>

\\$
	<<
		NLA = 67;
		zzreplstr("$");  zzmore();   
	>>

\\#
	<<
		NLA = 68;
		zzreplstr("#");  zzmore();   
	>>

\\(\n|\r|\r\n)
	<<
		NLA = 69;
		zzline++; zzmore();   
	>>

\\~[\]\)>$#]
	<<
		NLA = 70;
		zzmore();   
	>>

/
	<<
		NLA = 71;
		zzmore();   
	>>

/\*
	<<
		NLA = 72;
		zzmode(ACTION_COMMENTS); zzmore();   
	>>

\*/
	<<
		NLA = 73;
		warn("Missing /*; found dangling */ in action"); zzmore();   
	>>

//
	<<
		NLA = 74;
		zzmode(ACTION_CPP_COMMENTS); zzmore();   
	>>

~[\n\r\)\(\\$#\>\]\[\"'/]+
	<<
		NLA = 75;
		zzmore();   
	>>


%%PARSE_ENUM_FILE

@
	<<
		NLA = Eof;
		;   
	>>

[\t\ ]+
	<<
		NLA = 136;
		zzskip();   
	>>

\n|\r|\r\n
	<<
		NLA = 137;
		zzline++; zzskip();   
	>>

//
	<<
		NLA = 138;
		zzmode(TOK_DEF_CPP_COMMENTS); zzmore();   
	>>

/\*
	<<
		NLA = 139;
		zzmode(TOK_DEF_COMMENTS); zzskip();   
	>>

#ifdef
	<<
		NLA = 140;
		zzmode(TOK_DEF_CPP_COMMENTS); zzskip();   
	>>

#if
	<<
		NLA = 141;
		zzmode(TOK_DEF_CPP_COMMENTS); zzskip();   
	>>

#ifndef
	<<
		NLA = 142;
		;   
	>>

#else
	<<
		NLA = 143;
		zzmode(TOK_DEF_CPP_COMMENTS); zzskip();   
	>>

#endif
	<<
		NLA = 144;
		zzmode(TOK_DEF_CPP_COMMENTS); zzskip();   
	>>

#undef
	<<
		NLA = 145;
		zzmode(TOK_DEF_CPP_COMMENTS); zzskip();   
	>>

#import
	<<
		NLA = 146;
		zzmode(TOK_DEF_CPP_COMMENTS); zzskip();   
	>>

#define
	<<
		NLA = 148;
	>>

enum
	<<
		NLA = 150;
	>>

\{
	<<
		NLA = 151;
	>>

=
	<<
		NLA = 152;
	>>

,
	<<
		NLA = 153;
	>>

\}
	<<
		NLA = 154;
	>>

;
	<<
		NLA = 155;
	>>

[0-9]+
	<<
		NLA = INT;
	>>

[a-zA-Z_][_a-zA-Z0-9]*
	<<
		NLA = ID;
	>>

%%
