是否有一些类似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)来帮助实现对话?
答案 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中编写“语法”,创建语法树,并使用自定义有状态树访问者,根据您收到的消息类型对其进行评估。有状态树访问者将保存您在树上的信息。
这个解决方案是高度理论化的,但我可能会成为一个起点。