0

我正在尝试了解 scxml 转换目标状态集。这是我的一些示例代码:

<parallel id="p">
    <state id="A" initial="A1">
        <state id="A1">
            <transition event="test" target="B2" />
        </state>
        <state id="A2" />
    </state>
    <state id="B" initial="B1">
        <state id="B1" />
        <state id="B2" />
    </state>
    <state id="C" initial="C1">
        <state id="C1" />
        <state id="C2" />
    </state>
</parallel>

如果 P、A、A1、B、B1、C 和 C2 当前处于活动状态。现在事件“测试”即将到来,因此将转换到目标状态“b2” 1) 基于状态图 XML (SCXML) 的第 3.13 节:用于控制抽象的状态机表示法,祖先状态 A 和 P 将是做作的。将退出所有状态然后重新进入 P,还是仅退出 A1 和 A?2) 如果所有状态都退出并在 P 处重新进入,那么设置 P、A、A1、B、B2、C 和 C1 处于活动状态还是设置 P、A、A1、B、B2、C 和 C2 处于活动状态?(因为在转换“测试”发生之前 c2 处于活动状态)

4

1 回答 1

0

退出集由所有活动状态组成,这些状态是源状态和目标状态的 LCCA 的正确后代。这意味着将退出所有状态,包括 P 因为 LCCA 必须是 a ,而不是 a

入口集由转换的完整目标集的所有成员组成,一旦退出集中的状态已退出,这些成员将不会处于活动状态。

由于退出后没有活动状态,因此入口集是 B2,在转换的目标中指定,以及两个默认状态 A1 和 C1。没有关于退出前哪些状态处于活动状态的“记忆”。

所以“P、A、A1、B、B2、C和C1”是正确答案

于 2018-06-28T10:07:54.163 回答