2

以下は私のルールです。$2を'='に置き換えると、コードが機能します。デフォルトでは、すべてのリテラルトークンがASCII値を使用することを知っています(したがって、複数文字のトークンに定義が必要な理由)

以下は動作しません。関数は、私が期待するように'='ではなく0で呼び出されます。設定できるオプションはありますか?(manページでは表示されません)

AssignExpr: var '=' rval            { $$ = func($1, $2, $3); } 

したがって、別のコードではMathOp: '=' | '+' | '%' ...、なぜ私が興味を持っているのかがわかります。

4

2 に答える 2

3

このコンテキストでの$2の値は、yylex関数がトークン'='を返す前にグローバル変数yylvalに入力した値になります。レクサーがyylvalに何も入れない場合、ご覧のとおり、おそらく0のままです。

于 2009-11-22T20:33:43.673 に答える
2

私はあなたが正しいと思います、バイソンはちょうどそのように機能しません。

もちろん、簡単に修正できます。

  • のトークンを宣言し=、レクサーで認識して、そのセマンティック値を返すか、または...
  • そのためのプロダクションを宣言し、またはで返し$$ ます...
  • yylex()のyylvalに「=」を割り当てます
于 2009-11-17T04:32:27.507 に答える