2016-01-18 67 views
0

當我嘗試比較我的結構的一個屬性(不是第一個屬性)時,我遇到了promela語言的問題。只比較一個結構的一個屬性

下面是一個例子:

typedef Msg { 
    byte header; 
    byte content; 
} 

chan pipe = [5] of { Msg }; 

active proctype Receive() { 
    Msg r;  
    do 
     :: atomic { (pipe?[1,2]) -> printf("Receive"); pipe?r; } 
     // doesnt compile: :: atomic { (pipe?[-,2]) -> printf("Receive2"); pipe?r; } 
     // doesn't compile: :: atomic { (pipe?[, 2]) -> printf("Receive3"); pipe?r; } 
     // doesn't works: :: atomic { (pipe?[skip, 2]) -> printf("Receive4"); pipe?r; } 
    od   

} 



active proctype Emit() { 
    Msg m; 
    m.header=1; m.content=2; 
    // doesn't compile: m = { 1,2 }; 
    do 
    :: atomic { printf ("emit\n"); pipe!m; }                                   
    od                                            
} 

的問題是很容易的:我想只比較content屬性。不是前一個(header)。 我試過一些語法,看看語法(http://spinroot.com/spin/Man/grammar.html#recv_args ...順便說一句,我不是專家)。 但我仍然堅持這個問題。

我使用ispin來模擬和測試。

任何幫助將是偉大的。

謝謝!

回答

1

您不能在receive中使用'通用匹配字符',如' - '。所以,只要聲明一個變量,因爲這樣的:

active proctype Receive() { 
    Msg r; 
    byte ignore 
    do 
     :: atomic { (pipe?[1,2]) -> printf("Receive"); pipe?r; } 
     :: atomic { (pipe?[ignore,2]) -> printf("Receive2"); pipe?r; } 
    od   

} 

它編譯:

$ spin -a foo.ml 
$ 
+0

由於它的工作原理。但這聽起來很奇怪......你能解釋一下這個事實,即未初始化的「ignore」通過測試嗎? – AilurusFulgens

+0

'pipe?[ignore,2]'只需要'2'匹配; 「忽略」用第一個字段的值填充。 – GoZoner

相關問題