我想我可以区分event和guard。但是我遇到了一个类似于守卫的事件:
counter > 4 [pin is high] / switch on
^^^^^^^^^^^
event
我将变量计数器从小于 4 的某个值更改为大于 4 的事件视为事件。这是否意味着事件也可以是守卫之类的条件?
事件是触发转换的事物。在您的情况下counter > 4
是一个更改事件,这意味着“计数器值已更改并且其值现在大于 4 ”。
括号之间的代码是guard。在您的情况下pin is high
,意思是“只有在引脚为高电平时才启用转换”。
switch on
是执行转换时执行的行为。
脚注:在您的示例中,事件确实与警卫非常相似。
在 C 中,它可能看起来像这样:
/**
* this interrupt is triggered when the
* counter exceeds the threshold (4)
*/
static void counter_isr(void)
{
if (pin_is_high(PIN))
switch_on();
}
从 UML 2.5 规范:
14.2.3.8 转换 ...一个转换可能拥有一组触发器,每个触发器指定一个事件,其发生在调度时可能触发转换的遍历。如果调度的事件发生与其事件类型匹配,则称启用了转换触发器。
14.2.4.9 转换...转换的默认文本符号由以下 BNF 表达式定义:
[<trigger> [‘,’ <trigger>]* [‘[‘ <guard>’]’] [‘/’ <behavior-expression>]]
换句话说:trigger [guard] / behavior