次: , 上: Lexical


4.2.1 yylexを呼び出す方法

yylexが返す値は、見つかったトークンの型に対する番号で、 入力ファイルの終わりに達した場合には0を返します。

トークンが文法規則の中で名前で参照される場合、 構文解析器ファイルの中でのその名前は、 トークン型に対する適切な番号にCのマクロとして定義されます。 したがって、yylexは型を示すためにその名前を使用できます。 See Symbols

文法規則の中でトークンが1文字リテラルとして参照される場合には、 その文字の文字符号がトークン型に対する番号でもあります。 そこで、yylexは、単純に文字符号を返します。 しかし、戻り値0は入力ファイルの終わりを意味するので、 ヌル文字('\0')の文字符号を返してはいけません。

以下に例を示します。

     yylex ()
     {
       ...
       if (c == EOF)     /* ファイルの終わりか調べる。 */
         return 0;
       ...
       if (c == '+' || c == '-')
         return c;      /* `+' に対するトークン型が '+' であると仮定する。 */
       ...
       return INT;      /* トークン型を返す。 */
       ...
     }

このようなインターフェイスは、 lexが生成した字句解析器を、 yylexの定義を変えずに使えるように設計されています。

文法規則が文字列リテラルトークンを使っている場合には、 yylexがそれに対するトークン型番号を使う、 2つの方法があります。