按照它们在语法中出现的顺序对字符串进行排序

时间:2019-03-05 03:03:49

标签: c++ sorting vector compiler-construction

所以,我有语法:

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语法中的顺序排序?

0 个答案:

没有答案