Flex と bison を使用してセマンティック アナライザーを作成しています。そこに、[1,2,3;3,4;5] のような行列リテラルがあります。それらが整数であると仮定します。次のルールがあります。
フレックスファイル:
int {yylval.type_id.Type=1;return tINTTYPE;}
バイソンファイルで:
char m[80]; //to keep the value of matrix literal
%union semrec
{
struct
{
int Type;
char *id;
}type_id;
}
matrixLit : '[' row ';' rows ']'
row : value
| value ',' row
rows : row
| row ';' rows
value : tINT {$$.id=$1.id;}
| tREAL {$$.id=$1.id;}
| tIDENT {$$.id=$1.id;}
これらを使用して、行列リテラルの値を取得しようとしています。たとえば、行列リテラルが [1;2;3,4;5,6] の場合、1;2;3,4;5,6 を取得しようとします。$$.id=$1.id と strcat(m, $1.id), strcpy(m,$1.id) などを使用して何かを試しましたが、何をしても、この順序で値を取得できません。4,2;1;3,5,6 のような結果が得られます。誰でもこれで私を助けることができますか?
ありがとう