我在寫一種遞歸下降解析器。在我的語法樹的第一階段,我持有我在向量中解析的模型片段。第一件是左手側件(lhs),其餘件是右側件(rhs)。 Lhs加上rhs構成一個生產規則(pr)。任何rhs作品都可能是一個pr,其第一個作品是lhs作品。該公關的lhs片也是它在我稱之爲「sub」的公關類中的作品。例如,讓pr1 = lhs10 rhs11 sub12 rhs13和pr2 = lhs20 rhs21 rhs22。 lhs20和sub12將是同一個作品。我得到一個'內部向量'錯誤,可能是因爲我正在對與周圍對象相同類型的對象執行push_back,但是有沒有辦法使用容器中的智能指針對象來實現這種遞歸?是否有可能在C++中有一個遞歸向量?
#include "stdafx.h"
#include <memory>
#include <vector>
struct AbstractSyntaxTree;
typedef std::shared_ptr<AbstractSyntaxTree> ModelPiece;
typedef std::vector<ModelPiece> ModelPiecesVect;
struct AbstractSyntaxTree
{
enum LexState
{
LHS = 0x0, RHS = 0x1, SUB = 0x2
};
ModelPiecesVect modelPiecesVect;
LexState lexState;
};
int main()
{
ModelPiece mp;
ModelPiece lhs10, rhs11, sub12, rhs13;
ModelPiece lhs20, rhs21, rhs22;
lhs10 = std::make_shared<AbstractSyntaxTree>();
mp->modelPiecesVect.push_back(lhs10); // fails here with '... _Ptr points inside vector' (see code fragment below)
mp->modelPiecesVect.push_back(rhs11);
mp->modelPiecesVect.push_back(sub12);
mp->modelPiecesVect.push_back(rhs13);
mp->modelPiecesVect[ 2 ]->modelPiecesVect.push_back(lhs20);
mp->modelPiecesVect[ 2 ]->modelPiecesVect.push_back(rhs21);
mp->modelPiecesVect[ 2 ]->modelPiecesVect.push_back(rhs22);
/*
bool _Inside(const value_type *_Ptr) const
{ // test if _Ptr points inside vector
return (_Ptr < this->_Mylast && this->_Myfirst <= _Ptr); // 'this' is null
}
*/
return 0;
}