Next: , Previous: Semantic Tokens, Up: Context Dependency


7.2 字句解析結び付き

文脈依存性を処理する1つの方法は、字句解析結び付き(lexical tie-in)で、 Bisonのアクションによって設定されるフラグが、 トークンが構文解析される方法に影響します。

たとえば、C言語によく似ていて、‘hex (hex-expr)’という 特別な構造を持つ言語について、考えてみましょう。 予約語hexがきた後にかっこで囲まれた式が続いて、 そのかっこの中ではすべての整数が16進数になります。 特に、トークン‘a1b’は、このような文脈に現れれば、 識別子ではなく整数として扱われる必要があります。 どのようにすればよいかを示します。

     %{
     int hexflag;
     %}
     %%
     ...
     expr:   IDENTIFIER
             | constant
             | HEX '('
                     { hexflag = 1; }
               expr ')'
                     { hexflag = 0;
                        $$ = $4; }
             | expr '+' expr
                     { $$ = make_sum ($1, $3); }
             ...
             ;
     
     constant:
               INTEGER
             | STRING
             ;

yylexは、hexflagの値が0でなければ、 すべての整数が16進数であると字句解析し、 英字で始まるトークンも可能な限り整数と解釈すると、仮定します。

hexflagの宣言は、アクションから参照可能なように、 文法ファイルのC宣言部に書かれる必要があります (see The C Declarations Section)。 同様に、yylexのプログラムにも、hexflagの宣言が必要です。