C++ C++;FSM设计和所有权
我想为这种语法实现一个FSM/“下推自动机”解析器:它已经“词法化”为 我有以下资料:C++ C++;FSM设计和所有权,c++,parsing,oop,fsm,C++,Parsing,Oop,Fsm,我想为这种语法实现一个FSM/“下推自动机”解析器:它已经“词法化”为 我有以下资料: class State { public: virtual State* event( const string &token ); State* deleteDaughter(); private: A* m_parent; A* m_daughter; } class SomeState : public State { public: State* eve
class State
{
public:
virtual State* event( const string &token );
State* deleteDaughter();
private:
A* m_parent;
A* m_daughter;
}
class SomeState : public State
{
public:
State* event( const std::string &token );
}
使用B
的event()
执行(在多次if-elseif之后)返回m_parent->deleteDimension()
。我知道这是可疑的(它崩溃了),但我需要一种方法从子状态返回父状态
,并确保子状态
没有泄漏
我的事件循环如下所示:
while( somestringstream >> token )
state = state->event();
在你责骂设计和最后一段代码之前,我试着从中扩展一个非常简单的示例,这似乎还不错。为了清晰和简洁,我将决定部分转移到各州本身
我知道有很多关于这个主题的书,但我不是计算机科学家/程序员,我想自己学习(当然,在所有友好人士的帮助下)。如果概念不清楚,请询问。谢谢 尽管您仍可以发表您的看法,但我已经想出了如何优雅地处理一切:
第一:我的事件循环将保留一个指向最后创建的状态*
的指针
第二:每个状态
都有一个指向父状态
的指针,在构造函数中初始化,默认为0(如果用于除第一个状态以外的任何状态*
,则内存泄漏);这保证了任何国家都不会超出范围
第三:State*endOfState()
函数,它正是这样做的(我特别为此感到自豪)
State* State::endOfState()
{
State* parent = m_parent; // keep member pointer after suicide
delete this;
return parent;
}
当从子类的事件()
中调用它时,它将正确地删除自身,并返回父指针(在梯形图中向上)
如果仍然存在泄漏,请通知我。如果解决方案不清楚,请询问:)
PS:说句公道话,灵感是从中偷来的。请尽管发表您的看法,但我已经想出了如何优雅地处理一切:
第一:我的事件循环将保留一个指向最后创建的状态*
的指针
第二:每个状态
都有一个指向父状态
的指针,在构造函数中初始化,默认为0(如果用于除第一个状态以外的任何状态*
,则内存泄漏);这保证了任何国家都不会超出范围
第三:State*endOfState()
函数,它正是这样做的(我特别为此感到自豪)
State* State::endOfState()
{
State* parent = m_parent; // keep member pointer after suicide
delete this;
return parent;
}
当从子类的事件()
中调用它时,它将正确地删除自身,并返回父指针(在梯形图中向上)
如果仍然存在泄漏,请通知我。如果解决方案不清楚,请询问:)
PS:为了公平起见,灵感是从