2015-10-05 54 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的文法。

你可以写在一个反讽“语法”,创建一个语法树,使用自定义状态树先生,评估它立足于一个类型,你已经收到了消息。有状态的树访问者将持有你在树上的信息。

这个解决方案非常理论化,但我可能会成为一个起点。