2016-04-10 6 views
0

が何であるかを私はいくつかのレガシーバイソンのコードを読んでいて、それは次のようなルールがあります。@の意味はバイソンコードで

function_decl: name body function_end 
    { if($3 != $1->id) { 
      yyerror(@3, "error: function name does not match end label"); 
     } 
    } 
; 

私は$ iの中で各トークンによって返された値を参照していることを理解しますルール。しかし、@iは何を表していますか?私はそれのためにグーグルを試みたが、関連するヒットは得られなかった。

+0

ドキュメント? http://www.gnu.org/software/bison/manual/html_node/Table-of-Symbols.html – CaptJak

答えて

0

@nは、記号$nに対応する「場所」です。 bison文法で@参照を使用すると、自動的に場所が有効になりますが、(グローバル変数yyllocに)情報を生成することはスキャナの責任です。

位置は、端末または非端末の開始および終了を表す位置の範囲です。デフォルトでは、first_linefirst_columnlast_linelast_columnの4つのフィールドを持つstructに保持されます。

非ターミナルのロケーションオブジェクトは、バイソンパーサーによって自動的に作成されます。デフォルトでは、位置範囲は最初のシンボルの開始点から最後のシンボルの最後まで拡張されます。

詳細については、bison manualを参照してください。