有关c文件处的讨论(部分有关编译器的词法分析)
dr2tr 2005-03-23 11:32:08 1 stream=fopen("a.txt","r");
while(!feof(stream)){ action();}
在action()函数中,有fgetc()的调用;
事实证明,我用feof()测试文件结尾是失败的(死循环),而我通过在action()中加入if((ch=getc(stream)==EOF)的话,程序就能正常结束了。为什么呢?大家说说看。
2 在词法分析的部分,我用以下程序段,请留意回退的部分。
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))//字母?
{
n=0;
while((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')
|| (ch>='0'&&ch<='9'))
{
if(n<20)
{
str[n]=ch;
n++;
}
ch=getch(stream);
}
str[n]='\0';
if(compare(str))//不是保留字?
{
printf("%s",str);
}
else
{
printf(" %d ",index);
}
if(ch==EOF)
exit(0);
fseek(stream,-1,SEEK_CUR);//回退
}
我觉得这样每识别一个词就做一次回退是很没效率的,但又没想到合适的方法,请大家指点阿