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は値を格納していますか?

適切な解決策がある場合でも、私はこのセクションと非常に混乱しています。YACCにポインタyylvalがあるため、NUMを返す正しい理由が得られません。

4

1 に答える 1

5

NUMトークンタイプです。これは、値自体ではなく、値のカテゴリです。

言い換えれば、あなた自身のYACCコードのいくつかは、実際の値が何であるかを気にしないかもしれません。それは特定のタイプであるというだけです。

古典的な例は、をとる(非常に)単純な式エバリュエーターですNUM + NUM。すべての場合に特別なルールは必要ありません。

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

したがって、一般的なケースを処理する1つのルールがありyylval、特定の値に使用します。

于 2010-06-01T09:27:22.927 に答える