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。

4

1 回答 1

5

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

换句话说,您自己的一些 YACC 代码可能并不关心实际值是什么,只是它是特定类型的。

一个经典的例子是一个(非常)简单的表达式求值器,它采用NUM + NUM. 您不希望每种情况都有特殊规则:

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

所以你有一个处理一般情况的规则,然后yylval用于特定值。

于 2010-06-01T09:27:22.927 回答