📄 genmk.c
字号:
printf(" $(ANTLR_H)%s%s", DirectorySymbol, PCCTSAST_C);/* printf(" $(ANTLR_H)%s%s", DirectorySymbol, LIST_C); */ printf(" \\\n "); } printf(" $(ANTLR_H)%s%s", DirectorySymbol, ATOKENBUFFER_C); } if ( !user_lexer ) { if ( gen_CPP ) printf(" $(SCAN)%s", CPP_FILE_SUFFIX); else printf(" %s$(SCAN).c", DIR()); } if ( !gen_CPP ) printf(" $(ERR).c"); printf("\n"); printf("OBJ = "); pfiles(files, n, "o"); if ( gen_CPP ) { printf(" \\\n "); 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(" \\\n "); } 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"); if ( !gen_CPP ) printf(" $(MOD_FILE)"); printf("\n"); } if ( gen_CPP ) { printf("#CCC=g++\n"); printf("CCC=CC\n"); } else printf("#CC=cc\n"); /* set up dependencies */ printf("\n%s : $(OBJ) $(SRC)\n", project); printf(" %s %s %s $(CFLAGS) $(OBJ)\n", gen_CPP?"$(CCC)":"$(CC)", RENAME_EXE_FLAG, project); printf("\n"); /* how to compile parser files */ for (i=0; i<num_files; i++) { pfiles(&files[i], 1, "o"); 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 -c $(CFLAGS) %s ",gen_CPP?"$(CCC)":"$(CC)",RENAME_OBJ_FLAG); pfiles(&files[i], 1, "o"); 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 -c $(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, "o"); 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 -c $(CFLAGS) %s ", gen_CPP?"$(CCC)":"$(CC)", RENAME_OBJ_FLAG); pclasses(&classes[i], 1, "o"); 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) -c $(CFLAGS) %s $(SCAN)%s $(SCAN)%s", RENAME_OBJ_FLAG, OBJ_FILE_SUFFIX, CPP_FILE_SUFFIX); else printf(" $(CC) -c $(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%s\n", DIR(), APARSER_O, DirectorySymbol, APARSER_C); printf(" %s -c $(CFLAGS) %s ", gen_CPP?"$(CCC)":"$(CC)", RENAME_OBJ_FLAG); printf("%s%s $(ANTLR_H)%s%s\n", DIR(), APARSER_O, DirectorySymbol, APARSER_C); printf("\n"); printf("%s%s : $(ANTLR_H)%s%s\n", DIR(), ATOKENBUFFER_O, DirectorySymbol, ATOKENBUFFER_C); printf(" %s -c $(CFLAGS) %s ", gen_CPP?"$(CCC)":"$(CC)", RENAME_OBJ_FLAG); printf("%s%s $(ANTLR_H)%s%s\n", DIR(), ATOKENBUFFER_O, DirectorySymbol, ATOKENBUFFER_C); if ( !user_lexer ) { printf("\n"); printf("%s%s : $(ANTLR_H)%s%s\n", DIR(), DLEXERBASE_O, DirectorySymbol, DLEXERBASE_C); printf(" %s -c $(CFLAGS) %s ", gen_CPP?"$(CCC)":"$(CC)", RENAME_OBJ_FLAG); printf("%s%s $(ANTLR_H)%s%s\n", DIR(), DLEXERBASE_O, DirectorySymbol, DLEXERBASE_C); } if ( gen_trees ) { printf("\n"); printf("%s%s : $(ANTLR_H)%s%s\n", DIR(), ASTBASE_O, DirectorySymbol, ASTBASE_C); printf(" %s -c $(CFLAGS) %s ", gen_CPP?"$(CCC)":"$(CC)", RENAME_OBJ_FLAG); printf("%s%s $(ANTLR_H)%s%s\n", DIR(), ASTBASE_O, DirectorySymbol, ASTBASE_C); printf("\n"); printf("%s%s : $(ANTLR_H)%s%s\n", DIR(), PCCTSAST_O, DirectorySymbol, PCCTSAST_C); printf(" %s -c $(CFLAGS) %s ", gen_CPP?"$(CCC)":"$(CC)", RENAME_OBJ_FLAG); printf("%s%s $(ANTLR_H)%s%s\n", DIR(), PCCTSAST_O, DirectorySymbol, 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(" rm -f *%s core %s", OBJ_FILE_SUFFIX, project); if ( strcmp(outdir, ".")!=0 ) printf(" %s*%s", DIR(), OBJ_FILE_SUFFIX); printf("\n"); printf("\nscrub:\n"); printf(" rm -f *%s core %s", OBJ_FILE_SUFFIX, project); if ( strcmp(outdir, ".")!=0 ) printf(" %s*%s", DIR(), OBJ_FILE_SUFFIX); printf(" $(ANTLR_SPAWN)"); if ( !user_lexer ) printf(" $(DLG_SPAWN)"); 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%s", outdir, DirectorySymbol); return buf;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -