Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Promela:将数组传递给新proctype_Arrays_Promela_Spin - Fatal编程技术网

Arrays Promela:将数组传递给新proctype

Arrays Promela:将数组传递给新proctype,arrays,promela,spin,Arrays,Promela,Spin,我需要在Promela中将一个数组从父进程传递到子进程,但它不允许我这样做。另外,我在使这个数组成为全局数组时有一些限制,所以也不能这样做。如何做到这一点 例如: proctypeb(int-hg) { .. } proctype A() { int-hg[n]; 运行B(hg); } 的文档说明: 说明运行运算符将 以前声明的proctype,以及可能为空的实际 参数,这些参数必须与正式文件的数量和类型匹配 该类型的参数。[……] 运行操作员必须将实际参数值传递给新流程, 如果proctype

我需要在Promela中将一个数组从父进程传递到子进程,但它不允许我这样做。另外,我在使这个数组成为全局数组时有一些限制,所以也不能这样做。如何做到这一点

例如:

proctypeb(int-hg)
{
..
}
proctype A()
{
int-hg[n];
运行B(hg);
}
的文档说明:

说明运行运算符将 以前声明的proctype,以及可能为空的实际 参数,这些参数必须与正式文件的数量和类型匹配 该类型的参数。[……]

运行操作员必须将实际参数值传递给新流程, 如果proctype声明指定了一个非空的形式参数 名单只能使用消息通道和基本数据类型的实例 无法作为参数传递。无法传递变量数组。

[重点是我的]


您应该考虑使用<强>全局< /强>变量。 在下面的示例中,我们将数组与进程可能需要的任何其他参数一起封装在一个内,并声明此类记录的全局向量。然后,我们交换包含其他进程参数的记录的

索引,而不是直接传递
数组
参数

#定义m 10
#定义n10
typedef记录{
int-hg[n];
// ...
//其他参数
// ... 
};
记录数据[m];
活动proctype A()
{
int-idx=1;
数据[idx].hg[0]=12;
// ...
运行B(idx);
}
程序类型B(int idx)
{
断言(数据[idx].hg[0]==12);
数据[idx].hg[0]=17;
// ...
}
这将允许您生成验证器:

~$ spin -search -bfs test.pml
...
State-vector 424 byte, depth reached 6, errors: 0
...
~$ spin -search -bfs test.pml
spin: test.pml:18, Error: hidden array in parameter data

或者,并且只有在不需要生成验证器的情况下,才可以简单地传递记录实例例如

#定义n 10
typedef记录{
int-hg[n];
// ...
//其他参数
// ... 
};
活动proctype A()
{
记录我的记录;
my_record.hg[0]=12;
// ...
运行B(我的记录);
}
程序类型B(记录数据)
{
断言(data.hg[0]==12);
数据hg[0]=17;
// ...
}
但是,此仅在模拟模式下工作,特别是它将允许您生成验证器:

~$ spin -search -bfs test.pml
...
State-vector 424 byte, depth reached 6, errors: 0
...
~$ spin -search -bfs test.pml
spin: test.pml:18, Error: hidden array in parameter data
事实上,文件中明确提到

typedef对象也可以用作run语句中的参数,但在本例中,它可能不包含任何数组

[重点是我的]


谢谢你的帮助,但还有一个问题。如果我们在typedef中使用数组,然后使用“spin my_file.pml”运行我们的文件,它运行时不会出现任何错误,并根据需要给出结果。但是,当使用“spin-a my_file.pml”运行我们的文件以生成pan文件(用于验证)时,它抛出一个错误:参数@Carol中的隐藏数组谢谢您的报告,我更新了答案。