我想为此语法实现一个 FSM/“下推自动机”解析器:具有范围和条件的解析器已经被“lexed”到有限状态机解析器
我有以下内容:
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 );
}
With B
's event()
做(在许多 if-elseif 之后)return m_parent->deleteDaughter()
。我知道这很可疑(并且会崩溃),但我需要返回父级的方法State
来自女儿State
并确保女儿State
没有泄露。
我的事件循环如下所示:
while( somestringstream >> token )
state = state->event();
在您责骂设计和最后一段代码之前,我尝试扩展一个过于简单的示例here,这看起来还不错。为了清楚和简洁起见,我将决定部分移交给各州本身。
我知道有很多关于这个主题的书籍,但我不是计算机科学家/程序员,我想自己学习做到这一点(当然,在 SO 所有友好人员的帮助下)。如果概念不清楚,请提问。谢谢!
仍然可以随意发表您对此的看法,但我已经找到了如何优雅地处理一切的方法:
第一:我的事件循环将保留指向最后一个的指针State*
创建的。
第二:每个State
有一个指向父级的指针State
,在构造函数中初始化,默认为 0(如果用于除第一个之外的任何内容,则内存泄漏State*
);这保证了任何国家都不会超出范围。
Third: State* endOfState()
函数正是这样做的(我对此感到特别自豪。
State* State::endOfState()
{
State* parent = m_parent; // keep member pointer after suicide
delete this;
return parent;
}
当从子类内部调用它时event()
,它将正确删除自身,并返回父指针(在梯子中向上移动)。
如果仍然存在泄漏,请通知我。如果解决方案不清楚,请询问:)
PS:平心而论,灵感是从http://www.codeguru.com/forum/showthread.php?t=179284
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)