%{
#include "y.tab.h"
extern int yylval;
%}
%%
[0-9]+ {yylval = atoi (yytext); return NUM;}
[ \t] ;
\n return 0;
. return yytext[0];
%%
当我使用指向该值的yylval时,为什么要返回NUM?我的意思是NUM代表什么(在YACC部分中NUM是否已经死亡)? NUM存储任何值吗?
即使有适当的解决方案,我也很困惑。我只是没有得到返回NUM的正确理由,因为我在YACC中有指针yylval。
答案 0 :(得分:5)
NUM
是令牌类型。它是值的类别而不是值本身。
换句话说,你自己的一些YACC代码可能并不关心实际值是什么,只是它是特定类型的。
一个典型的例子是(非常)简单的表达式求值程序,它采用NUM
+
NUM
。您不希望每种情况都有特殊规则:
0 + 0
0 + 1
0 + 2
:
65535 + 65534
65535 + 65535
所以你有一个规则处理一般情况,然后使用yylval
作为特定值。