이 규칙은 yacc 파일에 있고 별도의 C++ 파일은 규칙의 동작에 대해 가지고 있습니다. 그러나 출력이 .This 아래의 인쇄 문 같이 예상되지는 parser.y의 규칙입니다 :yacc에서 예기치 않은 결과를 출력합니다.
RecordItem : IdentifierList ':' TypeDenoter
{
char * result = declareRecordItem ($1 , $3);
$$ = result;
printf(" >>> inside RecordItem >> : %s\n",result);
}
;
이것은 MAIN.CPP 파일의 기능 'declareRecordItem'입니다 :
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 *로 변환 할 수 있습니까? –