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

📄 main.c

📁 使用flex和bison
💻 C
📖 第 1 页 / 共 2 页
字号:
	else
	{
		outlineno++;
		fprintf(yyout,"%5d:\t%5d\n",outlineno,ICHEAP);
	}
}
void dcrmheap()
{
		if(ofiletype==1)
			fprintf(yyout,"%5d:%10s\n",outlineno++,looktokentable(DEHEAP));
		else
		{
			outlineno++;
			fprintf(yyout,"%5d:\t%5d\n",outlineno,DEHEAP);
		}
}

void casego()
{
	fgosssss();
	sprintf(szgo1,"%s",szgosssss);
	fgosssss();
	sprintf(szgo2,"%s",szgosssss);
	if(ofiletype==1)
	{
		fprintf(yyout,"%5d:%10s\t%s\t%s\n",outlineno++,looktokentable(CASERESULT),szgo1,szgo2);
		fprintf(yyout,"%5d:%s\n",outlineno++,szgo1);
	}
	else
	{
		outlineno++;
		fprintf(yyout,"%5d:\t%5d\t%s\t%s\n",outlineno,CASERESULT,szgo1,szgo2);
		outlineno++;
		fprintf(yyout,"%5d:\t%5s\n",outlineno,nop);
	}
	
	addlinevartable(szgo1);
	addlineinfotable(szgo1,outlineno-2);
	addlineinfotable(szgo2,outlineno-2);
}

void switchgo(void)
{
	fgosssss();
	sprintf(szswitchend,"%s",szgosssss);

}
void whilego(void)
{
	//printf("whilego\n");
	fgosssss();
	sprintf(szgo1,"%s",szgosssss);
	fgosssss();
	sprintf(szgo2,"%s",szgosssss);
	if(ofiletype==1)
	{
		fprintf(yyout,"%5d:%10s\n",outlineno++,szgo1);
	
	}
	else
	{
		outlineno++;
		fprintf(yyout,"%5d:\t%5s\n",outlineno,nop);
	
	}
	
	addlinevartable(szgo1);


}
void whilego2(void)
{

	if(ofiletype==1)
	{
		fprintf(yyout,"%5d:%10s\t%s\n",outlineno++,looktokentable(WHILERESULT),szgo2);
	
	}
	else
	{
		outlineno++;
		fprintf(yyout,"%5d:\t%5d\t%s\n",outlineno,WHILERESULT,szgo2);
	
	}
	

	addlineinfotable(szgo2,outlineno-1);

}
void whilego3(void)
{

	if(ofiletype==1)
	{
		fprintf(yyout,"%5d:%10s\t%s\n",outlineno++,looktokentable(WHILEEND),szgo1);
	
	}
	else
	{
		outlineno++;
		fprintf(yyout,"%5d:\t%5d\t%s\n",outlineno,WHILEEND,szgo1);
	
	}
	

	addlineinfotable(szgo1,outlineno-1);
	addlinevartable(szgo2,outlineno);

}
void breakgo(void)
{
	if(ofiletype==1)
	{	
		fprintf(yyout,"%5d:%s\n",outlineno++,szgo2);
	}
	else
	{
		outlineno++;
		fprintf(yyout,"%5d:\t%5s\n",outlineno,nop);
	}

	addlinevartable(szgo2);
//	addlineinfotable(szgo2);

}
void rightelseifgo()
{
	if(ofiletype==1)
	{	
		fprintf(yyout,"%5d:%s\n",outlineno++,szgo2);
	}
	else
	{
	outlineno++;
	fprintf(yyout,"%5d:\t%5s\n",outlineno,nop);
	}
	
	addlinevartable(szgo2);
//	addlineinfotable(szgo2);
}

