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

📄 kcsj.cpp

📁 某个程序字符出现的标志 例如 a 0 1
💻 CPP
字号:
#include<string.h>//字符串处理
#include<stdio.h>
#include<stdlib.h>//通用函数
char blz[37][50]={"auto","_bool","break","case","char","_complex","const","continue","default",
                  "restrict","do","double","else","enum","extern","float","for","goto","if",
                  "_imaginary","inline","int","long","register","return","short","signed",
                  "sizeof","static","struct","switch","typedef","union","unsigned","void",
                  "volatile","while"};                                      /*定义保留字数组*/
                                            
char fgf[14]={'#','(',')','[',']','\'','|',';',':','"','{','}',',','\\'};   /*分隔符数组*/
char ysf[36][50]={"!","%","^","&","*","-","+","=","~","|",".","<",">","/","?","+=","-=",
                 "*=","/=","%=","<<=",">>=","&=","^=","|=","->","++","--","<<",">>","<=",
                 ">=","==","!=","&&","||"};                                 /*运算符数组*/
 int Jwl=0;
 int Pwl=0;
 int Qwl=0;
 int Ywl=0;
 int Nwl=0;
 int Mwl=0;
 int Hwl=0;
 FILE *fpout;
 FILE *fptmp;
 int IsYsf(char n)                 /*判断一个字符是否是运算符的组成部分*/
 {
     int i,j;
     for(i=0;i<36;i++)
		 for(j=0;j<50;j++)
         if(n==ysf[i][j])return(1);
         return(0);
 }
 int IsFgf(char n)                 /*判断一个字符是否是分隔符*/
 {  
     int i;
     for(i=0;i<14;i++)
         if(n==fgf[i])return(1);
     return(0);
 }
 
int IsNum(int n)                   /*判断一个字符是否是数字*/
{
    if(n>='0'&&n<='9')return(1);
    else return(0);
}

int IsChar(char a)                 /*判断一个字符是否是浮点型常量的独有字符*/
{
    int i;
    char na[5]={'.','+','-','e','E'};
    for(i=0;i<5;i++)
    if(na[i]==a)
    return(1);
    return(0);
}
int Judge(int n)                   /*判断一个字符是否是标识符的首字符*/
{
    if((n>='a'&&n<='z')||(n>='A'&&n<='Z')||n=='_')
      return(1);
    return(0);
}
void writefile(FILE *fptmp,FILE *fpout) /*将输出内容写入指定文件*/
{
	char c;
	c=fgetc(fptmp);
	while(c!=EOF)
	{
		fprintf(fpout,"%c",c);
		c=fgetc(fptmp);
	}

}

      char name[50];
      char path[50];                /*输出文件的路径*/ 
