次: Tie-in Recovery, 前: Semantic Tokens, 上: Context Dependency
文脈依存性を処理する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の宣言が必要です。