元语法和网络通信工具"grammar" ?



是否有一些类似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个fsa,每个fsa一个)。

系统的完整行为则是fsa的叉积。一个工具可能想要计算这个,但人们更愿意看到单个的fsa。

fsa的一个很好的概括是彩色Petri网,它允许代理响应消息的内容以及它们的存在,以及处理各种类型的同步。尼泊尔共产党交换类型("有色")值。

关键问题是类型系统的丰富性;我从来没有见过一个CPN可以建模参数化类型,但我怀疑这只是把正确的类型系统粘在一起的问题,然后你可能可以把"list of"建模为一种颜色。

(如果您使用只有一种不带值的令牌的CPN,并且您不使用CPN同步功能,则CPN会直接衰减为fsa。)

一个非常好的cpn管理和推理工具集可以在:http://cpntools.org/找到。我对这些工具没有具体的经验,但在过去的20年里,我一直带着浓厚的兴趣关注着它们的发展。

每一种形式都有限制。例如,您可能希望对两个代理之间交换的消息数量为Mersenne素数这一事实进行建模。fsa和标准cpn都做不到这一点。这个问题很像"传统的BNF"无法对上下文敏感的语言建模。

通常你用任意计算的能力来换取表达和推理的便利。这就是为什么fsa比cpn更受欢迎(其中fsa可用),cpn比纯过程演算更有用的原因。

我不知道有什么工具可以直接帮助你,但是你可以阅读TPL中的数据流(用于排队和通信)和Irony Project中的语法。

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

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

最新更新