void rightelsesfgo()
{
	if(ofiletype==1)
	{	
		fprintf(yyout,"%5d:%s\n",outlineno++,szgo2);

	}
	else
	{
		outlineno++;
		fprintf(yyout,"%5d:\t%5s\n",outlineno,nop);
	}
	addlinevartable(szgo2);
//	addlineinfotable(szgo2);
}
void elseifgo()
{
	fgosssss();
	sprintf(szgo1,"%s",szgosssss);
	fgosssss();
	sprintf(szgo2,"%s",szgosssss);
	if(ofiletype==1)
	{
		fprintf(yyout,"%5d:%10s\t%s\t%s\n",outlineno++,looktokentable(RESULT),szgo1,szgo2);
		fprintf(yyout,"%5d:%s\n",outlineno++,szgo1);
	}
	else
	{
		outlineno++;
		fprintf(yyout,"%5d:\t%5d\t%s\t%s\n",outlineno,RESULT,szgo1,szgo2);
		outlineno++;
		fprintf(yyout,"%5d:\t%5s\n",outlineno,nop);
	}


	addlinevartable(szgo1);
addlineinfotable(szgo1,outlineno-2);
	addlineinfotable(szgo2,outlineno-2);

}
void elsesfgo()
{
	fgosssss();
	sprintf(szgo1,"%s",szgosssss);
	fgosssss();
	sprintf(szgo2,"%s",szgosssss);
	if(ofiletype==1)
	{
		fprintf(yyout,"%5d:%10s\t%s\t%s\n",outlineno++,looktokentable(RESULT),szgo1,szgo2);
		fprintf(yyout,"%5d:%s\n",outlineno++,szgo1);
	}
	else
	{
		outlineno++;
		fprintf(yyout,"%5d:\t%5d\t%s\t%s\n",outlineno,RESULT,szgo1,szgo2);
		outlineno++;
		fprintf(yyout,"%5d:\t%5s\n",outlineno,nop);
	}


	addlinevartable(szgo1);
	addlineinfotable(szgo1,outlineno-2);
	addlineinfotable(szgo2,outlineno-2);
}
/*
void elsesfgo()
{
	fgosssss();
	sprintf(szgo1,"%s",szgosssss);
	fgosssss();
	sprintf(szgo2,"%s",szgosssss);
	if(ofiletype==1)
	{
		fprintf(yyout,"%5d:%10s\t%s\t%s\n",outlineno++,looktokentable(TESTSF),szgo1,szgo2);
		fprintf(yyout,"%5d:%s\n",outlineno++,szgo1);
	}
	else
	{
		outlineno++;
		fprintf(yyout,"%5d\t%s\t%s\n",TESTSF,szgo1,szgo2);
		outlineno++;
		fprintf(yyout,"%5s\n",nop);
	}


	addlinevartable(szgo1);
	addlineinfotable(szgo1,outlineno-2);
	addlineinfotable(szgo2,outlineno-2);
}
*/
void dumpheap()
{
	int i = 0;
	fprintf(dumpfile,"dump 堆栈:大小%d\n",result_heap_k);
	fprintf(dumpfile,"%15s %10s %10s\n","currentboolresult","szgo1","szgo2");
	for(;i<result_heap_k;i++)
	{
		//dump(boolresult[i].bool_result,boolresult[i].szgo1,boolresult[i].szgo2);
		fprintf(dumpfile,"%5d %10s %10s \n",boolresult[i].bool_result,boolresult[i].szgo1,boolresult[i].szgo2);
	}
	i=0;
	fprintf(dumpfile,"dump 字符串变量列表:大小%d\n",string_k_count);
	fprintf(dumpfile,"%15s %10s %10s\n","varlevel(string_k)","strname","strvalue");
	for(;i<string_k_count;i++)
	{
		//dump(boolresult[i].bool_result,boolresult[i].szgo1,boolresult[i].szgo2);
		fprintf(dumpfile,"%15d %10s %10s \n",vstringheap[i].string_k,vstringheap[i].string_name,vstringheap[i].string_value);
	}
	i=0;
	fprintf(dumpfile,"dump 整型变量列表:大小%d\n",int_k_count);
	fprintf(dumpfile,"%5s %10s %10s\n","varlevel","intname","intvalue");
	for(;i<int_k_count;i++)
	{
		fprintf(dumpfile,"%5d %10s %10d \n",vintheap[i].int_k,vintheap[i].int_name,vintheap[i].int_value);
	}

}

void dump(int i)
{
	char szname[100], sztemp1[100],sztemp2[100];
	strcpy(sztemp1,szgo1);
	strcpy(sztemp2,szgo2);
	if(strlen(szgo1)==0)
			sprintf(sztemp1,"%s","null");
	if(strlen(szgo2)==0)
			sprintf(sztemp2,"%s","null");
		
	if(i==-1)
	{
		sprintf(szname,"%s","start");
		fprintf(dumpfile,"进堆栈 %10s,%10s %10s \n",szname,sztemp1,sztemp2);
	}
	else if(i==0)// state 
	{
		sprintf(szname,"%s","state");
		fprintf(dumpfile,"进堆栈 %10s,%10s %10s \n",szname,sztemp1,sztemp2);
	}
	else if(i==1)
	{
		sprintf(szname,"%s","init");
		fprintf(dumpfile,"进堆栈 %10s,%10s %10s \n",szname,sztemp1,sztemp2);
	}
	else if(i==2)
	{
		sprintf(szname,"%s","proc");
		fprintf(dumpfile,"进堆栈 %10s,%10s %10s \n",szname,sztemp1,sztemp2);
	}
	else if(i==3)
	{
		sprintf(szname,"%s","if");
		fprintf(dumpfile,"进堆栈 %10s,%10s %10s \n",szname,sztemp1,sztemp2);
	}
	else if(i==5)
	{
		sprintf(szname,"%s","else");
		fprintf(dumpfile,"进堆栈 %10s,%10s %10s \n",szname,sztemp1,sztemp2);
	}
	else if(i==6)
	{
		sprintf(szname,"%s","switch");
		fprintf(dumpfile,"进堆栈 %10s,%10s %10s \n",szname,sztemp1,sztemp2);
	}
	else if(i==7)
	{
		sprintf(szname,"%s","elseif");
		fprintf(dumpfile,"进堆栈 %10s,%10s %10s \n",szname,sztemp1,sztemp2);
	}
	else if(i==8)
	{
		sprintf(szname,"%s","case");
		fprintf(dumpfile,"进堆栈 %10s,%10s %10s \n",szname,sztemp1,sztemp2);
	}
	else if(i==9)
	{
		sprintf(szname,"%s","default");
		fprintf(dumpfile,"进堆栈 %10s,%10s %10s \n",szname,sztemp1,sztemp2);
	}
	else
	{
		sprintf(szname,"%s","unknown");
		fprintf(dumpfile,"进堆栈 %10s,%10s %10s \n",szname,sztemp1,sztemp2);
	}

	
}

void dumpout(int i)
{
	char szname[100], sztemp1[100],sztemp2[100];
	strcpy(sztemp1,szgo1);
	strcpy(sztemp2,szgo2);
	if(strlen(szgo1)==0)
			sprintf(sztemp1,"%s","null");
	if(strlen(szgo2)==0)
			sprintf(sztemp2,"%s","null");
		
	if(i==-1)
	{
		sprintf(szname,"%s","start");
		fprintf(dumpfile,"出堆栈 %10s,%10s %10s \n",szname,sztemp1,sztemp2);
	}
	else if(i==0)// state 
	{
		sprintf(szname,"%s","state");
		fprintf(dumpfile,"出堆栈 %10s,%10s %10s \n",szname,sztemp1,sztemp2);
	}
	else if(i==1)
	{
		sprintf(szname,"%s","init");
		fprintf(dumpfile,"出堆栈 %10s,%10s %10s \n",szname,sztemp1,sztemp2);
	}
	else if(i==2)
	{
		sprintf(szname,"%s","proc");
		fprintf(dumpfile,"出堆栈 %10s,%10s %10s \n",szname,sztemp1,sztemp2);
	}
	else if(i==3)
	{
		sprintf(szname,"%s","if");
		fprintf(dumpfile,"出堆栈 %10s,%10s %10s \n",szname,sztemp1,sztemp2);
	}
	else if(i==5)
	{
		sprintf(szname,"%s","else");
		fprintf(dumpfile,"出堆栈 %10s,%10s %10s \n",szname,sztemp1,sztemp2);
	}
	else if(i==6)
	{
		sprintf(szname,"%s","switch");
		fprintf(dumpfile,"出堆栈 %10s,%10s %10s \n",szname,sztemp1,sztemp2);
	}
	else if(i==8)
	{
		sprintf(szname,"%s","case");
		fprintf(dumpfile,"出堆栈 %10s,%10s %10s \n",szname,sztemp1,sztemp2);
	}
	else if(i==9)
	{
		sprintf(szname,"%s","default");
		fprintf(dumpfile,"出堆栈 %10s,%10s %10s \n",szname,sztemp1,sztemp2);
	}
	else
	{
		sprintf(szname,"%s","unknown");
		fprintf(dumpfile,"出堆栈 %10s,%10s %10s \n",szname,sztemp1,sztemp2);
	}
}


