私はこのルールをyaccファイルに、別のC++ファイルをルールのアクションとして使用しています。 しかし.This以下print文で示すように、出力が期待されていないparser.y内のルールです:yaccは予期せぬ結果を出力します
RecordItem : IdentifierList ':' TypeDenoter
{
char * result = declareRecordItem ($1 , $3);
$$ = result;
printf(" >>> inside RecordItem >> : %s\n",result);
}
;
と、これは機能である「declareRecordItem」main.cppにファイル内:
char* declareRecordItem(std::vector<char* >* varList , char* type){
string stm = " ";
string identifier;
for(int i=0 ; i < varList-> size() ; i++)
{
identifier= string((*varList)[i]) ;
symtab[identifier] = string(type);
stm = stm + " " + string(type);
}
char * result = (char*)stm.c_str();
printf(">>> inside declareRecordItem >> : %s\n",result);
return result ;
}
declareRecordItem関数の出力は正しいですが、RecordItemルールに戻ったときには何も生成されないか、または奇妙なシンボルが表示されることがあります。何か案が !。
>>> inside declareRecordItem >> : i32 i32
>>> inside RecordItem >> :
動的オブジェクトを作成すると、ポインタ型、つまりstring * stm = new new std :: string()となります。 。しかし、どのようにループの中でそのように追加するか? –
'* stm = * stm +" "+ ...'または単に '* stm + =" "+ ...' – rici
最後にもう一度質問してください。どのように文字列*をchar *に変換できますか? –