📄 bits.c
字号:
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 + -