此版本主要介绍了更多的语言语法建议、最新的Antlr Parser库、GUI改进和错误修复。
语言更改以下为:
1 CSP模块中支持索引布尔表达式。
索引表达式是将OR或AND表达式列表在一系列变量中分组的语法糖。语法如下:
典型示例如下:
var x[3];
P=if(&&i:{0..2}@(x[i]==0)){bingo->Skip};
CSP模块支持2个索引事件。
语法糖索引事件列表可用于字母表的定义。例如:
#定义N2;
P=e.0.0->e.0.1->e.0.2->圈->e.1.0->e.1.1->e.1.2->e.2.0->e.2.1->e.2.2->P;
#字母P{x:{0..N};y: {0..N}@e.x.y};
上述定义将过程P的字母表定义为除过程定义中出现的事件转折之外的所有事件的集合。
语法糖索引事件列表可用于定义具有相同前缀的一组事件。例如,流程dashPhil()的定义可以重写如下。
dashPhil()=Phil((){x:{1..2}@getfork.x,y:{1..2}@putfork.y};
3增加了事件和数据操作不同步的警告。
这是许多用户提出的一个常见问题,对于以下程序,两个进程P()和Q()能否在事件a上同步?如果不是,那么如何使它们在“a”上同步并以原子方式保留语句块({x++})的执行?
var x=0;
P()=a{x++}->b->P();
Q()=a->c->P();
系统()=P()||Q();
答案:
数据操作不同步是避免数据竞争的设计决策。如果两个数据操作可以同步,则相同全局变量的更新可能会导致数据竞争。因此,PAT将发出警告,如果在并行运行的不同进程中有一个数据操作和一个相同的事件。
回到问题上来,一个直观的解决方案是将事件“a”和增量语句放在原子操作中,如下所示:
P()=原子{a->update{x++}->Skip};b->跳过;
Q()=a->c->跳过;
aSystem()=P()||Q();
然后,x将在a接合后立即更新,a将同步。
另一种可能的解决方案是:
P()=a->update{x++}->a1->b->P();
Q()=a->a1->c->P();
4个解析器更新到最新版本的Antlr C#库。
图形用户界面
增加了1个启动屏幕
2模型检查中的多属性选择
3模型检查输出形式中的更多高亮度照明
4 GUI中的错误修复
示例
1 LTS模块中添加了更多示例。
2 CSP模块中Kight Tour示例中添加了模拟图像
错误修复
1外部选项中的错误在所有模块中都已修复