问题标签 [fsm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
fsm - 组合状态,FSM
组合 FSM 的状态是否“正确”?
假设你有一个对象
碰巧组合状态是有意义的,例如
但是在 FSM 理论中这是非法的吗?
这更像是一条捷径:
假设您有 3 个状态:跑步、步行和跳跃。然后你有第四个状态 Firing。
你需要能够跑和火,走路和火,跳和火。而不是制作6个状态RunningFiring,WalkingFiring,JumpingFiring,我想将Firing状态与(无论Walking Running Jumping状态)结合起来
我知道我可以将 BOOL 用于“第四状态”,但这似乎不是更错误的吗?有一个“侧面的状态......”
c++ - Generic FSM for game in C++?
I was wondering if there's a way I could code some kind of "generic" FSM for a game with C++?.
My game has a component oriented design, so I use a FSM Component.
my Finite State Machine (FSM) Component, looks more or less this way.
I would love to hear your opinions/ideas or suggestions about how to make this FSM component, generic. With generic I mean:
1) Creating the fsmTable from an xml file is really easy, I mean it's just a bunch of integers that can be loaded to create an MAX_STATESxMAX_ACTION matrix.
2) But what about the "perform Action" method ?
What if I wanted to make the "actions" and the switch generic?
This in order to avoid creating a different FSM component class for each GameEntity
? (gecFSMZombie
, gecFSMDryad
, gecFSMBoss
etc ?). That would allow me to go "Data Driven" and construct my generic FSM's from files for example.
What do you people suggest?
algorithm - 使用有限状态机是一般文本解析的好设计吗?
我正在阅读一个用十六进制数字填充的文件。我必须确定一个特定的模式,从它说“aaad”(不带引号)。每次看到该模式时,我都会为其他文件生成一些数据。
这将是设计程序时非常常见的情况——解析和寻找特定的模式。
我将其设计为有限状态机,并在 C 中对其进行结构化switch-case
以更改状态。这是我想到的第一个实现。
- 设计:有没有更好的设计?
- 实施:您是否看到我提到的使用开关盒的一些问题?
python - 实现简单 FSM 的 Pythonic 方法是什么?
昨天我不得不解析一个非常简单的二进制数据文件 - 规则是,在一行中查找两个都是 0xAA 的字节,然后下一个字节将是一个长度字节,然后跳过 9 个字节并从中输出给定数量的数据那里。重复到文件末尾。
我的解决方案确实有效,而且组装起来非常迅速(尽管我本质上是一名 C 程序员,但我仍然认为用 Python 编写它比用 C 编写要快) - 但是,很明显完全不是 Pythonic,它读起来像一个 C 程序(而且不是一个很好的程序!)
对此有什么更好/更 Pythonic 的方法?像这样的简单 FSM 仍然是 Python 中的正确选择吗?
我的解决方案:
c++ - 有限状态机解析器
我想在 C++ 中使用类似 FSM 的解析器来解析自行设计的文件格式(这是teach-myself-c++-the-hard-way-by-doing-something-big-and-difficult
一种项目 :))。我有一个带有换行符的标记化字符串,表示 euh... 行的结尾。有关输入示例,请参见此处。所有的评论都会被过滤掉,所以我有一个像这样的 std::string :
语法解释:
- { } 是范围,大写的单词表示要遵循的选项/文件列表。
- \n 仅在选项/文件列表中很重要,表示列表的结尾。
所以我认为 FSM 足够简单/可扩展以满足我的需求/知识。据我所知(并希望我的文件设计如此),我不需要并发状态或类似的东西。一些设计/实施问题:
- 我应该为我的状态使用一个
enum
还是抽象class
+衍生物?第一个可能更适合小语法,但以后可能会变得丑陋,而第二个恰恰相反。我倾向于第一个,因为它很简单。enum
示例和类示例。编辑:这个建议怎么样,goto
我认为它们在 C++ 中是邪恶的? - 阅读列表时,我不需要忽略
\n
.string
我使用via的首选方式,默认情况下stringstream
会忽略\n
。所以我需要简单的方法来告诉(同样!)stringstream
在启用某个状态时不要忽略换行符。 - 简单
enum
状态是否足以进行多级解析(范围内的范围{...{...}...}
),还是需要 hacky 实现? - 这是我想到的草案状态:
upper
: 读取全局、exe、lib+ 目标名称...normal
: 在一个范围内,可以读取 SOURCES...,创建用户变量...list
:将项目添加到列表中,直到遇到换行符。
每个范围都会有一种条件(例如 win32:global { gcc:CFLAGS = ... }),并且需要在任何地方以完全相同的方式处理(即使在list
状态中,每个项目)。
感谢您的任何意见。
c++ - C++ FSM 设计和所有权
我想为此语法实现一个 FSM/“下推自动机”解析器:具有范围和条件的解析器,它已经被“解析”到有限状态机解析器中
我有以下内容:
With B
's event()
doing (在许多 if-elseif's 之后) return m_parent->deleteDaughter()
。State
我知道这很可疑(而且它崩溃了),但我需要办法从女儿那里归还父母,State
并确保女儿State
没有被泄露。
我的事件循环如下所示:
在你责骂设计和最后一段代码之前,我尝试从这里扩展一个过于简单的示例,这看起来还不错。为了清晰和简洁,我将决策部分转移到各州本身。
我知道有很多关于这个主题的书籍,但我不是计算机科学家/程序员,我想自己学习做这件事(当然,在 SO 的所有友好人士的帮助下)。如果概念不清楚,请询问。谢谢!
scripting - Erlang 中的分层状态机实现
我正在计划一个回合制游戏(一种棋盘游戏),后端可能会在 Erlang 中完成。游戏逻辑部分似乎适合分层状态机,但我不确定如何在 Erlang 中实现它。
也许我可以为每个子 fsm 生成一个单独的进程,不确定这是否可行。
另一种选择是嵌入脚本语言或为此创建 DSL。
你怎么看?
谢谢。
parsing - 如何在 Ragel 中解析模板语言?
我一直在研究简单模板语言的解析器。我正在使用雷格尔。
要求适中。我正在尝试找到可以嵌入输入字符串中任何位置的 [[tags]] 。
我正在尝试解析一种简单的模板语言,它可以在 HTML 中嵌入诸如 {{foo}} 之类的标签。我尝试了几种方法来解析它,但不得不求助于使用 Ragel 扫描仪并使用仅匹配单个字符作为“全部捕获”的低效方法。我觉得这是错误的做法。我实际上是在滥用扫描仪的最长匹配偏差来实现我的默认规则(它只能是 1 个字符长,所以它应该始终是最后的手段)。
(用 ruby 编写的动作,但应该很容易理解)。
您将如何为如此简单的语言编写解析器?Ragel 可能不是正确的工具吗?如果语法是这样不可预测的,您似乎必须与 Ragel 牙齿和指甲作斗争。
c# - 使用状态模式的分层状态机的最佳实践是什么?
我即将使用状态模式在 C# 中实现分层状态机。作为一个指南,我正在使用这个例子。但是,该示例并未提供有关分层状态的答案。不幸的是,我似乎无法在其他地方找到好的例子。我的第一个想法是为分层状态创建嵌套类。但这被认为是最佳实践还是有更好的解决方案?
问候!
更新:
我整个下午都在尝试实现上述状态模式。HSM 基于一个非常简单的媒体播放器:
替代文字 http://www.freeimagehosting.net/uploads/e8d2d6486a.jpg
我以为我已经做到了,但有一件事我不明白。首先是我写的代码(对不起,很多):
在 MediaPlayer 类中定义事件时,我不能调用任何其他函数
- OnButtonPressed
- OffButtonPressed
所以我想知道,我的实施有什么好处吗?怎么了?我还尝试查看使用复合模式的建议,但我不明白它应该如何与状态模式一起使用。希望任何人都可以提供帮助!
c++ - 将整个程序构建为 FSM 的良好设计?
我已经使用 FSM/Pushdown Automaton 方法构建了一个解析器,就像这里(它工作得很好!):C++ FSM 设计和所有权 当解析器出现问题时,它允许我优雅地退出并向用户输出有用的错误消息阶段。
我一直想知道在我的程序的其余部分中完成这项工作的好方法,自然而然地,解析器方法突然出现在我的脑海中......
我会让每个对象成为一个状态,它有一个 event() 函数,该函数有一个 switch 语句,根据我所处的执行阶段调用对象特定的函数。我可以使用特定于对象的枚举来跟踪它,并使代码更具可读性(case parser
比 更具可读性case 5
)。这将允许我关闭我创建的状态的下推树(使用m_parent*
我的另一个问题中的方法)。
这是一个好的设计(强制所有东西都处于 FSM 模式)吗?有没有更好的方法,它会复杂多少(我发现 FSM 很容易实现和测试)?
感谢您的建议!
PS:我知道 boost 拥有人们可能需要的一切,但我想限制外部依赖,尤其是在 boost 上。c++0x 虽然没问题(但我认为在这里并不重要)