2

Bison .y ファイルにブレークポイントを設定した場合、そのブレークポイントで $$ 疑似変数の内容を調べる方法はありますか?

4

3 に答える 3

5

$$ はセマンティック値スタックのトップです。少し解釈が難しいかもしれません。本当に必要な場合は、スタック ポインターが yyssp と呼ばれ、スタックが yyvsa と呼ばれる場合があるため、使用している bison のバージョンに応じて、yyvsa[yyssp] のようなものが必要な場合があります。生成された .tab.c コードを見てください。

于 2009-11-08T21:53:29.943 に答える
2

Bison はyyparse()、動的に割り当てられたローカル変数としてスタックを保持します。

おそらく、一時的なデバッグの問題を解決する最も簡単な方法はy.tab.c、行*++yyvsp = yylvalがグローバルにコピーをドロップするようにパッチを適用することです。YYPOPSTACK()同じことをするためにハックすることもできます。

于 2009-11-08T22:10:04.960 に答える
0

yylvalwithの型を再定義しました%union:

%union {
  int int_val;
  double double_val;
}

そして、私が得るのは、yyval.int_valまたはyyval.double_valのタイプに応じてです$$

しかし、Richard Pennington が言ったように、生成された.tab.cコードを確認するのが最善の方法です。

于 2015-07-08T17:15:08.543 に答える