Promela: как использовать цикл for для массива типа typedef
Я хотел бы иметь возможность использовать цикл for для цикла через массив значений typedef, как показано ниже:
typedef chanArray {
chan ch[5] = [1] of {bit};
}
chanArray comms[5];
active proctype Reliable() {
chanArray channel;
for ( channel in comms ) {
channel.ch[0] ! 0;
}
}
Вращение дает следующую ошибку:
spin: test2.pml:8, Error: for ( channel in .channel_name ) { ... }
Можно ли использовать цикл for в этой форме для циклического прохождения массива вместо необходимости использовать цикл for с указателем индекса?
2 ответа
Решение
Пытаться:
active proctype Reliable () {
byte index;
index = 0;
do
:: index < 5 -> channel.ch[index] ! 0; index++
:: else -> break
od
}
это единственный способ. Таким образом, ответ на ваш вопрос "возможно ли это?" - "нет, это невозможно..."
Я новичок в Promela, но кажется, что вы используете
for '(' varref in channel ')' '{' sequence '}'
вместо
for '(' varref ':' expr '..' expr ')' '{' sequence '}'
Попробуйте что-то вроде
int i;
for (i : 0..4 ) {...}