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

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

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

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


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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值