以下是我写的Promela代码。
491 byte api1[5];
492 byte api2[5];
493 byte api3[5];
494 byte reftask1[5]
495 byte reftask2[5];
496 byte reftask3[5];
497 byte rid1[5];
498 byte rid2[5];
499 byte rid3[5];
500
501
502 proctype init_call(){
503 byte i1 = 0;
504 do
505 :: (i1 == 5) -> break
506 :: else ->
507 select ( api1[i1]: 2 .. 9);
508 select ( api2[i1] : 2 .. 9);
509 select ( api3[i1] : 2 .. 9);
510 select ( reftask1[i1] : 1 .. 3);
511 select( reftask2[i1] : 1 .. 3);
512 select ( reftask3[i1] : 1 .. 3);
513 select ( rid[i1] : 0 .. 1);
514 select ( rid[i1] : 0 .. 1);
515 select ( rid[i1] : 0 .. 1);
516 i1++;
517 od
518 }
但是,如果我尝试模拟代码,我会收到如下错误消息,
看到:'[',预期':'旋转:osek_sp2.pml:507,错误:期待选择 (名称:常数...常数)靠近'select'
但是,根据语法定义,我找不到任何问题。
SYNTAX
选择'('varref':'expr'..'expr')'varref:name ['['any_expr']'] ['。' varref]
此错误消息的原因是什么?
答案 0 :(得分:2)
spinlex.c
,您会看到在name
之前扫描:
时,只允许使用字母数字字符:
scan_to(':', isalnum, name)
无论如何,select
只是一系列作业的简写。因此,解决方法可能是自己编写作业,例如
api1[i1] = 2;
do
:: (api1[i1] < 9) -> api1[i1]++
:: break
od