📄 genmms.c
字号:
printf(" "); pclasses(classes, num_classes, "o"); printf(" ,-\n "); printf(" %s%s", DIR(), APARSER_O); if ( !user_lexer ) { printf(", %s%s", DIR(), DLEXERBASE_O); } if ( gen_trees ) { printf(" ,-\n "); printf("%s%s", DIR(), ASTBASE_O); printf(", %s%s", DIR(), PCCTSAST_O); /* printf(" %s%s", DIR(), LIST_O); */ } printf(", %s%s", DIR(), ATOKENBUFFER_O); } if ( !user_lexer ) { if ( gen_CPP ) printf(", $(SCAN)%s", OBJ_FILE_SUFFIX); else printf(", %s$(SCAN)%s", DIR(), OBJ_FILE_SUFFIX); } if ( !gen_CPP ) printf(", $(ERR)%s", OBJ_FILE_SUFFIX); printf("\n"); printf("ANTLR_SPAWN = "); if ( gen_CPP ) pfiles(files, n, CPP_FILE_SUFFIX_NO_DOT); else pfiles(files, n, "c"); if ( gen_CPP ) { printf(", "); pclasses(classes, num_classes, CPP_FILE_SUFFIX_NO_DOT); printf(" ,-\n "); pclasses(classes, num_classes, "h"); if ( strcmp(hdr,"stdpccts.h")!=0 ) { printf(" ,-\n "); printf("$(HDR_FILE), stdpccts.h"); } } if ( user_lexer ) { if ( !user_token_types ) printf(", $(TOKENS)"); } else { printf(", $(DLG_FILE)"); if ( !user_token_types ) printf(", $(TOKENS)"); } if ( !gen_CPP ) printf(", $(ERR).c"); printf("\n"); if ( !user_lexer ) { if ( gen_CPP ) printf("DLG_SPAWN = $(SCAN)%s", CPP_FILE_SUFFIX); else printf("DLG_SPAWN = %s$(SCAN).c", DIR()); if ( gen_CPP ) printf(", $(SCAN).h"); else printf(", $(MOD_FILE)"); printf("\n"); } printf("ANTLR_SPAWN_ALL_VERSIONS = "); if ( gen_CPP ) pfiles(files, n, CPP_FILE_SUFFIX_NO_DOT); else pfiles(files, n, "c"); if ( gen_CPP ) { printf(";*, "); pclasses(classes, num_classes, CPP_FILE_SUFFIX_NO_DOT); printf(";* ,-\n "); pclasses(classes, num_classes, "h"); printf(";*"); if ( strcmp(hdr,"stdpccts.h")!=0 ) { printf(" ,-\n "); printf("$(HDR_FILE);*, stdpccts.h;*"); } } if ( user_lexer ) { if ( !user_token_types ) printf(", $(TOKENS);*"); } else { printf(", $(DLG_FILE);*"); if ( !user_token_types ) printf(", $(TOKENS);*"); } if ( !gen_CPP ) printf(", $(ERR).c;*"); printf("\n"); if ( !user_lexer ) { if ( gen_CPP ) printf("DLG_SPAWN_ALL_VERSIONS = $(SCAN)%s;*", CPP_FILE_SUFFIX); else printf("DLG_SPAWN_ALL_VERSIONS = %s$(SCAN).c;*", DIR()); if ( gen_CPP ) printf(", $(SCAN).h;*"); else printf(", $(MOD_FILE);*"); printf("\n"); } if ( gen_CPP ) { printf("CCC=CXX\n"); printf("CC=$(CCC)\n"); } else printf("CC=cc\n"); /* set up dependencies */ printf("\n%s.exe : $(OBJ), $(SRC)\n", project); if (gen_CPP) printf(" CXXLINK %s %s $(LNKFLAGS) $(OBJ)\n", RENAME_EXE_FLAG, project); else printf(" LINK %s %s $(LNKFLAGS) $(OBJ)\n", RENAME_EXE_FLAG, project); printf("\n"); /* how to compile parser files */ for (i=0; i<num_files; i++) { pfiles(&files[i], 1, "obj"); if ( user_lexer ) { printf(" : $(TOKENS)"); } else { if ( gen_CPP ) printf(" : $(TOKENS), $(SCAN).h"); else printf(" : $(MOD_FILE), $(TOKENS)"); } printf(", "); if ( gen_CPP ) pfiles(&files[i], 1, CPP_FILE_SUFFIX_NO_DOT); else pfiles(&files[i], 1, "c"); if ( gen_CPP && strcmp(hdr,"stdpccts.h")!=0 ) printf(", $(HDR_FILE)"); printf("\n"); printf(" %s $(CFLAGS) %s ",gen_CPP?"$(CCC)":"$(CC)",RENAME_OBJ_FLAG); pfiles(&files[i], 1, "obj"); printf(" "); if ( gen_CPP ) pfiles(&files[i], 1, CPP_FILE_SUFFIX_NO_DOT); else pfiles(&files[i], 1, "c"); printf("\n\n"); } /* how to compile err.c */ if ( !gen_CPP ) { printf("$(ERR)%s : $(ERR).c", OBJ_FILE_SUFFIX); if ( !user_lexer ) printf(", $(TOKENS)"); printf("\n"); printf(" %s $(CFLAGS) %s $(ERR)%s $(ERR).c", gen_CPP?"$(CCC)":"$(CC)", RENAME_OBJ_FLAG, OBJ_FILE_SUFFIX); printf("\n\n"); } /* how to compile Class.c */ for (i=0; i<num_classes; i++) { pclasses(&classes[i], 1, "obj"); if ( user_lexer ) { printf(" : $(TOKENS)"); } else { printf(" : $(TOKENS), $(SCAN).h"); } printf(", "); pclasses(&classes[i], 1, CPP_FILE_SUFFIX_NO_DOT); printf(", "); pclasses(&classes[i], 1, "h"); if ( gen_CPP && strcmp(hdr,"stdpccts.h")!=0 ) printf(", $(HDR_FILE)"); printf("\n"); printf(" %s $(CFLAGS) %s ", gen_CPP?"$(CCC)":"$(CC)", RENAME_OBJ_FLAG); pclasses(&classes[i], 1, "obj"); printf(" "); pclasses(&classes[i], 1, CPP_FILE_SUFFIX_NO_DOT); printf("\n\n"); } /* how to compile scan.c */ if ( !user_lexer ) { if ( gen_CPP ) printf("$(SCAN)%s : $(SCAN)%s", OBJ_FILE_SUFFIX, CPP_FILE_SUFFIX); else printf("%s$(SCAN)%s : %s$(SCAN).c", DIR(), OBJ_FILE_SUFFIX, DIR()); if ( !user_lexer ) printf(", $(TOKENS)"); printf("\n"); if ( gen_CPP ) printf(" $(CCC) $(CFLAGS) %s $(SCAN)%s $(SCAN)%s", RENAME_OBJ_FLAG, OBJ_FILE_SUFFIX, CPP_FILE_SUFFIX); else printf(" $(CC) $(CFLAGS) %s %s$(SCAN)%s %s$(SCAN).c", RENAME_OBJ_FLAG, DIR(), OBJ_FILE_SUFFIX, DIR()); printf("\n\n"); } printf("$(ANTLR_SPAWN) : $(GRM)\n"); printf(" $(ANTLR) $(AFLAGS) $(GRM)\n"); if ( !user_lexer ) { printf("\n"); printf("$(DLG_SPAWN) : $(DLG_FILE)\n"); if ( gen_CPP ) printf(" $(DLG) $(DFLAGS) $(DLG_FILE)\n"); else printf(" $(DLG) $(DFLAGS) $(DLG_FILE) $(SCAN).c\n"); } /* do the makes for ANTLR/DLG support */ if ( gen_CPP ) { printf("\n"); printf("%s%s : $(ANTLR_H)%s\n", DIR(), APARSER_O, APARSER_C); printf(" %s $(CFLAGS) %s ", gen_CPP?"$(CCC)":"$(CC)", RENAME_OBJ_FLAG); printf("%s%s $(ANTLR_H)%s\n", DIR(), APARSER_O, APARSER_C); printf("\n"); printf("%s%s : $(ANTLR_H)%s\n", DIR(), ATOKENBUFFER_O, ATOKENBUFFER_C); printf(" %s $(CFLAGS) %s ", gen_CPP?"$(CCC)":"$(CC)", RENAME_OBJ_FLAG); printf("%s%s $(ANTLR_H)%s\n", DIR(), ATOKENBUFFER_O, ATOKENBUFFER_C); if ( !user_lexer ) { printf("\n"); printf("%s%s : $(ANTLR_H)%s\n", DIR(), DLEXERBASE_O, DLEXERBASE_C); printf(" %s $(CFLAGS) %s ", gen_CPP?"$(CCC)":"$(CC)", RENAME_OBJ_FLAG); printf("%s%s $(ANTLR_H)%s\n", DIR(), DLEXERBASE_O, DLEXERBASE_C); } if ( gen_trees ) { printf("\n"); printf("%s%s : $(ANTLR_H)%s\n", DIR(), ASTBASE_O, ASTBASE_C); printf(" %s $(CFLAGS) %s ", gen_CPP?"$(CCC)":"$(CC)", RENAME_OBJ_FLAG); printf("%s%s $(ANTLR_H)%s\n", DIR(), ASTBASE_O, ASTBASE_C); printf("\n"); printf("%s%s : $(ANTLR_H)%s\n", DIR(), PCCTSAST_O, PCCTSAST_C); printf(" %s $(CFLAGS) %s ", gen_CPP?"$(CCC)":"$(CC)", RENAME_OBJ_FLAG); printf("%s%s $(ANTLR_H)%s\n", DIR(), PCCTSAST_O, PCCTSAST_C); printf("\n"); /* printf("%s%s : $(ANTLR_H)%s%s\n", DIR(), LIST_O, DirectorySymbol, LIST_C); printf(" %s -c $(CFLAGS) %s ", gen_CPP?"$(CCC)":"$(CC)",RENAME_OBJ_FLAG); printf("%s%s $(ANTLR_H)%s%s\n", DIR(), LIST_O, DirectorySymbol, LIST_C); */ } } /* clean and scrub targets */ printf("\nclean :\n"); printf(" delete *%s.*, %s.exe.*", OBJ_FILE_SUFFIX, project); if ( strcmp(outdir, ".")!=0 ) printf(" %s*%s;*", DIR(), OBJ_FILE_SUFFIX); printf("\n"); printf("\nscrub :\n"); printf(" delete *%s.*, %s.exe;*", OBJ_FILE_SUFFIX, project); if ( strcmp(outdir, ".")!=0 ) printf(", %s*%s.*", DIR(), OBJ_FILE_SUFFIX); printf(", $(ANTLR_SPAWN_ALL_VERSIONS)"); if ( !user_lexer ) printf(", $(DLG_SPAWN_ALL_VERSIONS)"); printf("\n");}pfiles(files, n, suffix)char **files;int n;char *suffix;{ int first=1; while ( n>0 ) { char *p = &(*files)[strlen(*files)-1]; if ( !first ) putchar(' '); first=0; while ( p > *files && *p != '.' ) --p; if ( p == *files ) { fprintf(stderr, "genmk: filenames must be file.suffix format: %s\n", *files); exit(-1); } if ( suffix == NULL ) printf("%s", *files); else { *p = '\0'; printf("%s", DIR()); if ( strcmp(suffix, "o")==0 ) printf("%s%s", *files, OBJ_FILE_SUFFIX); else printf("%s.%s", *files, suffix); *p = '.'; } files++; --n; }}pclasses(classes, n, suffix)char **classes;int n;char *suffix;{ int first=1; while ( n>0 ) { if ( !first ) putchar(' '); first=0; if ( suffix == NULL ) printf("%s", *classes); else { printf("%s", DIR()); if ( strcmp(suffix, "o")==0 ) printf("%s%s", *classes, OBJ_FILE_SUFFIX); else printf("%s.%s", *classes, suffix); } classes++; --n; }}static void#ifdef __STDC__ProcessArgs( int argc, char **argv, Opt *options )#elseProcessArgs( argc, argv, options )int argc;char **argv;Opt *options;#endif{ Opt *p; require(argv!=NULL, "ProcessArgs: command line NULL"); while ( argc-- > 0 ) { p = options; while ( p->option != NULL ) { if ( strcmp(p->option, "*") == 0 || strcmp(p->option, *argv) == 0 ) { if ( p->arg ) { (*p->process)( *argv, *(argv+1) ); argv++; argc--; } else (*p->process)( *argv ); break; } p++; } argv++; }}fatal( err_)char *err_;{ fprintf(stderr, "genmk: %s\n", err_); exit(1);}warn( err_)char *err_;{ fprintf(stderr, "genmk: %s\n", err_);}char *DIR(){ static char buf[200+1]; if ( strcmp(outdir,TopDirectory)==0 ) return ""; sprintf(buf, "%s", outdir); return buf;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -