BIP语言简介

 
下面用一些简单的例子来介绍BIP语言
更多细节请参考完整文档。

BIP语言&语法

BIP语言主要用来定义类型(构件和连接器的类型),同时描述构件的架构。下面我们将简单介绍如何定义和初始化BIP类型。

端口类型 Port Type

端口主要用于构件之间的协调。端口类型可以包括很多变量,它们主要用于与其他构件进行数据交互时传递数据。交互和数据传输都被定义成连接器类型。端口类型主要包括
  • 类型名称
  • 数据变量参数的列表(可以为空)
端口类型示例

port type ePort // 没有相关联的变量
port type IntPort(int x) //有一个相关联的变量x

原子构件类型

原子构件是构件层次结构中的叶子节点。一个原子构件类型主要包括
  • 类型名称
  • 用于初始化类型的数据参数列表
  • 数据变量集合
  • 时序集合
  • 内部和输出(用于与其他构件的同步)端口集合
  • 行为
行为是用Petri net来描述的,定义如下:
  • 状态集合
  • 初始迁移
  • 迁移集合
迁移的触发条件是数据变量满足特定的布尔条件,同时满足时序上的时间约束(内部约束和紧急类型)。迁移可以执行时序动作(重置或停止时序子集、让时序子集继续执行),以及时序代码中定义的数据转换。注意初始迁移只能执行时序动作和一段代码。

原子构件类型示例
 
atomic type HelloWorld(int n)
 data string msg = "Hello BIP world"
 data int x

        port ePort print()
 export port ePort idle()
 export port IntPort(x)

 place S1, S2
 initial to S1 do x=n;

 on print from S1 to S2 provided true do printf("%s %d", msg.c_str(), x);
 on idle  from S2 to S1 provided true do sleep(1);
end

复合构件类型

复合构件类型定义了层次结构中的每一层。它包括了其他构件类型的实例(子构件),以及连接器类型的实例。连接器类型的实例主要用于连接构件和用来安排构件之间交互顺序的优先级。

复合构件提供了与原子构件相同的接口,所以从表面上看原子构件和复合构件没什么区别。子构件中的内部端口都可以输出到外部。

复合构件类型示例

compound type Team
 component Producer P
 component Consumer C

 connector RDV Communicate (P.prod, C.cons)
 connector Singleton P_work(P.work)
 connector Singleton C_work(C.work)
end
连接器类型

连接器类型定义了端口之间的同步协议(rendez-vous,广播等)和传输过程中的数据。一个连接器类型主要包括:
  • 类型名称
  • 端口参数列表
  • 输出端口(用于构建有层次结构的连接器),可以没有
  • 数据传输过程中的上/下行为集合
连接器类型示例

connector type Singleton(ePort p)
 define [p] // set of enabled interactions: {p}
end

connector type RendezVous(IntPort p1, IntPort p2)
 define [p1 p2] // set of enabled interactions: {p1 p2}
 on p1 p2 up {} down {p2.x = p1.x;}
end

connector type Broadcast(IntPort p1, IntPort p2, IntPort p3)
 define [p1' p2 p3]  // set of enabled interactions: {p1}, {p1 p2}, {p1 p3}, {p1 p2 p3}
 on p1       up {} down {}
 on p1 p2    up {} down {p2.x = p1.x;}
 on p1 p3    up {} down {p3.x = p1.x;}
 on p1 p2 p3 up {} down {p2.x = p1.x; p3.x = p1.x;}
end
 
示例&教程

即将推出
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页