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

时间:2017-05-06 23:07:20

标签: fsm ragel

Ragel 6.10手册中有许多关于它生成的FSM的插图。其中一些显示状态DEF。 最好的我可以告诉它从未被定义/讨论过。

  1. 什么是DEF州?
  2. 它的含义是什么?例如如果它出现在你的FSM abc应该完成
  3. 提前致谢

1 个答案:

答案 0 :(得分:1)

回答Q1:

DEF表示默认转换,如果不能进行其他转换,则采用此转换。

回答Q2:

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

  1. 使用常规语言定义FSM: 你想在any角色上从州A移动到州B吗?
  2. 使用州图表定义FSM: 你想在任何活动中从A国搬到B国吗?你有一个默认的概念吗?过渡?。
  3. 通过使用手册(版本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):

    Showing any character/event

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

    %%{
      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
    

    如图所示:

    Showing any character replaced by single character/event