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