词法分析程序,关键字main后的int没法配对!也就是输出的编码不对,请指导指导
词法分析程序,关键字main后的int无法配对!也就是输出的编码不对,请指导指导
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
FILE *fp1,*fp2;
char prog[255],token[8],ch;
int decode,p,m,n,i;
char *KEY_WORDS[7]={"main","int","char","if","else","for","while"};
void Scaner(void);
void PrintError(void);
int main()
{
char Sourfile[10],Wfile[10];
char lbracket,rbracket,comma;
lbracket = '(';
rbracket = ')';
comma = ',';
printf("请输入存放源程序的文件名:");
scanf("%s",Sourfile);
printf("\n");
if((fp1 = fopen(Sourfile,"r")) == NULL)
{
printf("无法打开此文件!\n");
exit(0);
}
printf("请输入输出数据文件的名字:");
scanf("%s",&Wfile);
printf("\n");
if((fp2 = fopen(Wfile,"w")) == NULL)
{
printf("无法打开此文件!\n");
exit(0);
}
p=0;
while(!feof(fp1))
{
ch = fgetc(fp1);
prog[p++] = ch;
};
prog[p] = '\0';
p = 0;
do{
Scaner();
switch(decode)
{
case -1:
//PrintError();
return 0;
case 0:
break;
//case -2:
// continue;
default:
fputc(lbracket,fp2);
fprintf(fp2,"%d",decode);
fputc(comma,fp2);
fputs(token,fp2);
fputc(rbracket,fp2);
fputc(' ',fp2);
break;
}
}while(decode != 0);
fclose(fp1);
fclose(fp2);
return 0;
}
void Scaner(void)
{
for(m = 0;m < 8;m++)
token[m++] = NULL;
ch = prog[p++];
m=0;
while((ch == ' ')||(ch == '\n')||(ch == '\t'))
ch = prog[p++];
if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch >= 'A')))
{
while(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))||((ch>='0')&&(ch<='9')))
{
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
FILE *fp1,*fp2;
char prog[255],token[8],ch;
int decode,p,m,n,i;
char *KEY_WORDS[7]={"main","int","char","if","else","for","while"};
void Scaner(void);
void PrintError(void);
int main()
{
char Sourfile[10],Wfile[10];
char lbracket,rbracket,comma;
lbracket = '(';
rbracket = ')';
comma = ',';
printf("请输入存放源程序的文件名:");
scanf("%s",Sourfile);
printf("\n");
if((fp1 = fopen(Sourfile,"r")) == NULL)
{
printf("无法打开此文件!\n");
exit(0);
}
printf("请输入输出数据文件的名字:");
scanf("%s",&Wfile);
printf("\n");
if((fp2 = fopen(Wfile,"w")) == NULL)
{
printf("无法打开此文件!\n");
exit(0);
}
p=0;
while(!feof(fp1))
{
ch = fgetc(fp1);
prog[p++] = ch;
};
prog[p] = '\0';
p = 0;
do{
Scaner();
switch(decode)
{
case -1:
//PrintError();
return 0;
case 0:
break;
//case -2:
// continue;
default:
fputc(lbracket,fp2);
fprintf(fp2,"%d",decode);
fputc(comma,fp2);
fputs(token,fp2);
fputc(rbracket,fp2);
fputc(' ',fp2);
break;
}
}while(decode != 0);
fclose(fp1);
fclose(fp2);
return 0;
}
void Scaner(void)
{
for(m = 0;m < 8;m++)
token[m++] = NULL;
ch = prog[p++];
m=0;
while((ch == ' ')||(ch == '\n')||(ch == '\t'))
ch = prog[p++];
if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch >= 'A')))
{
while(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))||((ch>='0')&&(ch<='9')))
{