📄 wordcompiler.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 + -