さて、Bison .l ファイルに次のコードがあります。ちなみに私はcが初めてです。
exp: TK_SLIT // TK_SLIT is a string literal token
/* assigns the type to the nonterminal exp */
$$ ->type = (char *) malloc (strlen ("string") + 1); /* allocates space */
strcpy ($$->type,"string"); /* puts value in there */
printf ("%s\n",$$->type);
printf ("The value of TK_SLIT is - %s\n",$1);
コードの「型の割り当て」ブロック (コメントを含む 4 行) がメモリ内の TK_SLIT ($1) の値を上書きすることがわかりました。TK_SLIT の値は、スキャナー FLEX から取得しました。
「型の割り当て」コード ブロックをコメント アウトすると、TK_SLIT トークン値が正常に出力されるため、コード ブロックが問題の原因であることはわかっています。そうしないと文字化けします。
私のmallocに何か問題がありますか?トークン値が上書きされるのはなぜですか? これは、メモリ内のトークン値を保護していないバイソンの問題ですか?
さて、私の組合は次のとおりです。
%union
{
int intbison;
char *charbison; // used for input
char *boolbison;
int voidbison;
charlist *charlistbison;
arraylist *arraylistbison;
expnode *expnodebison;
}
また、ヘッダー ファイルからの私の expnode は次のとおりです。
typedef struct expnode{
char *type;
typesymrec *typesymrecptr;
varsymrec *varsymrecptr;
char *stringval;
int intval;
int boolval;
}expnode;