2010-06-01 129 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爲特定值。

相關問題