理解 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
的第一节,注释和解释都不够,
虽然已经比较精简了,但是因为包含动态内存分配,所以作为词法分析器入门还是比较复杂的,因为多了一项功能。
第一次理解,只理解结构即可,其中的函数暂时作为已知,不需要理解其如何实现,到后面再解决。