私はバイソンでいくつかの問題を抱えています(再び)。$$ を使用して、文法ファイル内の「再帰規則」の間で文字列値を渡そうとしていますが、渡した値を出力すると、値ではなく間違った参照 ( AU�� ) のように出力されます。入力ファイルに書きました。
line: tok1 tok2
| tok1 tok2 tok3
{
int len=0;
len = strlen($1) + strlen($3) + 3;
char out[len];
strcpy(out,$1);
strcat(out," = ");
strcat(out,$3);
printf("out -> %s;\n",out);
$$ = out;
}
| line tok4
{
printf("line -> %s\n",$1);
}
ここでは、コードの単純化された部分を報告しました。入力にトークン tok1 tok2 tok3 を与えると、$$ に out 変数を割り当てる必要があります (printf を使用すると、ルールの最初の部分で out 変数に正しい値があることがわかります)。tok4 を順番に照合する ルールの再帰部分にいます。しかし、$1 の値 ($$ を介して渡したので、out と等しいはずです) を出力すると、正しい出力が得られません。