プログラムに問題があります。マルチマッピングを使用して、複数の右手の法則を左手の法則に配置する文法を読み込もうとしています。つまり、ルールは次のとおりです。a-> al be ze it map [a、al]そして残りを無視します。キーをそのままにして、そのキーにさまざまな属性を設定したいと思います。私が見つけられないようなエラーを見つけられるかどうか疑問に思っていました。マルチマッピングを間違って使用していますか?ありがとうございました。
map<string, string> rule; // global var
void righthandside(){ // get rhs of grammar rule
char c;
skipSpace();
c = getchar();
if(isalpha(c)){
checkforE = false; // rule not epsilon
while(isalnum(c)){
righths += c;
c = getchar();
}
righths += '\0';
rule.insert(pair<string, string>(LHS[lhs], righths));
righths.clear();
righthandside();
}
else if(c == '#'){
if(checkforE == true)
rule.insert(pair<string, string>(LHS[lhs], epsilon)); // rule states NT goes to epsilon
skipSpace();
c = getchar();
if(c == '#'){ //end of file
cout << "end of file \n";
}
else{ // end of rule
ungetc(c, stdin);
lhs++;
readGR();
}
}
else{
errorcode(0);
}
}