刚刚学过编译原理词法分析,老师布置的作业,虽然能运行成功,但总感觉程序读起来很别扭,现在贴出来,希望高手来评价一下,给点意见。
这个程序只能识别 : = , < = , < ,= = , + , * , ;和整数,字符串并进行输出
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char ch;
FILE *fp;
identifiel()
{
char p[10],*i;
p[0]=ch;
i=p;
while(isalpha(*i)||isdigit(*i))
{
i++;
*i=fgetc(fp);
if(feof(fp))
return;
}
fseek(fp,-1,SEEK_CUR);
*i='\0';
printf("$ID %s\n",p);
}
number()
{
char p[10],*i;
p[0]=ch;
i=p;
while(isdigit(*i))
{
i++;
*i=fgetc(fp);
if(feof(fp))
return;
}
fseek(fp,-1,SEEK_CUR);
*i='\0';
printf("$INT %s\n",p);
}
dictionary()
{
ch=fgetc(fp);
while(ch==' ')
ch=fgetc(fp);
if(isalpha(ch))
identifiel();
else if(isdigit(ch))
number();
else if(ch=='+')
printf("$PLUS --\n");
else if(ch=='*')
printf("$STAR --\n");
else if(ch==';')
printf("$SEMI --\n");
else if(ch==':')
{
ch=fgetc(fp);
if(ch=='=')printf("$ASSIG --\n");
else
{
fseek(fp,-1,SEEK_CUR);
printf("$COLOL --\n");
}
}
else if(ch=='<')
{
ch=fgetc(fp);
if(ch=='=')printf("$LE --\n");
else
{
fseek(fp,-1,SEEK_CUR);
printf("$LT --\n");
}
}
}
main()
{
fp=fopen("file.txt","r");
while(!feof(fp))
dictionary();
}









