式に対して次のように動作するパーサーを Bison で作成しました。
expr:
integer{
exprPass pass;
sprintf(s, load instructions, $1); //s is a global char buffer
pass.s= s;
pass.type = int;
$$ = pass;
}
|
double{
exprPass pass;
sprintf(s, load instructions, $1); //s is a global char buffer
pass.s= s;
pass.type = int;
$$ = pass;
}
(etc)
これは、次のようなものを実行するまで正常に機能します
comparison: expression LESSTHAN expression
$1.s を印刷すると #3.s と同じです!
$2 には正しい演算子があり、問題はありません
式が正常に機能していることはわかっています。printfs を使用して 2<0 でテストすると、pass.s が 2 になり、次に 0 になることがわかります。$1 がどうにかして $3 に設定されているかわかりません... 問題は私の C コードにあると考えなければなりませんか?
私の式の構造体は
typedef exprPass{
char* s;
variable_type type;
//some other data
}