Metasyntax和网络通信工具“语法”?

时间:2015-10-05 13:25:25

标签: .net parsing network-programming

是否有一些类似lex + yacc的工具用于实现网络通信“语法”?我不确定“语法”是用于此的术语,但这就是我的意思:

客户端与服务器之间的对话以

开头
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中的语法:ish metasyntax就像是

<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)来帮助实现对话?

2 个答案:

答案 0 :(得分:1)

您可以使用有限状态自动机对每个代理进行建模,以显示它对消息的反应。 (两个代理商 - > 2个FSA,每个代理商一个)。

系统的完整行为是FSA的交叉产物。一个工具可能想要计算它,但人们更愿意看到各个FSA。

FSA的一个很好的概括是Colored Petri Nets,它允许代理响应消息的内容及其存在,以及处理各种类型的同步。 CPNS 交换类型(&#34;彩色&#34;)值。

关键问题是类型系统的丰富性;我从来没有见过可以对参数化类型进行建模的CPN,但我怀疑这只是将正确的类型系统粘合到一个系统上,然后你可以建模&#34;列表&#34;作为一种颜色。

(如果您使用的CPN只有一种没有价值的令牌[传统上有色&#34;黑色&#34;],并且您不使用CPN同步功能,则CPN会直接衰减到FSA中。)

用于管理和推理CPN的一个非常好的工具集可以在以下网址找到:http://cpntools.org/我对这些工具没有具体经验,但在过去的20年中一直关注他们的发展,并引起了极大的兴趣。

这些形式主义都有限制。例如,您可能想要模拟两个代理之间交换的消息数是梅森素数的事实。 FSA和标准CPN都不能做到这一点。问题很像问题&#34;传统的BNF&#34;无法模拟上下文相关的语言。

通常你交易能够进行任意计算以方便表达和推理。这就是为什么FSA比CPN(FSA可用)更受欢迎,而且CPN比纯粹的过程计算更有用。

答案 1 :(得分:0)

我不知道任何可以直接帮助您的工具,但您可以阅读Dataflows in TPL(用于排队和通信)和Irony Project语法。

您可以在Irony中编写“语法”,创建语法树,并使用自定义有状态树访问者,根据您收到的消息类型对其进行评估。有状态树访问者将保存您在树上的信息。

这个解决方案是高度理论化的,但我可能会成为一个起点。