📄 cifa.cpp
字号:
#include"stdio.h"
#include"string.h"
int compare (char a);
void explain (FILE *fp1, FILE *fp2);
void doshu (char a,char b[],char *pb,int d,FILE *fp1,FILE *fp2);
void dozimu (char a,char b[],char *pb,int d,FILE *fp1,FILE *fp2);
void dofuhao1 (char a,char b[],char *pb,int d,FILE *fp1,FILE *fp2);
void dofuhao2 (char a,char b[],char *pb,int d,FILE *fp1,FILE *fp2);
void doshu (char a,char b[],char *pb,int d,FILE *fp1,FILE *fp2){
int e=3;
while (d==3 || d==1 &&!feof(fp1)){
if (d!=3)
e=d;
*pb=a;
a=fgetc(fp1);
d=compare (a);
pb++;
}
if (e==3){
fputc('3',fp2);
fputc(':',fp2);
fprintf(fp2,"%s",b);
fputc('\n',fp2);
}
else{
fprintf(fp2,"error");
fputc(':',fp2);
fprintf(fp2,"%s",b);
fputc('\n',fp2);
}
if (d==4 && !feof(fp1))
dofuhao1(a,b,pb,d,fp1,fp2);
if (d==5 && !feof(fp1))
dofuhao2(a,b,pb,d,fp1,fp2);
}
void dozimu (char a,char b[],char *pb,int d,FILE *fp1,FILE *fp2){
char *a4[]={"main","int","char","if","else"};
int i;
int c=2;
while (d==3 || d==1 && !feof(fp1)){
*pb=a;
a=fgetc(fp1);
d=compare (a);
pb++;
}
for (i=0;i<5;i++){
if (strcmp(b,a4[i])==0){
c=1;
break;
}
}
fprintf(fp2,"%d",c);
fputc(':',fp2);
fprintf(fp2,"%s",b);
fputc('\n',fp2);
if (d==4 && !feof(fp1))
dofuhao1(a,b,pb,d,fp1,fp2);
if (d==5 && !feof(fp1))
dofuhao2(a,b,pb,d,fp1,fp2);
}
void dofuhao1 (char a,char b[],char *pb,int d,FILE *fp1,FILE *fp2){
*pb=NULL;
fputc('4',fp2);
fputc(':',fp2);
fputc(a,fp2);
fputc('\n',fp2);
}
void dofuhao2 (char a,char b[],char *pb,int d,FILE *fp1,FILE *fp2){
*pb=NULL;
fputc('5',fp2);
fputc(':',fp2);
fputc(a,fp2);
fputc('\n',fp2);
}
void main()
{
FILE *fp1, *fp2;
char loadname[100];
char savename[100];
printf ("您要解析的文件名?(包含扩展名)\n");
scanf ("%s", loadname);
fp1 = fopen (loadname, "r");
if (fp1 == NULL)
{
printf ("打开文件失败!\n");
goto ending;
}
printf ("解析的结果保存在...?(包含扩展名)\n");
scanf("%s", savename);
fp2 = fopen (savename, "w");
if (fp2 == NULL)
{
printf ("打开文件失败!\n");
goto ending;
}
explain (fp1, fp2);
fclose (fp1);
fclose (fp2);
printf ("解析成功!\n");
ending:
if (fp1==NULL || fp2==NULL)
{
printf ("解析失败!\n");
}
}
int compare (char a)
{
int i;
int j;
char a1[] ="1234567890.";
char a2[] ="()[]{}<>,; \n";
char a3[] ="+-*/=";
char *a4[] ={"main","int","char","if","while"};
for (i=0;a1[i] != NULL && a2[i] != NULL && a3[i] != NULL;i++){
if (a != a1[i]&& a!=a2[i] && a!=a3[i]){
j=1;
break;
}
}
for (i=0;a1[i] != NULL;i++){
if (a == a1[i]){
j=3;
break;
}
}
for (i=0;a2[i] != NULL;i++){
if (a == a2[i]){
j=4;
break;
}
}
for (i=0;a3[i] != NULL;i++){
if (a == a3[i]){
j=5;
break;
}
}
return j;
}
void explain (FILE *fp1, FILE *fp2)
{
char a;
char b[100];
char *pb = NULL;
int d;
char *a4[] ={"main","int","char","if","while"};
if (fp1 != NULL)
{
while (!feof(fp1))
{
memset (b, NULL, 100);
pb = b;
a = fgetc (fp1);
d = compare (a);
if (d==3 && !feof(fp1))
doshu(a,b,pb,d,fp1,fp2);
if (d==1 && !feof(fp1))
dozimu(a,b,pb,d,fp1,fp2);
if (d==4 && !feof(fp1))
dofuhao1(a,b,pb,d,fp1,fp2);
if (d==5 && !feof(fp1))
dofuhao2(a,b,pb,d,fp1,fp2);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -