2010-06-01 101 views
1
%{ 
    #include "y.tab.h" 
    extern int yylval; 
%} 
%% 
    [0-9]+ {yylval = atoi (yytext); return NUM;} 
    [ \t] ; 
    \n  return 0; 
    .  return yytext[0]; 
%% 

当我使用指向该值的yylval时,为什么我应该返回NUM?我的意思是NUM代表的是什么(NUM在YACC部分中被宣告)? NUM是否存储任何值?为什么要返回令牌名称?

即使有适当的解决方案,我也很困惑这一节。我只是没有得到返回NUM的正确理由,因为我在YACC中有指针yylval。

回答

5

NUM是令牌类型。这是价值的类别而不是价值本身。

换句话说,你自己的一些YACC代码可能不在意什么实际值是,只是它是一个特定的类型。

一个经典的例子是一个(非常)简单的表达式求值器,它需要NUM+NUM。你不想要一个特殊的规则对每一个案件:

0 + 0 
0 + 1 
0 + 2 
: 
65535 + 65534 
65535 + 65535 

所以你必须一个规则处理,一般情况下,然后使用yylval为特定值。

相关问题