2015-10-05 55 views
1

是否有一些類似lex + yacc的工具來實現網絡通信「語法」?我不知道「語法」是用於這一術語,但是這是我的意思是:Metasyntax和網絡通信工具「語法」?

客戶端和服務器之間的對話始於

Client        Server 
     ---Client hello-------------> 
     <--Server hello-------------- 

然後,繼續的重複無論是

Client        Server 
     ---Get number of Foo items--> 
     <--Number of Foo items------- 

Client        Server 
     ---Get list of Baz items----> 
     <--List of Baz items--------- 

在EBNF有問題的語法:十歲上下元語法會是這樣的

<start> = <client hello> , <server hello> , { <client request> } ; 
<client request> = <get number of Foo items> , <number of Foo items> 
       | <get list of Baz items> , <number of Baz items> ; 

有沒有這樣的事情描述了客戶機/服務器會話以及是否有任何工具(主要用於.NET),以幫助談話的實施?

回答

1

您可以使用有限狀態自動機爲每個代理建模,顯示它如何對消息作出反應。 (兩個代理 - > 2個FSA,每個代理一個)。

系統的完整行爲就是FSA的交叉產品。一個工具可能要計算,但人們幾乎寧願看到單個FSA。

FSA的一個很好的概括是Colored Petri Nets,它允許代理響應消息的內容及其存在,以及處理各種類型的同步。交換類型(「彩色」)值。

一個關鍵問題是類型系統的豐富性;我從來沒有見過可以爲參數化類型建模的CPN,但我懷疑這只是將正確的類型系統粘貼到一個參數化類型的問題,然後您可以將「列表」作爲顏色進行建模。

(如果你使用一個CPN只有一種令牌攜帶任何值傳統有色「黑」],並且不使用CPN同步功能,CPNS直接衰變成FSA的。)

一個非常好的用於管理和推理CPN的工具集可以在以下網址找到:http://cpntools.org/我對這些工具沒有具體的經驗,但在過去的20年中一直關注他們的發展。

這些形式中的每一個都有限制。例如,您可能想要模擬兩個代理之間交換的消息數量是梅森素數的事實。 FSA和標準CPN都不能做到這一點。這個問題很像「常規BNF」無法爲上下文敏感語言建模的問題。

通常你爲了方便表達和推理而進行任意計算。這就是爲什麼FSA比CPN(FSA可用)更受歡迎,而CPN比純粹的過程計算更有用。

+0

我很可能會選擇傳統的FSA,但是CPN對我來說是新的,並且很有啓發性。 –

0

我不知道任何工具可以直接幫助你,但你可以閱讀關於Dataflows in TPL(排隊和溝通)和Irony Project的文法。

你可以寫在一個反諷「語法」,創建一個語法樹,使用自定義狀態樹先生,評估它立足於一個類型,你已經收到了消息。有狀態的樹訪問者將持有你在樹上的信息。

這個解決方案非常理論化,但我可能會成爲一個起點。