⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bits.c

📁 本工具提供一个词法分析器和语法分析器的集成开发环境
💻 C
📖 第 1 页 / 共 2 页
字号:
			ec = (ECnode *) p->elem;			if ( ec->setdeg > max )			{				if ( set_sub(ec->eset, *f) || set_equ(ec->eset, *f) )					{maxclass = ec; max=ec->setdeg;}			}		}		if ( maxclass != NULL )	/* if subset found, replace with token */		{			a = set_dif(*f, maxclass->eset);			set_orel((unsigned)maxclass->tok, &a);			set_free(*f);			*f = a;		}		else done = 1;	}}int#ifdef __STDC__DefErrSet1(int nilOK, set *f, int subst, char *name )#elseDefErrSet1(nilOK, f, subst, name )int nilOK;set *f;int subst;			/* should be substitute error classes? */char *name;#endif{	if ( GenCC ) return DefErrSetForCC1(nilOK, f, subst, name );	else return DefErrSetForC1(nilOK, f, subst, name );}int#ifdef __STDC__DefErrSet( set *f, int subst, char *name )#elseDefErrSet( f, subst, name )set *f;int subst;			/* should be substitute error classes? */char *name;#endif{    return DefErrSet1(0,f,subst,name);}/* Define a new error set.  WARNING...set-implementation dependent. */int#ifdef __STDC__DefErrSetForC1(int nilOK, set *f, int subst, char *name )#elseDefErrSetForC1(nilOK, f, subst, name )int nilOK;          /* MR13 */set *f;int subst;			/* should be substitute error classes? */char *name;#endif{	unsigned *p, *endp;	int e=1;    if (!nilOK)	require(!set_nil(*f), "DefErrSet: nil set to dump?");	if ( subst ) SubstErrorClass(f);	p = f->setword;	endp = &(f->setword[f->n]);	esetnum++;	if ( name!=NULL )		fprintf(DefFile, "extern SetWordType %s_set[];\n", name);	else		fprintf(DefFile, "extern SetWordType zzerr%d[];\n", esetnum);	if ( name!=NULL ) {		fprintf(ErrFile, "SetWordType %s_set[%d] = {",				name,				NumWords(TokenNum-1)*sizeof(unsigned));	}	else {		fprintf(ErrFile, "SetWordType zzerr%d[%d] = {",				esetnum,				NumWords(TokenNum-1)*sizeof(unsigned));	}	while ( p < endp )	{		if ( e > 1 ) fprintf(ErrFile, ", ");		DumpIntAsChars(ErrFile, "0x%x", *p++);		if ( e == 3 )		{			DAWDLE;			if ( p < endp ) fprintf(ErrFile, ",");			fprintf(ErrFile, "\n\t");			e=1;		}		else e++;	}	fprintf(ErrFile, "};\n");	return esetnum;}int#ifdef __STDC__DefErrSetForC( set *f, int subst, char *name )#elseDefErrSetForC( f, subst, name )set *f;int subst;			/* should be substitute error classes? */char *name;#endif{  return DefErrSetForC1(0,f,subst,name);}/* Define a new error set.  WARNING...set-implementation dependent; * Only used when -CC on. */int#ifdef __STDC__DefErrSetForCC1(int nilOK, set *f, int subst, char *name )#elseDefErrSetForCC1(nilOK, f, subst, name )int nilOK;          /* MR13 */set *f;int subst;			/* should be substitute error classes? */char *name;#endif{	unsigned *p, *endp;	int e=1;    if (!nilOK)	require(!set_nil(*f), "DefErrSet: nil set to dump?");	if ( subst ) SubstErrorClass(f);	p = f->setword;	endp = &(f->setword[f->n]);	esetnum++;	if ( name!=NULL ) {		fprintf(Parser_h, "\tstatic SetWordType %s_set[%d];\n", name,				NumWords(TokenNum-1)*sizeof(unsigned));		fprintf(Parser_c, "SetWordType %s::%s_set[%d] = {",				CurrentClassName,				name,				NumWords(TokenNum-1)*sizeof(unsigned));	}	else {		fprintf(Parser_c, "SetWordType %s::err%d[%d] = {",				CurrentClassName,				esetnum,				NumWords(TokenNum-1)*sizeof(unsigned));		fprintf(Parser_h, "\tstatic SetWordType err%d[%d];\n", esetnum,				NumWords(TokenNum-1)*sizeof(unsigned));	}	while ( p < endp )	{		if ( e > 1 ) fprintf(Parser_c, ", ");		DumpIntAsChars(Parser_c, "0x%x", *p++);		if ( e == 3 )		{			if ( p < endp ) fprintf(Parser_c, ",");			fprintf(Parser_c, "\n\t");			e=1;		}		else e++;	}	fprintf(Parser_c, "};\n");	return esetnum;}int#ifdef __STDC__DefErrSetForCC( set *f, int subst, char *name )#elseDefErrSetForCC( f, subst, name )set *f;int subst;			/* should be substitute error classes? */char *name;#endif{  return DefErrSetForCC1(0,f,subst,name);}void#ifdef __STDC__GenParser_c_Hdr(void)#elseGenParser_c_Hdr()#endif{	int i,j;    TermEntry   *te;	fprintf(Parser_c, "/*\n");	fprintf(Parser_c, " * %s: P a r s e r  S u p p o r t\n", CurrentClassName);	fprintf(Parser_c, " *\n");	fprintf(Parser_c, " * Generated from:");	for (i=0; i<NumFiles; i++) fprintf(Parser_c, " %s", FileStr[i]);	fprintf(Parser_c, "\n");	fprintf(Parser_c, " *\n");	fprintf(Parser_c, " * Terence Parr, Russell Quong, Will Cohen, and Hank Dietz: 1989-1998\n");	fprintf(Parser_c, " * Parr Research Corporation\n");	fprintf(Parser_c, " * with Purdue University Electrical Engineering\n");	fprintf(Parser_c, " * with AHPCRC, University of Minnesota\n");	fprintf(Parser_c, " * ANTLR Version %s\n", Version);	fprintf(Parser_c, " */\n\n");	fprintf(Parser_c, "#define ANTLR_VERSION	%s\n", VersionDef);	if ( FirstAction != NULL ) dumpAction(FirstAction,Parser_c, 0, -1, 0, 1);    /* MR11 */	fprintf(Parser_c, "#include \"pcctscfg.h\"\n");	fprintf(Parser_c, "#include PCCTS_STDIO_H\n");	fprintf(Parser_c, "#define ANTLR_SUPPORT_CODE\n");	if ( UserTokenDefsFile != NULL )	   fprintf(Parser_c, "#include %s\n", UserTokenDefsFile);	else	   fprintf(Parser_c, "#include \"%s\"\n", DefFileName);	fprintf(Parser_c, "#include \"%s.h\"\n\n", CurrentClassName);	fprintf(Parser_c, "const ANTLRChar *%s::tokenName(int tok) ",   /* MR1 */					CurrentClassName);                  	        /* MR1 */	fprintf(Parser_c, "  { return _token_tbl[tok]; }\n");	        /* MR1 */ /* MR10 */	/* Dump a Parser::tokens for each automaton */	fprintf(Parser_c, "\nANTLRChar *%s::_token_tbl[]={\n", CurrentClassName);	fprintf(Parser_c, "\t/* 00 */\t\"Invalid\"");	for (i=1; i<TokenNum-1; i++)	{		DAWDLE;		if ( i == EpToken ) continue;		/* remapped to invalid token? */		if ( TokenInd!=NULL && TokenInd[i]>=LastTokenCounted )		{			fprintf(Parser_c, ",\n\t/* %02d */\t\"invalid\"", i);			continue;		}		if ( TokenString(i) != NULL ) {           te=(TermEntry *) hash_get(Tname,TokenString(i));                     /* MR11 */            if (te == NULL || te->akaString == NULL) {                          /* MR11 */  	   	      fprintf(Parser_c, ",\n\t/* %02d */\t\"%s\"", i, TokenString(i));            } else {  	   	      fprintf(Parser_c, ",\n\t/* %02d */\t\"%s\"", i, te->akaString);   /* MR11 */            }        }		else		{			/* look in all lexclasses for the reg expr */			for (j=0; j<NumLexClasses; j++)			{				lexmode(j);				if ( ExprString(i) != NULL )				{					fprintf(Parser_c, ",\n\t/* %02d */\t", i);					dumpExpr(Parser_c, ExprString(i));					break;				}			}			if ( j>=NumLexClasses )			{				if ( UserDefdTokens )				{					fprintf(Parser_c, ",\n\t/* %02d */\t\"\"", i);				}				else					fatal_internal(eMsgd("No label or expr for token %d",i));			}		}	}	fprintf(Parser_c, "\n};\n");	/* Build constructors */	fprintf(Parser_c, "\n%s::", CurrentClassName);	fprintf(Parser_c,	"%s(ANTLRTokenBuffer *input) : ANTLRParser(input,%d,%d,%d,%d)\n",						CurrentClassName,						OutputLL_k,						FoundGuessBlk,						DemandLookahead,						NumWords(TokenNum-1)*sizeof(unsigned));	fprintf(Parser_c, "{\n");	fprintf(Parser_c, "\ttoken_tbl = _token_tbl;\n");    if (TraceGen) {      fprintf(Parser_c, "\ttraceOptionValueDefault=1;\t\t// MR10 turn trace ON\n");    } else {      fprintf(Parser_c, "\ttraceOptionValueDefault=0;\t\t// MR10 turn trace OFF\n");    };	fprintf(Parser_c, "}\n\n");}void#ifdef __STDC__GenParser_h_Hdr(void)#elseGenParser_h_Hdr()#endif{	int i;	fprintf(Parser_h, "/*\n");	fprintf(Parser_h, " * %s: P a r s e r  H e a d e r \n", CurrentClassName);	fprintf(Parser_h, " *\n");	fprintf(Parser_h, " * Generated from:");	for (i=0; i<NumFiles; i++) fprintf(Parser_h, " %s", FileStr[i]);	fprintf(Parser_h, "\n");	fprintf(Parser_h, " *\n");	fprintf(Parser_h, " * Terence Parr, Russell Quong, Will Cohen, and Hank Dietz: 1989-1998\n");	fprintf(Parser_h, " * Parr Research Corporation\n");	fprintf(Parser_h, " * with Purdue University Electrical Engineering\n");	fprintf(Parser_h, " * with AHPCRC, University of Minnesota\n");	fprintf(Parser_h, " * ANTLR Version %s\n", Version);	fprintf(Parser_h, " */\n\n");	fprintf(Parser_h, "#ifndef %s_h\n", CurrentClassName);	fprintf(Parser_h, "#define %s_h\n\n", CurrentClassName);    fprintf(Parser_h, "#ifndef ANTLR_VERSION\n");    fprintf(Parser_h, "#define ANTLR_VERSION %s\n",VersionDef);    fprintf(Parser_h, "#endif\n\n");	if ( FirstAction != NULL ) dumpAction( FirstAction, Parser_h, 0, -1, 0, 1);         /* MR11 */	if ( GenAST ) fprintf(Parser_h, "class ASTBase;\n");	fprintf(Parser_h, "#include \"%s\"\n\n", APARSER_H);	if ( HdrAction != NULL ) dumpAction( HdrAction, Parser_h, 0, -1, 0, 1);	/* MR10 */    if (ClassDeclStuff == NULL) {/* MR10 */  	fprintf(Parser_h, "class %s : public ANTLRParser {\n", CurrentClassName);/* MR10 */    } else {/* MR10 */      fprintf(Parser_h, "class %s %s {\n",CurrentClassName,ClassDeclStuff);/* MR10 */    };	fprintf(Parser_h, "public:\n");					          /* MR1 */	fprintf(Parser_h, "\tstatic  const ANTLRChar *tokenName(int tk);\n"); /* MR1 */	fprintf(Parser_h, "protected:\n");	fprintf(Parser_h, "\tstatic  ANTLRChar *_token_tbl[];\n");	fprintf(Parser_h, "private:\n");}/* Currently, this is only used in !GenCC mode */void#ifdef __STDC__GenErrHdr( void )#elseGenErrHdr( )#endif{	int i, j;    TermEntry   *te;	fprintf(ErrFile, "/*\n");	fprintf(ErrFile, " * A n t l r  S e t s / E r r o r  F i l e  H e a d e r\n");	fprintf(ErrFile, " *\n");	fprintf(ErrFile, " * Generated from:");	for (i=0; i<NumFiles; i++) fprintf(ErrFile, " %s", FileStr[i]);	fprintf(ErrFile, "\n");	fprintf(ErrFile, " *\n");	fprintf(ErrFile, " * Terence Parr, Russell Quong, Will Cohen, and Hank Dietz: 1989-1998\n");	fprintf(ErrFile, " * Parr Research Corporation\n");	fprintf(ErrFile, " * with Purdue University Electrical Engineering\n");	fprintf(ErrFile, " * With AHPCRC, University of Minnesota\n");	fprintf(ErrFile, " * ANTLR Version %s\n", Version);	fprintf(ErrFile, " */\n\n");	fprintf(ErrFile, "#define ANTLR_VERSION	%s\n", VersionDef);	if ( FirstAction != NULL ) dumpAction( FirstAction, ErrFile, 0, -1, 0, 1);         /* MR11 */	fprintf(ErrFile, "#include \"pcctscfg.h\"\n");	fprintf(ErrFile, "#include PCCTS_STDIO_H\n");	if ( strcmp(ParserName, DefaultParserName)!=0 )		fprintf(ErrFile, "#define %s %s\n", DefaultParserName, ParserName);	if ( strcmp(ParserName, DefaultParserName)!=0 )		fprintf(ErrFile, "#include \"%s\"\n", RemapFileName);	if ( HdrAction != NULL ) dumpAction( HdrAction, ErrFile, 0, -1, 0, 1 );	if ( FoundGuessBlk )	{		fprintf(ErrFile, "#define ZZCAN_GUESS\n");		fprintf(ErrFile, "#include PCCTS_SETJMP_H\n");	}    if (TraceGen) {      fprintf(ErrFile,"#define zzTRACE_RULES\n");  /* MR10 */    };	if ( OutputLL_k > 1 ) fprintf(ErrFile, "#define LL_K %d\n", OutputLL_k);#ifdef DUM	if ( LexGen ) fprintf(ErrFile, "#define zzEOF_TOKEN %d\n", (TokenInd!=NULL?TokenInd[EofToken]:EofToken));#endif	fprintf(ErrFile, "#define zzSET_SIZE %d\n", NumWords(TokenNum-1)*sizeof(unsigned));	if ( DemandLookahead ) fprintf(ErrFile, "#define DEMAND_LOOK\n");	fprintf(ErrFile, "#include \"antlr.h\"\n");	if ( GenAST ) fprintf(ErrFile, "#include \"ast.h\"\n");			    if ( UserDefdTokens ) fprintf(ErrFile, "#include %s\n", UserTokenDefsFile);	/* still need this one as it has the func prototypes */	fprintf(ErrFile, "#include \"%s\"\n", DefFileName);	fprintf(ErrFile, "#include \"dlgdef.h\"\n");	fprintf(ErrFile, "#include \"err.h\"\n\n");	/* Dump a zztokens for each automaton */	if ( strcmp(ParserName, DefaultParserName)!=0 )	{		fprintf(ErrFile, "ANTLRChar *%s_zztokens[%d]={\n", ParserName, TokenNum-1);	}	else	{		fprintf(ErrFile, "ANTLRChar *zztokens[%d]={\n", TokenNum-1);	}	fprintf(ErrFile, "\t/* 00 */\t\"Invalid\"");	for (i=1; i<TokenNum-1; i++)	{		DAWDLE;		if ( i == EpToken ) continue;		/* remapped to invalid token? */		if ( TokenInd!=NULL && TokenInd[i]>=LastTokenCounted )		{			fprintf(ErrFile, ",\n\t/* %02d */\t\"invalid\"", i);			continue;		}		if ( TokenString(i) != NULL ) {            te=(TermEntry *) hash_get(Tname,TokenString(i));                     /* MR11 */            if (te == NULL || te->akaString == NULL) {                          /* MR11 */  			  fprintf(ErrFile, ",\n\t/* %02d */\t\"%s\"", i, TokenString(i));            } else {  			  fprintf(ErrFile, ",\n\t/* %02d */\t\"%s\"", i, te->akaString);    /* MR11 */            }        }		else		{			/* look in all lexclasses for the reg expr */			for (j=0; j<NumLexClasses; j++)			{				lexmode(j);				if ( ExprString(i) != NULL )				{					fprintf(ErrFile, ",\n\t/* %02d */\t", i);					dumpExpr(ErrFile, ExprString(i));					break;				}			}			if ( j>=NumLexClasses )			{				if ( UserDefdTokens )				{					fprintf(ErrFile, ",\n\t/* %02d */\t\"\"", i);				}				else					fatal_internal(eMsgd("No label or expr for token %d",i));			}		}	}	fprintf(ErrFile, "\n};\n");}void#ifdef __STDC__dumpExpr( FILE *f, char *e )#elsedumpExpr( f, e )FILE *f;char *e;#endif{	while ( *e!='\0' )	{		if ( *e=='\\' && *(e+1)=='\\' )			{putc('\\', f); putc('\\', f); e+=2;}		else if ( *e=='\\' && *(e+1)=='"' )			{putc('\\', f); putc('"', f); e+=2;}		else if ( *e=='\\' ) {putc('\\', f); putc('\\', f); e++;}		else {putc(*e, f); e++;}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -