?? main.c
字號:
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 + -