зачем возвращать имя токена?

%{
    #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, поскольку у меня есть указатель yylval в YACC.


lex
person Nagaraj Tantri    schedule 01.06.2010    source источник


Ответы (1)


NUM — это тип токена. Это категория значения, а не само значение.

Другими словами, некоторые из ваших собственных кодов YACC могут не заботиться о каковом фактическом значении, а только о том, что оно имеет определенный тип.

Классический пример — (очень) простой вычислитель выражений, который принимает NUM + NUM. Вам не нужно специальное правило для каждого случая:

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

так что у вас есть одно правило, которое обрабатывает общий случай, а затем используйте yylval для конкретного значения.

person paxdiablo    schedule 01.06.2010