理解 getToken( )函数后,再回到主函数中,
void main(int argc,char * argv[])
{
int len;
enum TOKENTYPE token;
if(argc != 2)
{
printf("usage: %s <filename> \n",argv[0]);
exit(-1);
}
动态内存分配初始化();
while((token=getToken())!=ENDFILE)
{
printToken(token);
freeToken();
}
system ("pause"); //vs2008下为了能看到结果,需要暂停,否则就一闪而过,什么都看不到咯。
myexit(NULL);
}
只要getToken( )不等于ENDFILE,就执行
printToken(token)
和 freeToken( )
这两个函数
void printToken(enum TOKENTYPE token)
{
if(token == ID)
printf("identifier token: %s \n" , TokenString.str);
else if(token == NUM)
printf("number token: %s \n" , TokenString.str);
else if(token == ERROR)
printf("unknown token: %s \n" , TokenString.str);
else
printf("ops token: %s \n" , TokenString.str);
}
TokenString是一个结构
printToken和makeTokenstr函数,暂时理解其功能,如何实现先放在一边。
freeToken( )释放空间。
*********************************************************************
这就是
http://www.zengl.com/html/genlanmu/zenglbianchengyuyan/article-2.html
的第一节,注释和解释都不够,
虽然已经比较精简了,但是因为包含动态内存分配,所以作为词法分析器入门还是比较复杂的,因为多了一项功能。
第一次理解,只理解结构即可,其中的函数暂时作为已知,不需要理解其如何实现,到后面再解决。