Ragel (6.10) 文档插图中的 DEF 状态是什么

What is the DEF state in the Ragel (6.10) document illustrations

Ragel 6.10 手册中有很多关于它生成的 FSM 的插图。其中一些显示状态 DEF。 据我所知,这绝不是 defined/discussed.

  1. DEF 状态是什么?
  2. 它的含义是什么?例如如果它出现在你的 FSM abc 应该完成

提前致谢

问题 1 的答案:

DEF 表示默认转换,如果无法进行其他转换,则进行默认转换。

问题 2 的答案:

这取决于您使用 Ragel 的目的。

  1. 使用常规语言定义 FSM: 您要在 any 个角色上从 A 州转移到 B 州吗?
  2. 使用状态图定义 FSM: 你想在任何事件中从状态 A 移动到状态 B 吗?您有 'default' 过渡的概念吗?

通过使用手册(6.10 版)第 6.4.5 节中的示例可以最清楚地理解此问题,其中同时使用了解析图和状态图。

当您明确使用 any 作为状态时,有时会出现这种情况。

示例:

%%{
  machine def_eg;
  action to_action_1 {}
  action to_action_2 {}
  action from_action_1 {}
  eg = (
      start: (
          any -> s1
        ),
      s1: (
          any -> s2
        )>to(to_action_1) >from(from_action_1),
      s2: (
          any -> final
        )>to(to_action_2)
      );
  main := ( eg ) ;
}%%

%% write data

和 graphviz (ragel -Vp -o def_eg.dot def_eg.rl):

现在,表达式从任意字符变为单个字符。并使用这些单个字符来表示状态。

%%{
  machine def_eg;

  event_1='1';
  event_2='2';
  event_3='3';

  action to_action_1 {}
  action to_action_2 {}
  action from_action_1 {}

  eg = (
      start: (
          event_1 -> s1
        ),
      s1: (
          event_2 -> s2
        )>to(to_action_1) >from(from_action_1),
      s2: (
          event_3 -> final
        )>to(to_action_2)
      );
  main := ( eg ) ;
}%%

%% write data

图示为: