现在的位置: 首页 > 综合 > 正文

开源编译器学习笔记03(VC6 词法扫描器 ——动态内存先放一边)——2014_1_30

2014年09月11日 ⁄ 综合 ⁄ 共 938字 ⁄ 字号 评论关闭

理解 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

的第一节,注释和解释都不够,

虽然已经比较精简了,但是因为包含动态内存分配,所以作为词法分析器入门还是比较复杂的,因为多了一项功能。

第一次理解,只理解结构即可,其中的函数暂时作为已知,不需要理解其如何实现,到后面再解决。

【上篇】
【下篇】

抱歉!评论已关闭.