int lookgoline(char*s)
{
	int i=0;
	for(;i<linevarpoint;i++)
	{
	   if(strcmp(linevar[i].gooooo,s)==0)
		   return linevar[i].lineno;
   
	}
	return -1;
}

void main(int argc,char *argv[])
{

	FILE *source;
	FILE *tempfile;
	FILE *code;

	char codefile[120];
	int fnlen;
	char pgm[120]; 
	char *stempfile=NULL;
	char *sdumpfile=NULL;
	int btempfile=0;
	int bdumpfile=0;
	int i=0;
	int j = 0;
	int foundline1=-1;
	int foundline2=-1;
	int lineindex=0;
	char linetemp[1024];
	char *linetempstart;
	char s1[1024];
	char s2[1024];	
	char s3[1024];	
	char s4[1024];
	char s[100];
	sprintf(szgo1,"%s","");
	sprintf(szgo2,"%s","");

	if (argc < 3)
    {
		printf("Options:\n");
		printf("-f	input file		: Specify which flow to compile.\n");
		printf("-t	type			: Specify flowtype for compile,default ,1 for userflow,2 for agentflow .\n");
	//	printf("-o  output file			: Write to this file.\n");
		printf("-h  help			: Show this message.\n");
		printf("-m  middle file			: temp file\n");
		printf("-d  dump file			: dump file\n");
		exit(1);
    }

	for(i=1;i<argc;i++)
		{
			printf("[%d][%s]\n",i,argv[i]);
			if(strcmp(argv[i],"-h")==0)
			{
					printf("Options:\n");
					printf("-f	input file		: Specify which flow to compile.\n");
					printf("-t	type			: Specify flowtype for compile,default ,1 for userflow,2 for agentflow .\n");
				//	printf("-o  output file			: Write to this file.\n");
					printf("-h  help			: Show this message.\n");
					printf("-m  middle file			: temp file\n");
					printf("-d  dump file			: dump file\n");
					exit(1);
			}
			else if(strcmp(argv[i],"-f")==0)
			{
					strcpy(pgm,argv[i+1]) ;
					if (strchr (pgm, '.') == NULL)
					  strcat(pgm,".sff");
					filename=pgm;
					i++;
			}
			else if(strcmp(argv[i],"-t")==0)
			{
					flowtype = atoi(argv[i+1]);
					i++;
			}
			else if(strcmp(argv[i],"-m")==0)
			{
					btempfile = 1;
					stempfile = argv[i+1];
					i++;
			}
			else if(strcmp(argv[i],"-d")==0)
			{
					bdumpfile = 1;
					sdumpfile = argv[i+1];
					i++;
			}
			else
			{
				printf("error argument %s\n",argv[i]);
				exit(0);
			}
	}

	fnlen = strcspn(pgm,".");
    strncpy(codefile,pgm,fnlen);
	codefile[fnlen]='\0';
    strcat(codefile,".dff");
	source = fopen(pgm,"r");
	if(!source)
	{
		fprintf(stderr,"cound not open %s \n",pgm);
		exit(1);
	}
	yyin = source;
	if(stempfile==NULL)
		stempfile="temp.o";
	if(sdumpfile==NULL)
		sdumpfile="dump.o";
	tempfile = fopen(stempfile,"w");
	dumpfile = fopen(sdumpfile,"w");
	yyout = tempfile;
	inittable();
	 initconstanttable();
	printf("Compiling...\n");
   
	yyparse();

	fclose(tempfile);
	fclose(source);
    if(errcount!=0)
	{
		fclose(dumpfile);
		if(!btempfile)
			unlink(stempfile);
		if(!bdumpfile)
			unlink(sdumpfile);
		printf("%s -  %d error(s) \n",codefile,errcount);
		//fprintf(stderr,"%s -  %d error(s) \n",codefile,errcount);
		exit(1);
	}

	fprintf(dumpfile,"dump lineinfo列表:大小%d\n",lineinfopoint);
	fprintf(dumpfile,"%10s %10s \n","lineno","gooooo");
	for(;i<lineinfopoint;i++)
	{
		fprintf(dumpfile,"%10d %10s\n",lineinfo[i].lineno,lineinfo[i].gooooo);
	}
	i = 0;
	fprintf(dumpfile,"dump linevar列表:大小%d\n",linevarpoint);
	fprintf(dumpfile,"%10s %10s \n","gooooo","line");
	for(;i<linevarpoint;i++)
	{
		fprintf(dumpfile,"%10s %10d\n",linevar[i].gooooo,linevar[i].lineno);
	}
	fclose(dumpfile);

	if(!bdumpfile)
		unlink(sdumpfile);
   

    if(ofiletype==1)
		return;
		


    code = fopen(codefile,"w");
	tempfile = fopen(stempfile,"r");
	j=0;
   
		
	fprintf(code,"%5d\t%d\n",10001,100);//版本号
	fprintf(code,"%5d\t%d\n",10002,outlineno);//总行号
	fprintf(code,"%5d\t%d\n",10003,strlines);//总行号
	fprintf(code,"%5d\t%d\n",10004,hangupprocline);//总行号
   	fprintf(code,"%5d\t%d\n",10005,sectioncount);//总行号
  	fprintf(code,"%5d\t%d\n",10006,onhookline);//总行号
  	fprintf(code,"%5d\t%d\n",10007,offhookline);//总行号
  	fprintf(code,"%5d\t%d\n",10008,userhangupline);//总行号
 	fprintf(code,"%5d\t%d\n",10009,usercallinline);//总行号
 	fprintf(code,"%5d\t%d\n",10010,agentdigitline);//总行号
	fprintf(code,"%5d\t%d\n",10011,agenteventprocline);//总行号
	fprintf(code,"%5d\t%d\n",10012,waiteventprocline);//总行号
	fprintf(code,"%5d\t%d\n",10013,interserviceline);//总行号
	while(1)
	{
		if (fgets(linetemp,1024,tempfile))
		{

			linetempstart = linetemp+7;
			lineindex++;
			if(lineindex==lineinfo[j].lineno)
			{	
				if(lineinfo[j+1].lineno==lineindex)
				{
					sscanf(linetempstart,"%s %s %s",s1,s2,s3);
					j=j+2;
					foundline1=lookgoline(s2);
					if(foundline1==-1)
					{
						printf("can't found %s\n",s2);
						errcount ++;	
					}
					foundline2=lookgoline(s3);
					if(foundline2==-1)
					{
						printf("can't found %s\n",s3);
						errcount ++;	
					}
					fprintf(code,"%5s\t%d\t%d\n",s1,foundline1,foundline2);
					
				}
				else
				{
					sscanf(linetempstart,"%s %s",s1,s2);	
					j++;
					foundline1=lookgoline(s2);
					if(foundline1==-1)
					{
						printf("can't found %s\n",s2);
						errcount ++;	
					}
					fprintf(code,"%5s\t%d\n",s1,foundline1);
				}
			}
			else
			{
				fprintf(code,"%s",linetempstart);
			}
		}
		else
		{
			break;
		}
	}
	fclose(tempfile);
	
	if(!btempfile)
			unlink(stempfile);
	

//	unlink("temp.o");
	fclose(code);
	if(errcount!=0)
	{
		//fprintf(stderr,"%s -  %d error(s) \n",codefile,errcount);	
		printf("%s -  %d error(s) \n",codefile,errcount);	
		unlink(codefile);
	}
	else
	{
		printf("%s -  success \n",codefile);	
	}
	return;
}

⌨️ 快捷键说明

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