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

📄 genmk.c

📁 本工具提供一个词法分析器和语法分析器的集成开发环境
💻 C
📖 第 1 页 / 共 2 页
字号:
			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 + -