1

Bison と Java を使用してパーサーに取り組んでいますが、問題があります。デフォルトのセマンティック値には、独自のタイプ「TreeNode」を使用しました。それは私の .y ファイルからのコードです:

prog: def_var TERMINATOR inc_val {
    TreeNode t = new TreeNode();
    t = $1;
}

Bison によって生成されるコードです。

TreeNode t = new TreeNode();
t = ((Integer)(yystack.valueAt (9-(1))));

TreeNode を Integer に変換できないため、「incovertible types」というエラーが発生します。この自動変換を無効にするにはどうすればよいですか?

4

1 に答える 1

2

私はあなたが引用したコードがあなたが引用したバイソン仕様から来ているとは思わない. そのため、実際にそのコンパイル時エラーを生成するプロダクションを追跡する必要があります。bそのプロダクションから割り当てられているものはすべて type であることがわかると思いますInteger

bison は常に、任意の端末またはトークンからの任意のセマンティック値を保持できる Java オブジェクト スタックに何らかの基本型 (スーパー型と言うと思います) を使用します。デフォルトでは使用Objectされますが、必要に応じてより制限的なものを定義できます。そのため、オブジェクト スタックの値をトークンまたはターミナルの既知の (宣​​言された) 値にキャストする必要があります。それがどこ(Integer)から来ているかです。

于 2012-12-10T00:35:44.153 に答える