所以,我有语法:
S -> A B #
S -> C #
C -> c #
S -> a #
A -> a A #
B -> b #
##
所有非终端的第一组应该是
FIRST(S) = { c, a }
FIRST(A) = { a }
FIRST(B) = { b }
FIRST(C) = { c }
但是我得到的输出为First(S)= {a,c}
因此,我必须按照它们在语法中出现的顺序对其进行排序,因此,我有一个向量,其中存储了所有名为“ _veverything”的符号,以及一个名为“ tempstr”的字符串,该字符串存储了第一组语法。
for (auto& nt : _vnonterminals) //for each of the non-terminals
{ //create a tempstr
string tempstr = "";
//append all elements of first set of this non-terminal into the string
for (auto& el : _mapFirst[nt])
{
tempstr = tempstr + " " + el + ",";
}
//remove the trailing comma "," if it exists
if (tempstr.at(tempstr.length() - 1) == ',')
{
//tempstr.pop_back();
tempstr = tempstr.substr(0, tempstr.size() - 1);
}
//print this NT's first set beautifully
cout << "FIRST(" << nt << ") = {" << tempstr << " }";
if (nt != _vnonterminals.back())
{
cout << endl;
}
}
如何实现代码,以使tempstr中的所有元素都按照出现在_veverything语法中的顺序排序?