《Semi-Automated Protocol Disambiguation and Code Generation》

SIGCOMM ’21

2023.3.10

文章提供了一个工具sage,可以发现RFC文档中存在歧义的地方,生成中间代码,从而生成代码,文章主要测试了ICMP和IGMP协议

主要流程图

语义解析

语义解析功能建立在工具CCG的基础上。

文章将RFC文档中的描述分为两类组件:

  • 概念型组件( Conceptual components):描述协议结构和行为,包括头字段的语义描述、发送者和接收者行为的规范、谁应该与谁通信、应该如何管理会话,以及应该如何构建协议实现。
  • 语义型组件( Syntactic components):包括标图、表、状态机描述、通信图和算法描述

sage分别有部分的解析能力,图中,绿色表示可以,橄榄色表示部分可以,其余都需要人为说明

概念型组件与语义型组件

还有一些难以解析的句子,是因为现阶段NLP的局限性

语义解析局限

工具CCG有一个词典(语料库),词典需要人为扩充,例如:

词典

设置词典需要完成以下工作:

  • 指定特定领域的语法语义
  • 提取RFC中的文本结构与非文本结构

消除歧义

对于同一条自然语句,因为可能存在的歧义,sage会生成多条IR语句,为了消除歧义,sage定义了一个过滤器

  • 类:对于每个谓词,sage定义了一个或多个类型检查:操作谓词具有函数名称参数,赋值在左侧不能有常量,条件必须格式良好,以此类推
  • 参数的顺序:sage会删除违反顺序的中间代码。
  • 分配律:消除逗号
  • 结合律:如果谓词是有关联的,那么它们的逻辑形式树将是同构的。sage使用一个标准的图同构算法来检测关联性。

测试

测试1

测试2

测试3