1. Choice选择 ‘|’
用于在一个流程中创建一个可选项,即这个process可以同时选择这个‘|’左边的atomic action或者右边的atomic action。 注意LTS会展现出这个FSP的全部可能发生流程,所以这个选择不会像java等语言中只会选择其中之一,而是在展现时同时展现着两种可能行为。它做x就会去P,做y会去Q。你不需要考虑这个x,y是什么,他们只是action。他们在现实中的对应关系无所谓,只要顺序对就行。
Eg:
你会发现在这个情况下,因为多了一个button的可选项,所以图中同时有了两个可能的运行路线。有button和no button。(这里上面的代码写错了,none -> GREEN 实际应该是nobutton -> GREEN)
观察这个例子和之前的traffic light例子:
你会发现这些叫0,1,2的state的建立不一定是由流程名称建立!可以在一个流程中建立多个这种state。只要发生一个action(eg green ->) 只要这个行为之前没有发生过,他就会创建一个新的状态(state)。
但在第一个例子中,每一个状态都有一个固定的process何其对应,例如:
Yellow = yellow->RED, RED = red -> TRAFFIC-LIGHT, YELLOW对应2, RED对应3,TRAFFIC_LIGHT对应0.
所以给这些特定的action抽象一个process出来其实相当于给一个state起了个名字,会更有助于你理解这个FSP系统。也使得这个流程间的state可以单独互相互动。例如 state0可以同时去state1或者2。这会让你的FSP系统建立更流畅。
2. Indexed processes 一次创建多个相同名字不同编号的名字(有点像for loop):
=
这两个是相等的。 in[i:0..3]->out[i]可以被理解为:
for i in range 3:
in[i] -> out[i] -> BUFF
然后这些数组之间的元素用|连接。
0..3 是一个range,代表0,1,2,3
3. constants and range 常数和范围:
这里的range就是那个数组,可以直接把刚刚的for loop写成 in[i:T], 方便
4. guarded action 有条件的action:
这个和python中的if差不多了,就是只有when()时这个action才会发生。
这个FSP的图:
这里的COUNT[i:0..N]其实相当于创建了4个state。state1,2可以inc也可以dec。 state0只能inc,state3只能dec。
5.STOP 停止:
这其实是一个提前定义好的process,代表着再也没有之后的action。
STOP:
例子:
如果同时有两个action可以到同一个state,就会以{a,b}的形式表示。