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

📄 wordcompiler.c

📁 C语言实现
💻 C
字号:
#include<stdio.h>
#include<string.h>
#include<ctype.h>
char token[20];
char ch;
int i,c;
FILE *fp2;
struct table
{
		int id;
		char code[10];
};
struct table key[31] = {{1,"main"},{2,"int"},{3,"char"},{4,"if"},{5,"else"},{6,"for"},{7,"while"},{10,"ID"},{20,"NUM"},{-1,"ERROR"}};
int reserve(char* p)
{		int i=0;
		for(i=0;i<9;i++)
		{
				if(strcmp(p,key[i].code)==0)
				return(key[i].id);
		}
		return(-1);
}
/*void output(int t,char *s)
{
		printf("[ %-2d , %-6s ]",t,s);
}*/
void output(int t,char *s)
{
		fprintf(fp2,"[ %-2d , %-6s ]",t,s);
}
/*void output1(char *s)
{
    fprintf(fp2,"%s",s);
}*/    
    
void scanner(FILE *fp)
{
	ch=fgetc(fp);
	if(isalpha(ch))//为字母时 
	{
		token[0]=ch;
		i=1;
		ch=fgetc(fp);
		while(isalpha(ch)||isalnum(ch))
		{
			token[i]=ch;
			i++;
			ch=fgetc(fp);
		}
		fseek(fp,-1,1);
		token[i]='\0';
		c=reserve(token);
		if(c!=-1)
		      output(c,token);
		      //output1(token);
		else
		      output(10,token);
		      //output1(token);
	}
	else if(isdigit(ch)) //为数字时 
	     {
		token[0]=ch;
		ch=fgetc(fp);
		i=1;
		while(isdigit(ch))
		{
			token[i]=ch;
			i++;
			ch=fgetc(fp);
		}
		token[i]='\0';
		fseek(fp,-1,1);
		output(11,token);
		//output1(token);
	     }
	else
		switch(ch)
		{
			case'=':ch=fgetc(fp);
				if(ch=='=')
					output(39,"==");
					//output1("==");
				else
				{
				fseek(fp,-1,1);
				output(21,"=");
				//output1("=");
				}
				break;
			case'+':output(22,"+");
                    //output1("+");
                    break;
			case'-':output(23,"-");
                    //output1("-");
                    break;
			case'*':output(24,"*");
                    //output1("*");
                    break;
			case'/':output(25,"/");
                    //output1("/");
                    break;
			case'(':output(26,"(");
                    //output1("(");
                    break;
			case')':output(27,")");
                    //output1(")");
                    break;
			case'[':output(28,"[");
                    //output1("[");
                    break;
			case']':output(29,"]");
                    //output1("]");
                    break;
			case'{':output(30,"{");
                    //output1("{");
                    break;
			case'}':output(31,"}");
                    //output1("}");
                    break;
			case',':output(32,",");
                    //output1(",");
                    break;
			case':':output(33,":");
                    //output1(":");
                    break;
			case';':output(34,";");
                    //output1(";");
                    break;
			case'>':ch=fgetc(fp);
				if(ch=='=')
					output(37,">=");
					//output1(">=");
				else
				{
				fseek(fp,-1,1);
				//output1(">");
				output(35,">");
				}
				break;
			case'<':ch=fgetc(fp);
				if(ch=='=')
					output(38,"<=");
					//output1("<=");
				else
				{
				fseek(fp,-1,1);
				//output1("<");
				output(36,"<");
				}
				break;
			case'!':ch=fgetc(fp);
				if(ch=='=')
					output(40,"!=");
					//output1("!=");
				else
				{
				fseek(fp,-1,1);
				output(-1,"ERROR!");
				//output1("ERROR!");
				}
				break;
		}

}
int main()
{   FILE *fp;
	char resource[30],destination[30];
	printf("Please input the file you want to transform:");
	scanf("%s",&resource);
	printf("Please input the file you want to store:");
	scanf("%s",&destination);
	fp=fopen(resource,"r");
	fp2=fopen(destination,"w");
	while(!feof(fp))
	{
		scanner(fp);
	}
	while(1);
	return 0;
}

⌨️ 快捷键说明

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