int Cheak(FILE *fp)                 /*主判断函数*/
{
     char dd[40];
     int i,j,k;
     int flag=1;
     char cc=fgetc(fp);
     if(cc=='\'')                   /*对字符型常量的处理*/   
    {  
         dd[0]='\'';
         j=1;
         cc=fgetc(fp);
         while(cc!='\'')                 
        {
            dd[j]=cc;
            cc=fgetc(fp);
            j++;
        }
        dd[j]='\'';
        dd[++j]='\0';
        printf("4     2     %d     %s\r\n",Pwl,dd);
		Pwl++;
        return(1);
    }                                      
   
    else if(cc=='"')               /*对字符串型常量的处理*/ 
    {
        j=1;
        dd[0]=cc;
        cc=fgetc(fp);
        while(cc!='"' && cc!=EOF)
        {
            dd[j]=cc;
            cc=fgetc(fp);
            j++;
        }
         dd[j]=cc;
         dd[++j]='\0';
         printf("4     3     %d     %s\r\n",Qwl,dd);
		 Qwl++;
         return(1);
    }                                 
 
    else if(cc=='0')              /*对以0开头的常量的处理*/
    {
        i=1;
        dd[0]=cc;                               
        cc=fgetc(fp);
        if(cc=='.')
        {
            dd[i]=cc;
            i++;
            while(IsNum(cc)||IsChar(cc))
            {
                dd[i]=cc;
                cc=fgetc(fp);
                i++;
            }
            dd[i]='\0';
            fseek(fp,-1,1);
            printf("4     1     %d     %s\r\n",Ywl,dd);
			Ywl++;
            return(1);
        }
		else
        fseek(fp,-1,1);
        printf("4     0     %d     0\r\n",Nwl);
		Nwl++;
        return(1);
    }
    else if(cc>'0'&&cc<='9')      /*对浮点和整型常量的处理*/    
    {
         j=1;
         dd[0]=cc;
         cc=fgetc(fp);
         while(IsNum(cc)||IsChar(cc))
        {
             dd[j]=cc;
             cc=fgetc(fp);
             j++;
        }
        dd[j]='\0';
        fseek(fp,-1,1); 
        for(k=0;k<j;k++)
        if(IsChar(dd[k]))
        {
            flag=0; 
            printf("4     1     %d     %s\r\n",Mwl,dd);
			Mwl++;
            return(1);
        }
        if(flag)
        {
            printf("4     0     %d     %s\r\n",Hwl,dd);
			Hwl++;
            return(1);
        }
    }     
 
    else if(Judge(cc))             /*对标识符的处理*/
    {       
        i=1;
        dd[0]=cc;                   
        cc=fgetc(fp);
        while(Judge(cc)||(cc>='0'&&cc<='9'))
        {      
            dd[i]=cc;
            cc=fgetc(fp);
            i++;
        }
        fseek(fp,-1,1); 
        dd[i]='\0';
        for(j=0;j<37;j++)
        { 
            if(strcmp(dd,blz[j])==0)
            { 
                printf("0        %d        %s\r\n",j,blz[j]);
                return(1);
            }
            else
            {
                printf("3        %d        %s\r\n",Jwl,dd);
                Jwl++;
                return(1);
            }
        }
    }
    else if(IsFgf(cc))             /*对分隔符的处理*/
    {
        for(i=0;i<14;i++)
				if(cc==fgf[i])
                printf("1        %d        %c\r\n",i,cc);
	
            return(1);
    }
    else if(IsYsf(cc))  
            {
                j=1;
                dd[0]=cc;
                cc=fgetc(fp);
                while(IsYsf(cc))   /*对运算符的处理,完成*/
                {
                    dd[j]=cc;
                    j++;
                    cc=fgetc(fp);
                }
                dd[j]='\0';
                fseek(fp,-1,1);
                if(j<3)
                {
				for(k=0;k<35;k++)
                if(strcmp(dd,ysf[k])==0)
                {
                    printf("2        %d        %s\r\n",k,ysf[k]);
                    return(1);
                }
				}
                 else 
                {
                    printf("This string is not exist!\n");
                    return(0);
                } 
            }
    return(0);
}   
void scanner_Chuiser(FILE *fp){   /*主处理函数*/
    char ch;
    ch=fgetc(fp);
    while(ch!=EOF)
    {
        
        if(ch=='/')
        {                         /*对注释的处理*/
             ch=fgetc(fp);
             if(ch=='*')
             {
                 while ((ch=fgetc(fp))!='*'){}
                 ch=fgetc(fp);
                 if (ch=='/');
                 else
                 {
                     printf ("The remark of the source file error!\n");
                     exit(0);
                 }
             }
             else {
				 fseek(fp,-2,1);Cheak(fp);
			 }
         }
        else  {
			fseek(fp,-1,1);Cheak(fp);
		}
        ch=fgetc(fp);
    }
}         
void main(int argc,char *argv[])    /*主函数*/
{   FILE *fp;
	if((fptmp=fopen("tmp.txt","w"))==NULL)  /*tmp.txt用于暂存输出内容*/
	{
        exit(0);
	}
    printf ("Please input the name of the source file\n");
    printf ("For example: ->  c:\\project\\file.c  <- \n");
    printf ("Enter:  "); 
	gets(name);
    printf ("The internal code translation list:\n");
    if ((fp=fopen(name,"r"))==NULL)
    {
        printf ("Can't open the file\n");
        exit(0);
    }
    scanner_Chuiser(fp);
    fclose(fp);
	fclose(fptmp);
    printf ("Please input the path of the destination file\n");
    printf ("For example: ->  c:\\project\\output.txt  <- \n");
    printf ("Enter:  "); 
	gets(path);
    if ((fpout=fopen(path,"w"))==NULL)
    {
        printf ("Can't open the output file!\n");
        exit(0);
    }
    if ((fptmp=fopen("tmp.txt","r"))==NULL)
    {
        exit(0);
    }
	writefile(fptmp,fpout);
    printf ("Save completed! \n"); 
    fclose(fpout);
	fclose(fptmp);
}


    //FILE *fp;
    //printf ("Please input the name of the source file\n");
    //printf ("For example: ->  c:\\project\\file.c  <- \n");
    //printf ("Enter:  "); 
   // scanf ("%s",name);       
    //printf ("Stdio.h文件中的程序代码部分 :\n");
    //if ((fp=fopen(name,"r"))==NULL)
    //{
     //   printf ("Can't open the file\n");
     //   exit(0);
    //}
   // scanner_Chuiser(fp);
   // fclose(fp);
//}
 

⌨️ 快捷键说明

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